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 相关文章推荐
Add a Table to a Word Document
Jun 15 Javascript
JavaScript 变量基础知识
Nov 07 Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
Sep 19 Javascript
终于解决了IE8不支持数组的indexOf方法
Apr 03 Javascript
director.js实现前端路由使用实例
Feb 03 Javascript
jQuery EasyUI之验证框validatebox实例详解
Apr 10 jQuery
Bootstrap实现下拉菜单多级联动
Nov 23 Javascript
微信小程序progress组件使用详解
Jan 31 Javascript
浅谈微信小程序列表埋点曝光指南
Oct 15 Javascript
JS highcharts动态柱状图原理及实现
Oct 16 Javascript
vue+Element-ui前端实现分页效果
Nov 15 Javascript
JS数组方法some、every和find的使用详情
Oct 05 Javascript
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
PHP 和 MySQL 基础教程(一)
2006/10/09 PHP
一步一步学习PHP(5) 类和对象
2010/02/16 PHP
PHP中SESSION过期设置
2021/03/09 PHP
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
DOM 高级编程
2015/05/06 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
函数指针的定义是什么
2016/08/14 面试题
大四自我鉴定
2014/02/08 职场文书
企业读书活动总结
2014/06/30 职场文书
人力资源职位说明书
2014/07/29 职场文书
农行心得体会
2014/09/02 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
湖南省召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
幼儿园体操比赛口号
2015/12/25 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫