javascript模块化教程学习笔记03(DOM编程)

DOM编程:

  javascript每次访问DOM都要产生消耗,所以要尽可能减少DOM操作。

  比如:

    1.对DOM访问后内容存进一个变量、对DOM的修改内容放进一个变量,避免每次都去访问DOM。

            for(1,<100,i++){

                document.getElementById("content").innerHTML +='a';

              }

        每次添加一个a都要访问DOM,要访问100次,运行速度慢。直接把这些a放进一个变量中,最后访问一次DOM:

            for(i,<100,i++){

              text +="a" }

             document.getElementById("content").innerHTML = text;

      读取出来的DOM内容也存进一个变量里,免得每次都去读取。比如长度,比如布局信息:

            coll = document.getElementByTagName("a").length;

    2.减少重排重绘:

      “浏览器下载完HTML、CSS、JS后会生成两棵树,DOM树和渲染树,当DOM属性发生某些改变时,会导致重排重绘:

        重排:浏览器重新构造渲染树。  重绘:浏览器将重排后的渲染树渲染到屏幕上。

        导致重排的情况:1.添加或删除 可见的 DOM元素  2.元素位置改变  3.元素尺寸改变

                4.内容改变  5.浏览器窗口尺寸改变。”

      1.用cssText合并所有改变:

        bodystyle=document.body.style;

        bodystyle.color = red ;   bodystyle.height = 1000px ; bodystyle.width = 100%

        要修改这三个属性需要进行三次重排重绘,用cssText只用重排重绘一次:

          bodystyle.cssText = 'color:red; height:1000px; width:100% ' ;

      2.让元素脱离文档流:

        让元素脱离文档流 ,对其进行批量修改, 再把元素带回文档。三种方法脱离文档流:隐藏元素、文档片段、修改副本再替换。

          1.隐藏元素:因为导致重排的情况:添加或删除 可见的 DOM元素。因此只用把需要修改的区域display,隐藏修改起来就不算重排。

          2.文档片段:在文档之外创建并更新一个文档片段,然后把它附加到原始列表中。当附加一个片段到节点时,实际上是添加该片段的子节点而不是片段本身。

“当请求把一个DocumentFragment节点插入文档树时,插入的不是DocumentFragment自身,而是它的所有子孙节点,即插入的是括号里的节点。这个特性使得DocumentFragment成了占位符,暂时存放那些一次插入文档的节点。它还有利于实现文档的剪切、复制和粘贴操作。 可以减少页面渲染dom的次数,效率会明显提升。”
————————————————
版权声明:本文为CSDN博主「逍竹」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qiao13633426513/article/details/80243058

          3.修改副本;用到了replacechild属性。为需要修改的节点创建一个备份,然后对副本进行修改,一旦操作完成就用新的节点替换旧的节点。

            

猜你喜欢

转载自www.cnblogs.com/mingnai/p/12006342.html