zoukankan      html  css  js  c++  java
  • console.time 简单分析javascript动态加入Dom节点的性能

    Bullshit

    本来想每天都更新下博客的,可是近期要考试,还有就是自己还是停留在暗自窃喜中吧(这样的想法要改变)。

    事实上近期总在想。自己要怎么去管理自己的数据,每天的生活都是对自己的数据的增删查改。昨天把自己的电脑重装了,确实非常多软件的存放要改地方了,之前不知道怎么去管理软件安装,所以放得乱七八糟的。

    说好一大堆废话之后。我最后再说一遍。管好自己的时间、数据真的比你学习东西重要。

    Method

    本文代码约定

    • 1 el: 指的是添加直接点的DOM节点
    • 2 totalNum: 为100000(值越大越能体现差距)指的是循环创建的DOM节点
    • 3 for(var i=0;i<totalNum;i++){}: 我们用for来表示就好了,简写代码

    假设叫你用javascript动态添加DOM节点,你有哪几种思路呢?

    1 .使用innerHTML和字符串拼接
    console.time("time1");
    var str = "";
    for{ 
    str += "<div>123<div>"; 
    }
    el.innerHTML = str;
    console.timeEnd("time1");
    2 .使用innerHTML和数组
    console.time("time2");
    var arr = [];
    for{
    arr.push("<div>123<div>");
    }
    el.innerHTML = arr.join("");
    console.timeEnd("time2");
    3 .使用DOM API
    console.time("time3");
    var str = "";
    for{
    var div = document.createElement("div");
    div.textContent = "123";
    el.appendChild(div);
    }
    console.timeEnd("time3");

    result

    在这里有必要知道console.time命令的作用,请看链接console.time(label)。我简介下吧,就是在console.time函数中传入一个參数,这个參数就是一个标记。当chrome执行到这里就開始计时,那什么时候结束计时呢,这个就有关另外一个函数console.timeEnd。參数就是刚才那个标记。这样子我们就知道中间那段javascript代码到底跑了多久了。记住它是以毫秒为单位的。

    那好我们如今推測下到底哪段代码跑的时间最短呢?

    不卖关子了,时间长短逐渐上升各自是:time2<time3<time1(我仅仅是在chrome上面測试,可能在其它浏览器不一样)

    Summary

    为什么会出现上面的情况呢?

    • 一 首先我们要知道我们用的chrome是webkit内核。他们对操作DOM节点已经优化得非常好了,所以DOM API与innerHTML两着在性能上是没多大差别的(引用于《高性能javascript》)
    • 二 就是既然DOM API与innerHTML性能上没多大差别的话,为什么time3<time1呢?这个就是有关字符串连接的性能问题了。

      就上面的样例 str += "<div>123</div>"那js解析器怎样解析呢?
      1 新建一个暂时字符串
      2 把str和后面的字符串拼接赋给新的暂时字符串
      3 销毁原始字符串并赋值给str
      这样子的效率是低下的。
    • 三 而作为第一个数组原生的方法为什么会最快呢?。这个由于javascript的原生部分是在你写代码的时候它们已经在浏览器中了,它们是用底层的语言写的,比方C++,这个就意味着这些方法会被编译成机器码(《高性能javascript》)
  • 相关阅读:
    MySQL主从.md
    mysqldump.md
    MySQL管理.md
    SQL语句.md
    如何在同一台服务器上部署两个tomcat
    loadrunner函数解密之web_reg_save_param
    loadrunner函数解密之web_reg_find
    Jmeter如何保持cookie,让所有请求都能用同一个cookie,免去提取JSESSIONID
    Jmeter如何提取响应头部的JSESSIONID
    Loadrunner如何进行有效的IP欺骗
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7363399.html
Copyright © 2011-2022 走看看