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/JQuery显示或隐藏文本的方法
Feb 13 Javascript
原生javaScript实现图片延时加载的方法
Dec 22 Javascript
jquery获取checkbox的值并post提交
Jan 14 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
Oct 16 Javascript
原生javascript实现图片无缝滚动效果
Feb 12 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
May 09 Javascript
jquery实现网站列表切换效果的2种方法
Aug 12 Javascript
原生JS下拉加载插件分享
Dec 26 Javascript
JavaScript制作简易计算器(不用eval)
Feb 05 Javascript
详解vue前后台数据交互vue-resource文档
Jul 19 Javascript
JavaScript 反射和属性赋值实例解析
Oct 28 Javascript
vue脚手架项目创建步骤详解
Mar 02 Vue.js
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
菜鸟修复电子管记
2021/03/02 无线电
php学习笔记(三)操作符与控制结构
2011/08/06 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
Jquery倒计时源码分享
2014/05/16 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
vue-router传递参数的几种方式实例详解
2018/11/13 Javascript
electron 安装,调试,打包的具体使用
2019/11/06 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
Python设计模式之观察者模式实例
2014/04/26 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
使用Python操作excel文件的实例代码
2017/10/15 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
军训通讯稿范文
2015/07/18 职场文书
企业法律事务工作总结
2015/08/11 职场文书
小学英语教学反思范文
2016/02/15 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
python批量创建变量并赋值操作
2021/06/03 Python
MySQL系列之十一 日志记录
2021/07/02 MySQL
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python