高性能JavaScript

优化JavaScript的规则:

1)将脚本放在底部。

2)减少页面中外链脚本文件的数量和大小。(下载单个100KB的文件将比下载4个25KB的文件更快)。

3)使用原生方法

 

1、多数浏览器使用单一线程来处理用户界面(UI)刷新和JavaScript脚本执行,所以同一时刻只能做一件事。JavaScript执行过程耗时越久,浏览器等待响应的时间就越长。

2、浏览器在解析到<body>标签之前,不会渲染页面的任何部分。把脚本放到页面顶部将会导致明显的延迟,通常表现为显示空白页面,用户无法浏览内容,也无法与页面进行交互。

3、带有defer属性的<script>标签可以放在文档的任何位置。对应的JavaScript文件将在页面解析到<script>标签时开始下载,但并不会执行,直到DOM加载完成(onload事件被触发前)。当一个带有defer属性的JavaScript文件下载时,它不会阻塞浏览器的其他进程,因此这类文件可以与页面中的其他资源并行下载。

4、async属性,用于异步加载脚本。async与defer的相同点是采用并行下载,在下载过程中不会产生阻塞。区别在于执行时机,async是加载完成后自动执行,而defer需要等待页面完成后执行。

5、每一个JavaScript函数都表示为一个对象,更确切地说,是Function对象的一个实例。Function对象痛其他对象一样,拥有可以编程访问的属性,和一系列不能通过代码访问而仅供JavaScript引擎存取的内部属性。Scope是Function对象的内部属性,包含了一个函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定哪些数据能被函数访问。

6、在执行环境的作用域中,一个标识符所在的位置越深,它的读写速度也就越慢。因此,函数中读写局部变量总是最快的,而读写全局变量通常是最慢的。全局变量总是存在于执行环境作用域链的最末端,因此它也是最远的。

7、JavaScript中的对象是基于原型的,原型定义并实现了一个新创建的对象所必须包含的成员列表。原型对象为所有对象实例所共享,因此这些实例也共享了原型对象的成员。当book.toString( )被调用时,会从对象实例开始,搜索名为“toString”的成员,一旦发现book没有名为toString的成员,那么会继续搜索器原型对象,直到toString( )方法被找到并执行。由此可见,对象book可以访问它原型中的每一个属性和方法。

 

8、在函数中,如果要多次读取同一个对象属性(方法属性除外),最佳做法是将属性值保存到局部变量中。局部变量能用来替代属性,以避免多次查找带来的性能开销。

9、对于任何类型的DOM访问,需要多次访问同一个DOM属性,或者方法需要多次访问时,最好使用一个局部变量缓存此成员。当遍历一个集合时,第一优化原则是把集合存储在局部变量中,并把length缓存在循环外部,然后,使用局部变量替代这些需要多次读取的元素。

10、由于每次迭代操作会同时搜索实例或者原型属性,for-in循环的每次迭代都会产生更多开销,所以比其他循环类型要慢。

11、可以通过颠倒数组的顺序来提高循环性能。

 

 

 

猜你喜欢

转载自blog.csdn.net/xhw979850818/article/details/88221461