美文网首页
JavaScript 高性能优化

JavaScript 高性能优化

作者: rocneal | 来源:发表于2016-10-12 01:01 被阅读0次
如何减少页面的reflow
  1. 在文档外创建并更新一个文档片段,然后把文档片段放入页面。(推荐)

    
    var frag = document.createDocumentFragment();
    
    for (...) {
        frag.appendChild(document.createElement('div'));
    }
    
    document.getElementById('container').appendChild(frag);
    
    
  2. 临时移除更新节点,操作完成后再恢复它。

    
    var container = document.getElementById('container');
    
    container.style.display = 'none';
    
    for (...) {
        container.appendChild(document.createElement('div'));
    }
    
    container.style.display = 'normal';
    
    
  3. 创建更新节点的副本,在副本上进行相关的操作,最后用副本覆盖原节点。

    
    var old = document.getElementById('container');
    
    var clone = old.CloneNode(true);
    
    for (...) {
        clone.appendChild(...);
    }
    
    old.parentNode.replaceNode(clone, old);
    
    
For循环优化
  1. 缓存循环长度

    
    var arr = [1, 2, 3, 4];
    
    // len 缓存数组长度
    for (var i = 0, len = arr.length; i < len; i++) {
        ...
    }
    
    
  2. 倒序循环

    
    var arr = [1, 2, 3, 4];
    
    // 使用倒序遍历
    for (var i = arr.length; i--;) {
        ...
    }
    
    
  3. 达夫设备

    
    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    
    // 假设达夫设备每次循环调用8次程序
    var len = arr.length,
    
        // 等价于 i % 8,这里是为了体现更好的性能,项目中严禁写这样代码
        i = len - ((len >> 3) << 3);
    
    while (i) {
        process(arr[i--]);
    }
    
    // 等价于 i / 8,这里是为了体现更好的性能,项目中严禁写这样代码
    i = Math.floor(len >> 3);
    
    while (i) {
        process(arr[i--]);
        process(arr[i--]);
        process(arr[i--]);
        process(arr[i--]);
        process(arr[i--]);
        process(arr[i--]);
        process(arr[i--]);
        process(arr[i--]);
    }
    
    
避免二次评估
var num1 = 12,
    num2 = 23,
    sum = 0;

以下这些用法不应该出现:一般 eval 和 fucntion 很少会用,后面

  1. eval

    sum = eval('num1 + num2');
    
    
  2. function

    sum = new Function('num1', 'num2', 'return num1 + num2');
    
    
  3. setTimeout

    setTimeout('sum = num1 + num2', 100);
    
    
  4. setInterval

    setInterval('sum = num1 + num2', 100);
    
    
字符串拼接
  1. IE7-

    var arr = ['John', 'Neal', 'Somit', 'Tom'];
    
    var str = [];
    for (var i = arr.length; i--;) {
        str.push('<div id="'+ i +'">'+ arr[i] +'</div>');
    }
    str = str.join('');
    
    // do something else
    
    
  2. IE8+ & 其他浏览器

    var arr = ['John', 'Neal', 'Somit', 'Tom'];
    
    var str = '';
    for (var i = arr.length; i--;) {
        str = str + '<div id="'+ i +'">'+ arr[i] +'</div>';
    }
    
    // do someting else
    

相关文章

  • JavaScript 高性能优化

    如何减少页面的reflow 在文档外创建并更新一个文档片段,然后把文档片段放入页面。(推荐)var frag = ...

  • 技术书刊

    Javascript# ########《JavaScript设计模式》《高性能网站建设指南》《高性能网站建设进阶...

  • 高性能JavaScript

    高性能JavaScriptauthor: @TiffanysBear 从《高性能JavaScript》一书中的整理...

  • 系列丨MySQL高性能优化规范、SQL处理、分区表、主主/从复制

    由博客园博主听风(ID:huchong)撰写的《MySQL高性能优化系列》已完结,目录如下: Mysql高性能优化...

  • 性能优化

    内容优化 服务器优化 Cookie优化 CSS优化 javascript优化 图像优化

  • javasciprt性能优化

    本文主要是在我读《高性能Javascript》之后,想要记录下一些有用的优化方案,并且就我本身的一些经验,来大家一...

  • 前端学习

    书:《高性能HTML5》、《CSS SECRETS》、《JavaScript高级程序设计》、《JavaScript...

  • 17.MySQL优化

    《高性能MySQL》——这本书都有的 “字段”优化总结 “索引”优化总结 索引的优化 “查询SQL”优化总结 “引...

  • 高性能javascript--编程实践

    高性能javascript--编程实践 #### - setTimeout()和settimeInterval()...

  • 前端工程系列(二)

    前端工程与性能优化 首先,我们把雅虎14条优化原则,《高性能网站建设指南》以及《高性能网站建设进阶指南》中提到的优...

网友评论

      本文标题:JavaScript 高性能优化

      本文链接:https://www.haomeiwen.com/subject/jvzbyttx.html