javascript引擎长时间独占线程造成卡顿的解决方案


Posted in Javascript onDecember 03, 2014

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;

方法很简单,但是很实用,有相同项目需求的小伙伴参考下吧

Javascript 相关文章推荐
Jquery动态改变图片IMG的src地址示例
Jun 25 Javascript
Javascript动态引用CSS文件的2种方法介绍
Jun 06 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
Jul 08 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
May 05 Javascript
JavaScript实现广告弹窗效果
Aug 09 Javascript
微信小程序  modal详解及实例代码
Nov 09 Javascript
JavaScript日期选择功能示例
Jan 16 Javascript
jquery实现焦点轮播效果
Feb 23 Javascript
Vue $emit $refs子父组件间方法的调用实例
Sep 12 Javascript
利用es6 new.target来对模拟抽象类的方法
May 10 Javascript
利用js实现简易红绿灯
Oct 15 Javascript
VUE中鼠标滚轮使div左右滚动的方法详解
Dec 14 Vue.js
javascript中clone对象详解
Dec 03 #Javascript
javascript使用正则表达式检测IP地址
Dec 03 #Javascript
Javascript快速排序算法详解
Dec 03 #Javascript
Javascript冒泡排序算法详解
Dec 03 #Javascript
Javascript堆排序算法详解
Dec 03 #Javascript
node.js下when.js 的异步编程实践
Dec 03 #Javascript
jquery操作 iframe的方法
Dec 03 #Javascript
You might like
phpfans留言版用到的install.php
2007/01/04 PHP
ioncube_loader_win_5.2.dll的错误解决方法
2015/01/04 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
JavaScript 学习笔记(六)
2009/12/31 Javascript
js限制文本框为整数和货币的函数代码
2010/10/13 Javascript
jQuery的deferred对象使用详解
2011/08/20 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
React-Native 组件之 Modal的使用详解
2017/08/08 Javascript
原生js+cookie实现购物车功能的方法分析
2017/12/21 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
Js实现复选框的全选、全不选反选功能代码实例
2020/02/28 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
python数组过滤实现方法
2015/07/27 Python
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
Python实现控制台中的进度条功能代码
2017/12/22 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
Python打印不合法的文件名
2020/07/31 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
师范大学音乐表演专业求职信
2013/10/23 职场文书
读书小明星事迹材料
2014/05/03 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
刑事申诉状范文
2015/05/20 职场文书
防卫过当辩护词
2015/05/21 职场文书
借钱欠条怎么写
2015/07/03 职场文书
2016猴年开门红标语口号
2015/12/26 职场文书