国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 16:11:22
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了javascript引擎長時間獨占線程造成卡頓的解決方案,需要的朋友可以參考下
 
 

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

Ansync.js

 

復制代碼代碼如下:

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;

 

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 政和县| 开平市| 志丹县| 兴山县| 米脂县| 奉节县| 嵊州市| 乃东县| 宿州市| 襄城县| 尉犁县| 大悟县| 全州县| 久治县| 延安市| 白朗县| 安阳市| 衢州市| 耿马| 肃北| 来安县| 琼海市| 卓资县| 柳州市| 黎平县| 涿鹿县| 上杭县| 什邡市| 金沙县| 邛崃市| 沅陵县| 潮安县| 星子县| 呼和浩特市| 资阳市| 尼勒克县| 聂拉木县| 冀州市| 崇州市| 竹北市| 多伦县|