欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)文章

  • JS閉包經(jīng)典實例詳解

    JS閉包經(jīng)典實例詳解

    這篇文章主要介紹了JS閉包,結(jié)合一個經(jīng)典實例較為詳細的分析了javascript閉包的原理及使用方法,需要的朋友可以參考下
    2018-12-12
  • js實現(xiàn)模擬購物商城案例

    js實現(xiàn)模擬購物商城案例

    這篇文章主要為大家詳細介紹了js實現(xiàn)模擬購物商城案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 微信小程序?qū)崿F(xiàn)tab頁面切換效果

    微信小程序?qū)崿F(xiàn)tab頁面切換效果

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)tab頁面切換效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • leaflet基本使用示例教程

    leaflet基本使用示例教程

    這篇文章主要介紹了leaflet基本使用示例教程,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • 整理Javascript基礎(chǔ)語法學(xué)習(xí)筆記

    整理Javascript基礎(chǔ)語法學(xué)習(xí)筆記

    整理Javascript基礎(chǔ)語法學(xué)習(xí)筆記,之前一系列的文章是跟我學(xué)習(xí)Javascript,本文就是進一步學(xué)習(xí)javascript基礎(chǔ)語法,希望大家繼續(xù)關(guān)注
    2015-11-11
  • 分享8個JavaScript庫可更好地處理本地存儲

    分享8個JavaScript庫可更好地處理本地存儲

    這篇文章主要介紹了分享8個JavaScript庫可更好地處理本地存儲,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • webpack的 rquire.context用法實現(xiàn)工程自動化的方法

    webpack的 rquire.context用法實現(xiàn)工程自動化的方法

    這篇文章主要介紹了webpack的 rquire.context用法實現(xiàn)工程自動化的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 利用JS動態(tài)生成隔行換色HTML表格的兩種方法

    利用JS動態(tài)生成隔行換色HTML表格的兩種方法

    這篇文章主要介紹了利用JS動態(tài)生成隔行換色HTML表格的兩種方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • JavaScript–Apple設(shè)備檢測示例代碼

    JavaScript–Apple設(shè)備檢測示例代碼

    JavaScript–Apple設(shè)備檢測示例代碼。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-11-11
  • javascript的console.log()用法小結(jié)

    javascript的console.log()用法小結(jié)

    console.log 原先是 Firefox 的 專利 ,嚴格說是安裝了 Firebugs 之后的 Firefox 所獨有的調(diào)試 絕招
    2012-05-05

最新評論