美文网首页
时间切片

时间切片

作者: 甜柚小仙女 | 来源:发表于2019-10-08 14:44 被阅读0次

一、核心思想:如果任务不能在50毫秒内执行完,那么为了不阻塞主线程,这个任务应该让出主线程的控制权,使浏览器可以处理其他任务

二、目的:不阻塞主线程,而实现目的的技术手段是将一个长任务拆分成很多个不超过50ms的小任务分散在宏任务队列中执行(避免拆分的过于零碎,效率反而不高)

三、缺点:任务运行的总时间变长了。因为它每处理完一个小任务后,主线程会空闲出来,并且在下一个小任务开始处理之前有一小段延迟

四、使用。

   1)使用定时器实现:

              btn.onclick = function(){

                     someThing();            //50ms

                     setTimeOut({      

                             otherThing()       //50ms

                     });

                 };

     2) 利用Generator特性实现:



               btn.onclick =ts( function* (){

                    someThing();            //50ms

                      yield;

                      otherThing();          //50ms

               }) ;

               function ts(gen){

                    if(typeof(gen) === 'function')  gen = gen();

                    if(!gen || typeof gen.next !='function') return;

                     return function next(){

                          const res = gen.next();

                          if(res.done)  return;

                          setTimeOut(next);

                      };

                };

             优化ts:避免任务粒度太小
              function ts(gen){

                    if(typeof(gen) === 'function')  gen = gen();

                    if(!gen || typeof gen.next !='function') return;

                     return function next(){

                         let start = performance.now();

                         let res = null;

                         do{

                                res = gen.next();

                         }while(!res.done && performance.now-start<25)  

                          if(res.done)  return;

                          setTimeOut(next);

                      };

                };

相关文章

  • 时间切片

    一、核心思想:如果任务不能在50毫秒内执行完,那么为了不阻塞主线程,这个任务应该让出主线程的控制权,使浏览器可以处...

  • 石蜡切片的操作要点

    组织化学中的组织切片主要有石蜡切片法、冰冻切片法和振动切片法等。 石蜡切片法比较节省时间,操作容易,可切极薄的组织...

  • 时序数据增强

    基于变换的方法 WS(window slicing窗口切片) 对原始时间序列按一定长度切片,并在切片层次上进行训练...

  • 968《把时间当做朋友:时间切片》

    (一、关注步骤) 所谓”三思而行”,在我看来就是指做任何事情之前,都要考虑相关的三个方面,内容what,原因why...

  • Golang学习心得—切片

    在Golang中有数组和切片两种处理同类型数据序列的方式,但是我们大部分时间都在使用切片,Go的切片是在数组之上的...

  • 15.Go_Slice(切片)

    Go 切片 定义切片 切片初始化 len()和cap()函数 空(nil)切片 切片拦截 append() 和co...

  • Python的高级特性

    切片 list切片 tuple切片 str切片 迭代 在Python中迭代是通过for ... in ...来实现...

  • 切片

    切片前的准备 1切片前,备份图片;切片后,也要保存文件,为日后修改做准备。 2切片前设置切片文件夹(?不懂) 切片...

  • 你能一口说出go中字符串转字节切片的容量嘛?

    神奇的现象 切片, 切片, 又是切片! 前一篇文章讲的是切片, 今天遇到的神奇问题还是和切片有关, 具体怎么个神奇...

  • 【golang】slice底层函数传参原理易错点

    切片底层结构 切片的底层结构主要包括引用数组的地址data,切片长度len与切片容量cap。 以切片为参数调用函数...

网友评论

      本文标题:时间切片

      本文链接:https://www.haomeiwen.com/subject/irvtsctx.html