用于执行JavaScript和更新用户界面的进程通常被称为“浏览器UI线程”。JavaScript和用户界面更新在同一个进程中运行,因此一次只能处理一件事情。

·任何JavaScript任务都不应当执行超过100毫秒,过长的运行时间导致UI更新出现明显延迟,从而会影响用户体验。
·浏览器有两类限制JavaScript任务的运行时间的机制,调用栈大小限制(即记录自脚本开始以来执行的语句的数量)和长时间运行脚本限制(记录脚本执行的总时长,超时的时候会有弹框提示用户[chrome没有单独的程云霞脚本限制,替代做法是依赖其通用奔溃检测系统来处理此类问题])。
一些优化JavaScript任务时间的常见做法:
①使定时器让出时间片段
1.使用定时器处理数组。当处理过程不须同步,数据不须按顺序处理时。即可考虑用定时器分解任务。
如:
function processArray(items,process,callback){
var todo = items.concat();
setTimeout(function(){
process(todo.shift());
if(todo.length > 0){
setTimeout(arguments.callee,25);
} else {
callback(items);
}
},25);
}
var items = [1,2,3];
function output(value){
console.log(value);
}
processArray(items,outputValue,function(){
console.log('finished output!')
});
②分割任务
如果一个函数的运行时间过长,那么可以把它拆分为一系列能在较短时间内完成的子函数。
如:
function multistep(steps,args,callback){
var tasks = steps.concat();
setTimeout(function(){
var task = tasks.shift();
task.apply(null,args||[]);
if(tasks.length > 0){
setTimeout(arguments.callee,25);
} else {
callback();
}
},25);
}
function saveDocument(id){
var tasks = [open,write,close];
multistep(tasks,[id],function(){
console.log('finished!');
})
}
③记录代码的运行时间
有时每次只执行一个任务的效率不高,且在两次之间产生25ms的延迟就更不好了。所以可以添加时间检测机制来改进processArray()方法。
如:
function timeProcessArray(items,process,callback){
var todo = items.concat();
setTimeout(function(){
var start = +new Date();
do{
process(todo.shift());
}while(todo.length > 0 &&(+new Date() - start < 50)) ;
if(todo.length > 0){
setTimeout(arguments.callee,25);
} else {
callback(items);
}
},25);
}
注意,定时器虽然可以提高性能,但是过度使用会适得其反。需要控制web应用中的使用数量。
④使用Worker
Web Worker是新版浏览器支持的特性,它允许在UI线程外部执行JavaScript代码,从而避免锁定UI。
参考资料:http://www.alloyteam.com/2015/11/deep-in-web-worker/
备注:
个人觉得,Worker的缺陷还是太多了。用不起来,而且要慎用。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# js
# 性能优化
# Web性能优化系列 10个提升JavaScript性能的技巧
# 整理AngularJS框架使用过程当中的一些性能优化要点
# javascript性能优化之事件委托实例详解
# nodejs的10个性能优化技巧
# JS性能优化笔记搜索整理
# js性能优化技巧
# web性能优化之javascript性能调优
# js性能优化 如何更快速加载你的JavaScript页面
# JS 网站性能优化笔记
# js 性能优化之算法和流程控制
# 会有
# 都不
# 长时间
# 两次
# 把它
# 能在
# 时间内
# 适得其反
# 不高
# 添加时间
# 此类
# 被称为
# 就更
# 参考资料
# 两类
# 一件事情
# 时长
# 较短
# 检测系统
# 一个函数
相关文章:
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
如何设计高效校园网站?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
如何通过虚拟主机快速完成网站搭建?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
如何配置IIS站点权限与局域网访问?
如何挑选最适合建站的高性能VPS主机?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
家庭建站与云服务器建站,如何选择更优?
公司门户网站制作流程,华为官网怎么做?
深圳网站制作的公司有哪些,dido官方网站?
如何选择高效响应式自助建站源码系统?
中山网站推广排名,中山信息港登录入口?
如何选择高性价比服务器搭建个人网站?
如何快速搭建FTP站点实现文件共享?
西安大型网站制作公司,西安招聘网站最好的是哪个?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
如何快速搭建响应式可视化网站?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
如何通过FTP服务器快速搭建网站?
php json中文编码为null的解决办法
如何自定义建站之星模板颜色并下载新样式?
Thinkphp 中 distinct 的用法解析
相册网站制作软件,图片上的网址怎么复制?
家具网站制作软件,家具厂怎么跑业务?
建站之星云端配置指南:模板选择与SEO优化一键生成
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
如何快速搭建支持数据库操作的智能建站平台?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
建站之星如何保障用户数据免受黑客入侵?
如何快速选择适合个人网站的云服务器配置?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
建站之星如何快速生成多端适配网站?
清除minerd进程的简单方法
C#如何使用XPathNavigator高效查询XML
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
油猴 教程,油猴搜脚本为什么会网页无法显示?
,如何利用word制作宣传手册?
如何挑选高效建站主机与优质域名?
建站OpenVZ教程与优化策略:配置指南与性能提升
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
如何快速搭建高效WAP手机网站?
如何快速上传自定义模板至建站之星?
建站之星如何通过成品分离优化网站效率?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
智能起名网站制作软件有哪些,制作logo的软件?
七夕网站制作视频,七夕大促活动怎么报名?
*请认真填写需求信息,我们会在24小时内与您取得联系。