博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
定时器解决js长时间运行脚本问题
阅读量:6756 次
发布时间:2019-06-26

本文共 704 字,大约阅读时间需要 2 分钟。

 


一般地,单个js操作的运行时间不应超过100毫秒,否则的话,会影响用户体验,用户会认为自己与界面失去联系。而对于一些复杂的任务,可能无法在100ms内完成,甚至会突破浏览器限制(调用栈大小限制和长时间运行限制)。其中,长时间运行限制的衡量有执行语句的数量和执行语句的时间。 

因此,针对复杂任务,要想不影响用户体验,就需要借助定时器。 
使用定时器可以让出UI线程的控制权,停止执行javascript,使得UI线程有机会更新,然后隔一段时间后在执行javascript代码。

 
  1. function clickFun(){
  2. ......
  3. setTimeout(fun,50); //在setTimeout()调用时刻为t1,经过50ms后,即在t1+50时,定时器代码的javascript任务会被加入UI队列,但不一定立即执行。
  4. otherOperate();
  5. }

如果,otherOperate函数的执行时间超过50ms,则定时器代码会在click事件完成前被加入UI队列,在otherOperate函数执行完成后,立即调用定时器里的代码,甚至察觉不出延迟。 

注:定时器代码只有在创建它的函数执行完成后,才有可能被执行 
而且,定时器代码会重置浏览器所有相关的设置,包括长时间运行脚本定时器,调用栈的大小。所以,这一特性使得定时器成为长时间运行js代码的理想解决方案。

另外:给setTimeout、setInterval函数传递参数时,第一个参数尽量是函数而不是字符串,这是为了避免双重求值的问题,影响性能。

转载于:https://www.cnblogs.com/lydialee/p/4037637.html

你可能感兴趣的文章
二 IOC再探
查看>>
一些常用软件的网络端口协议分类介绍
查看>>
机器学习服务器 PredictionIO 脱颖而出
查看>>
mysql不能连接远程mysql服务器
查看>>
Windows 8.1 重复数据删除——概念(一)
查看>>
iptables防火墙高级应用
查看>>
python运维-Socket网络编程
查看>>
yum管理包流程_学习笔记
查看>>
DeltaGrad领跑智能化交易领域 预见收益颠覆基金行业
查看>>
nginx keepalived tomcat实现的高可用
查看>>
Https能避免流量劫持吗?
查看>>
oracle教程之oracle 删除表空间
查看>>
我的友情链接
查看>>
python 2.7.10 找不到 libmysqlclient.18.dylib 解决方案
查看>>
Exchange server 2010 安装部署之二,Exchange2010安装详解
查看>>
负载均衡集群之LVS
查看>>
本地计算机无法启动Server服务
查看>>
优秀前端工程师需要做的10件事
查看>>
我的友情链接
查看>>
Android学习笔记-基于HTTP的通信技术
查看>>