最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript引擎長時間獨占線程造成卡頓的解決方案

 更新時間:2014年12月03日 15:44:32   投稿:hebedich  
這篇文章主要介紹了javascript引擎長時間獨占線程造成卡頓的解決方案,需要的朋友可以參考下

Javascript 引擎的單線程特性使得在處理一個較大的循環(huán)遍歷時會長時間獨占線程,導(dǎo)致其它事件(例如用戶操作)無法及時響應(yīng),嚴重時造成卡頓甚至是假死現(xiàn)象。為解決上述問題,一種可行機制是將大的循環(huán)拆分成若干小的循環(huán)片段分片執(zhí)行,使得Javascript 引擎有時機在各段之間插入執(zhí)行其它事情,從而有效改善性能體驗

Ansync.js

復(fù)制代碼 代碼如下:

function Ansync (totalCount, segmentCount, workCallback, returnCallback)
{
    var num_of_item_for_each_segment = segmentCount;
    var num_of_segment = Math.ceil(totalCount / num_of_item_for_each_segment);
    var count_of_segment = 0;
    var timer;
    var start, end;
    this.process = function(scope, timeout)
    {
        if (scope != undefined)
        {
            workCallback = workCallback.bind(scope);
            returnCallback = returnCallback ? returnCallback.bind(scope) : undefined;
        }
        if (count_of_segment == num_of_segment)
        {
            clearTimeout(timer);
            if (returnCallback != undefined)
                returnCallback();
        }
        else
        {
            start = count_of_segment * num_of_item_for_each_segment;
            end = Math.min(totalCount, (count_of_segment + 1) * num_of_item_for_each_segment);
            if (num_of_segment == 1)//needn't create timer
            {
                workCallback(start, end);
                count_of_segment = 1;
                this.process();
            }
            else
            {
                timer = setTimeout(function ansyncTimeout(){
                    if (workCallback(start, end)) //finish process if function returns true
                    {
                        count_of_segment = num_of_segment;
                    }
                    else
                    {
                        count_of_segment++;
                    }
                    this.scope.process();
                }.bind({scope: this}),timeout == undefined ? Ansync.TimeOut : timeout);
            }
        }
    }
}
Ansync.TimeOut = 5;

方法很簡單,但是很實用,有相同項目需求的小伙伴參考下吧

相關(guān)文章

最新評論

灵璧县| 昌都县| 达孜县| 台南县| 孟连| 奉贤区| 句容市| 湖口县| 景泰县| 鹤壁市| 元江| 桃园市| 沙田区| 漾濞| 达州市| 东明县| 巴东县| 元阳县| 德州市| 库伦旗| 江川县| 上饶市| 无锡市| 凤翔县| 腾冲县| 宁安市| 云阳县| 榆社县| 开远市| 达拉特旗| 靖远县| 湖州市| 永济市| 瑞昌市| 抚松县| 寿光市| 会宁县| 突泉县| 仪征市| 禹州市| 广东省|