Javascript引擎的长时间独占线程导致了纸箱的解决方案。

单线程的Javascript引擎的特点使大型循环处理通过长时间的专用线程,导致其他事件(如用户)不能及时响应,造成严重的卡顿甚至假死的现象。为了解决这些问题,一个可行的机制是将大周期分成几个小圆形的碎片,使Javascript引擎有时间段之间插入其他的事情,从而有效地提高性能的经验。

ansync.js

复制代码代码如下所示:

Ansync(测度函数,segmentcount,workcallback,returncallback)

{

无功num_of_item_for_each_segment = segmentcount;

num_of_segment = math.ceil(VaR测度 / num_of_item_for_each_segment);

无功count_of_segment = 0;

VaR的定时器;

开始,结束;

this.process =功能(范围、超时)

{

如果(范围)!=未定义)

{

workcallback = workcallback.bind(范围);

returncallback = returncallback returncallback.bind(范围):定义;

}

如果(count_of_segment = num_of_segment)

{

ClearTimeout(定时器);

如果(returncallback!=未定义)

returncallback();

}

其他的

{

开始= count_of_segment * num_of_item_for_each_segment;

= Math.min(测度,((count_of_segment + 1)* num_of_item_for_each_segment);

如果(num_of_segment = = 1) / /不必创建计时器

{

workcallback(开始、结束);

count_of_segment = 1;

this.process();

}

其他的

{

定时器= setTimeout(功能ansynctimeout(){)

如果(workcallback(开始、结束)) / /完成的过程,如果函数返回true

{

count_of_segment = num_of_segment;

}

其他的

{

count_of_segment + +;

}

this.scope.process();

({ }。绑定范围:本}),超时= =定义的ansync.timeout:超时);

}

}

}

}

ansync.timeout = 5;



这个方法很简单,但非常实用,有一个小伙伴,对项目有同样的需求。