javascript性能优化之分时函数的介绍


Posted in Javascript onMarch 28, 2018

分时函数和函数节流的问题不一样,函数节流针对的事件不是用户主动调用的,前面已经提过了。

函数节流的原理是:延迟当前函数的执行,如果该次延迟还没有完成,那么忽略接下来该函数的请求。也就是说会忽略掉很多函数请求。

在一些开发场景中,我们可能会一次性向文档中注入上千个节点,在短时间内向浏览器中大量添加DOM节点可能会让浏览器吃不消,结果往往会让浏览器卡顿或吃不消,解决方案之一便是使用分时函数(timeChunk)。

timeChunk分时函数让创建节点的工作分批进行,比如一秒钟创建1000个节点,改为每个200ms创建10个节点。具体timeChunk函数封装如下:

function timeChunk( arr, fn, count){//arr 数组 fn操作函数 count每次操作数量
  var obj,
    t;
  var start = function(){
    var len = Math.min(count||1,arr.length);
    for(var i=0; i < len; i++){
      obj = arr.shift();
      fn(obj)
    }
  };
  return function(interval){
    t = setInterval(function(){
      if(arr.length==0){
        return clearInterval(t)
      };
      start();
    },interval||200)
  }
}

应用:

加入我们要在文档中添加1000个节点,可以利用timeChunk分时函数每200ms连续添加20个节点。

var arr = [];
for(var i = 1; i <= 1000; i++){
  arr.push(i)
}
var renderLists = timeChunk(arr,function(i){
  var div = document.createElement('div');
  div.innerHTML = i;
  document.body.appendChild(div);
},20);
renderLists(200);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
在vs2010中调试javascript代码方法
Feb 11 Javascript
一个很有趣3D球状标签云兼容IE8
Aug 22 Javascript
Javascript中3个需要注意的运算符
Apr 02 Javascript
JavaScript操作URL的相关内容集锦
Oct 29 Javascript
JS递归遍历对象获得Value值方法技巧
Jun 14 Javascript
vue组件Prop传递数据的实现示例
Aug 17 Javascript
jQuery实现页码跳转式动态数据分页
Dec 31 jQuery
Angular2学习笔记之数据绑定的示例代码
Jan 03 Javascript
使用Nuxt.js改造已有项目的方法
Aug 07 Javascript
axios向后台传递数组作为参数的方法
Aug 11 Javascript
js实现鼠标拖拽缩放div实例代码
Mar 25 Javascript
基于three.js实现的3D粒子动效实例代码
Apr 09 Javascript
Vue数据监听方法watch的使用
Mar 28 #Javascript
Vue 自定义动态组件实例详解
Mar 28 #Javascript
详解VUE 对element-ui中的ElTableColumn扩展
Mar 28 #Javascript
微信小程序之分享页面如何返回首页的示例
Mar 28 #Javascript
js中el表达式的使用和非空判断方法
Mar 28 #Javascript
JS实现左边列表移到到右边列表功能
Mar 28 #Javascript
JS中用EL表达式获取上下文参数值的方法
Mar 28 #Javascript
You might like
PHP+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
2013/05/10 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
详解AngularJs中$resource和restfu服务端数据交互
2016/09/21 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
python和shell变量互相传递的几种方法
2013/11/20 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
深入理解Django-Signals信号量
2019/02/19 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
机电一体化专业应届生求职信
2013/11/27 职场文书
安全责任书范文
2014/03/12 职场文书
搞笑爱情保证书
2014/04/29 职场文书
演讲稿格式
2014/04/30 职场文书
摄影展策划方案
2014/06/02 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
一次线上mongo慢查询问题排查处理记录
2022/03/18 MongoDB