全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

js 性能优化之快速响应的用户界面

用于执行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小时内与您取得联系。