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表单验证框架的方法
Sep 14 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
Feb 13 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
May 20 Javascript
jQuery实现选项联动轮播效果【附实例】
Apr 19 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
Jun 13 Javascript
jQuery纵向导航菜单效果实现方法
Dec 19 Javascript
微信小程序 网络请求(post请求,get请求)
Jan 17 Javascript
Kotlin学习第一步 kotlin语法特性
May 25 Javascript
JS全角与半角转化实例(分享)
Jul 04 Javascript
node(koa2) web应用模块介绍详解
Mar 29 Javascript
vue的keep-alive用法技巧
Aug 15 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
Jan 29 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 之入门篇
2006/12/04 PHP
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
2011/05/28 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
JS实现手风琴特效
2020/11/08 Javascript
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
Django中的Signal代码详解
2018/02/05 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
python组合无重复三位数的实例
2018/11/13 Python
python 生成器需注意的小问题
2020/09/29 Python
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
协议书的格式
2014/04/23 职场文书
文明寝室标语
2014/06/13 职场文书
公司演讲稿开场白
2014/08/25 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
八年级英语教学反思
2016/02/15 职场文书
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android