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 相关文章推荐
JS与框架页的操作代码
Jan 17 Javascript
网页中CDATA标记的说明
Sep 12 Javascript
在JavaScript中监听IME键盘输入事件
May 29 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
Apr 22 Javascript
jQuery.holdReady()使用方法
May 20 Javascript
jquery实现多行文字图片滚动效果示例代码
Oct 10 Javascript
在HTML中插入JavaScript代码的示例
Jun 03 Javascript
JS组件Bootstrap Select2使用方法详解
Apr 17 Javascript
原生Javascript插件开发实践
Jan 09 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
Jul 13 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
Oct 12 Javascript
如何用JavaScript实现一个数组惰性求值库
May 05 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访问查询mysql数据的三种方法
2006/10/09 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
javascript 全角转换实现代码
2009/07/17 Javascript
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
jquery.messager.js插件导致页面抖动的解决方法
2013/07/14 Javascript
JQuery文字列表向上滚动的代码
2013/11/13 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
移动端js触摸事件详解
2016/09/18 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
2017/08/14 jQuery
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
js new Date()实例测试
2019/10/31 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
python实现AES加密与解密
2019/03/28 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
开学典礼策划方案
2014/05/28 职场文书
党员干部一句话承诺
2014/05/30 职场文书
基层党员对照检查材料
2014/08/25 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
公司周年庆典标语
2014/10/07 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
《我的长生果》教学反思
2016/02/20 职场文书