时间:2021-07-01 10:21:17 帮助过:6人阅读
在循环外执行 append 操作
直接操作 DOM 是非常耗费性能的,尤其不要在循环中直接操作 DOM:
代码要保持精炼
避免做重复的事情。如果你一直在做重复的事情,那么就可能出问题了:
警惕匿名函数
匿名函数满天飞是很痛苦的事情,它们难以调试、维护、测试或者复用,应尽可能的对函数命名并将其封装在对象中,实施有效的管理:
选择器的优化
随着越来越多的浏览器支持 document.querySelectorAll(),选择器的重担已经慢慢转移给浏览器了,但还是有一些技巧需要注意:
优先并尽可能地使用 ID 选择器:
尽量在选择器右端使用 tag.class,而左端尽可能只使用 tag 或者 .class。
避免过度具体:
简洁的 DOM 结构也有助于提升选择器的性能,因为选择器可能少走几层弯路去寻找那些元素。
尽量避免使用通配符,任何显式或隐式的使用通配符,都会降低选择器的性能:
使用事件代理
事件代理允许将一个事件绑定到某个容器上(例如一个无序列表 ul),而不是绑定到容器内所有元素上(例如列表元素 li)。虽说 $.fn.live 和 $.fn.delegate 都是将事件绑定到容器上,但是应尽可能是用 $.fn.delegate,毕竟其明确的上下文(相较于 $.fn.live 的上下文是 document)要小得多,避免了很多不必要的过滤。
除了性能方面的提升,如果给绑定了事件的容器内添加新元素,那么这些新元素就无须再次绑定事件了,这也是个优点。
将元素从 DOM 卸载出来再操作
DOM 操作是比较慢的,所以应尽量避免直接操作 DOM。jQuery 在其 1.4 版中引入了 $.fn.detach 方法,可以将元素从 DOM 中卸载出来然后进行操作,操作好了之后再添加到 DOM 中:
使用外部样式表为大量元素修改样式
当使用 $.fn.css 为超过 20 个元素修改样式时,应考虑直接在页面中添加 style 标签,据说性能可提升 60%。
使用 $.data 替代 $.fn.data
将 $.data 应用于 DOM 元素上,比直接在选择器上调用 $.fn.data 要快 10 倍。当然,前提是要先明白 DOM 元素和 jQuery 结果集之间的区别。
别在空元素上浪费时间
jQuery 不会主动告诉你,你正在一个空白的结果集上运行代码 – 而且执行过程中并未出错。所以有时候再执行代码之前,需要先判断一下结果集是否为空:
这种方法特别适用于 jQuery UI 方面,因为即使结果集中不包含任何元素,其开销也会很大。
变量的定义
可以在一条语句中定义多个变量:
在自执行函数中,变量甚至可以不用定义:
条件判断