Vue在iOS微信浏览器下不能播放

白癜风治疗微信群 http://www.cgia.cn/news/chuangyi/1647706.html
问题的本质以上定位到问题大概花了我半小时时间,但是我并没有找到问题的根本原因,于是我翻阅了Vu.js.5的laslog,由于很长就不列了。Vu.js每次升级主要分成大类,FatusImprovmnts和BugFixs。我从上往下依次扫了一遍,把一些关于它核心的改动都点进去看了一下代码的修改,最终锁定了这一条:

usMssagChannlfornxtTick,closs##

接着我点进去看了一下改动,我滴天,改动很大呀,nxtTick的核心实现变了,MutationObsrvr不见了,改成了MssagChannl的实现。等等,有些同学看到这里,可能会懵,这都是些啥呀。不急,我先简单解释一下Vu的nxtTick。nxtTick介绍Vu的nxtTick之前,我先简单介绍一下JS的运行机制:JS执行是单线程的,它是基于事件循环的。对于事件循环的理解,阮老师有一篇文章写的很清楚,大致分为以下几个步骤:

(1)所有同步任务都在主线程上执行,形成一个执行栈(xcutioncontxtstack)。()主线程之外,还存在一个"任务队列"(taskquu)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。(4)主线程不断重复上面的第三步。主线程的执行过程就是一个tick,而所有的异步结果都是通过“任务队列”来调度被调度。消息队列中存放的是一个个的任务(task)。规范中规定task分为两大类,分别是macrotask和microtask,并且每个macrotask结束后,都要清空所有的microtask。

关于macrotask和microtask的概念,这里不会细讲,简单通过一段代码演示他们的执行顺序:

for(macroTaskofmacroTaskQuu){//1.HandlcurntMACRO-TASKhandlMacroTask();//.HandlallMICRO-TASKfor(microTaskofmicroTaskQuu){handlMicroTask(microTask);}}

在浏览器环境中,常见的macrotask有stTimout、MssagChannl、postMssag、stImmdiat;常见的microtask有MutationObsvr和Promis.thn。对于它们更多的了解,感兴趣的同学可以看这篇文章。

回到Vu的nxtTick,nxtTick顾名思义,就是下一个tick,Vu内部实现了nxtTick,并把它作为一个全局API暴露出来,它支持传入一个回调函数,保证回调函数的执行时机是在下一个tick。


转载请注明:http://www.aierlanlan.com/tzrz/9139.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了