js 性能优化之快速响应的用户界面
发布时间 - 2026-01-10 23:04:51 点击率:次用于执行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 性能优化之算法和流程控制
# 会有
# 都不
# 长时间
# 两次
# 把它
# 能在
# 时间内
# 适得其反
# 不高
# 添加时间
# 此类
# 被称为
# 就更
# 参考资料
# 两类
# 一件事情
# 时长
# 较短
# 检测系统
# 一个函数
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
高性能网站服务器部署指南:稳定运行与安全配置优化方案
再谈Python中的字符串与字符编码(推荐)
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
百度浏览器如何管理插件 百度浏览器插件管理方法
Laravel如何使用Collections进行数据处理?(实用方法示例)
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
jquery插件bootstrapValidator表单验证详解
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
如何用已有域名快速搭建网站?
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
Android使用GridView实现日历的简单功能
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Swift中循环语句中的转移语句 break 和 continue
Laravel中的withCount方法怎么高效统计关联模型数量
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
浅谈redis在项目中的应用
如何用PHP快速搭建高效网站?分步指南
Bootstrap CSS布局之列表
如何快速搭建高效WAP手机网站吸引移动用户?
WEB开发之注册页面验证码倒计时代码的实现
网站建设整体流程解析,建站其实很容易!
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
浅析上传头像示例及其注意事项
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
iOS中将个别页面强制横屏其他页面竖屏
iOS正则表达式验证手机号、邮箱、身份证号等
香港服务器部署网站为何提示未备案?
如何在IIS7上新建站点并设置安全权限?
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
如何在七牛云存储上搭建网站并设置自定义域名?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
Java遍历集合的三种方式
Laravel如何使用.env文件管理环境变量?(最佳实践)
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
如何在橙子建站上传落地页?操作指南详解
LinuxShell函数封装方法_脚本复用设计思路【教程】
如何在IIS中新建站点并配置端口与IP地址?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
使用C语言编写圣诞表白程序
JavaScript实现Fly Bird小游戏

