当前位置: 首页 > Web前端 > HTML

代码级别的浏览器优化

时间:2023-04-02 15:53:28 HTML

1。减少dom操作:类数组是实时更新的类数组集合。在脚本中,document.images、document.forms和getElementsByTagName()都返回HTMLCollection类型的集合。普通类数组也有arguments对象和DOM方法的返回结果。对这些类数组集合的操作就是尽可能的将它们转化为数组类型,然后对它们进行操作。Array.prototype.slice.call(arrayLike)如果没有转成数组,在类数组的for循环上循环时,尽量将其length属性缓存为局部变量,避免每次循环访问一次.2、避免大量元素的重绘(样式改变)和重新排列(布局改变)。注意:重排一定会重绘。具体实现:①合并样式,如ele.style.borderLeft='1px';ele.style.borderRight='2px';更改为ele.style.padding='5px';ele.style.cssText='border-left:1px;右边框:2px;填充:5px;';②将需要多次重排的元素的position属性设置为absolute或fixed,使该元素脱离文档流,其变化不会影响其他元素。比如有动画效果的元素最好设置为绝对定位。③在内存中对节点进行多次操作,完成后添加到文档中(可以使用分片元素)。例如,异步获取表格数据并呈现到页面。可以先获取数据,在内存中构建整个表格的html片段,然后一次性添加到文档中,而不是循环添加每一行。(jsRender,arttemple渲染模板生成)。3.每次eval或Function构造函数作用于字符串表示的源代码时,脚本引擎都需要将源代码转换为可执行代码。这是一项资源密集型操作——通常比简单的函数调用慢100倍以上。使用eval和Function也不利于Javascriptminifiers执行压缩。4.减少作用域链搜索上一篇文章讲了作用域链搜索问题,这是循环中需要特别注意的问题。如果在循环中需要访问不在该作用域内的变量,请在遍历前使用局部变量缓存该变量,遍历后重写该变量。这对于全局变量尤其重要,因为全局变量在范围内。在链的顶端,访问时的查找次数最多。5、数据访问  Javascript中的数据访问包括直接量(字符串、正则表达式)、变量、对象属性和数组,其中直接量和局部变量的访问速度最快,对象属性和数组的访问需要更多的开销。建议在以下情况下将数据放入局部变量:  a.超过1次访问任何对象属性  b。对任何数组成员的访问超过1  此外,它还应该尽量减少对对象和数组的深度查找。6、字符串拼接在Javascript中使用“+”号拼接字符串效率相对较低,因为每次运行都会开辟新的内存并生成新的字符串变量,然后将拼接结果赋值给新的变量。相比之下,使用数组的join方法效率更高,即将要拼接的字符串放在数组中,最后调用它的join方法得到结果。但是由于使用数组有一定的开销,所以当需要拼接的字符串比较多时可以考虑这种方式。7.CSS选择器优化在大多数人的印象中,浏览器是从左到右分析CSS选择器的,比如#tocA{color:#444;}这样的选择器,如果是从右向左解析是非常高效的,因为第一个ID选择基本上限制了搜索的范围,但实际上浏览器是从右向左解析选择器的。和上面的选择器一样,浏览器要遍历找到每个A标签的祖先节点,效率并没有之前想象的那么高。根据浏览器的这种行为特点,在编写选择器的时候需要注意很多事情。感兴趣的童鞋可以去了解一下。