前端开发增强Javascript性能

一.优化页面加载时间

Javascript代码是通过HTML<script>标签进行引用来实现加载的,在这个阶段我们所做的变化处理将确保代码会快速高效地加载,即代码可以更快地准备就绪来执行。

1.HTML执行顺序

当浏览器遇到<script>标签时,大多数情况下会停止渲染页面,直到完成对该脚本的读取和解析。这是为了防止脚本中包含document.write()方法的调用,从而对当前页面进行改变。处于这个原因,把所有能够移动的<script>标签挪至HTML的</body>标签前。这样,整个页面都将会在各项脚本加载和解析之前进行渲染,从而提升页面可感知响应能力。

2.Javascript文件的GZip编码传输

在服务器上一个简单设定就能确保Javascript文件、HTML、CSS和任何基于文本的文件能够以最高效地方式传输到浏览器中。在发送之前,可以进行压缩,数据到达浏览器之后,可以进行解压缩,这样一来,通过线路传输的数据更少,文件到达浏览器的时间更快。这项设置称作GZip编码,几乎所有的服务器都支持启用这项设置,但必须对服务器的设置有控制修改权。

在每个请求发生时进行即时的gzip编码处理会消耗服务器上的额外资源和CPU处理时间。如果担心所使用服务器的性能,可以预先把Javascript和其他基于文本的文件进行压缩。但要确保用服务器提供这些预压缩文件时,要在HTTP报头中增加额外的Content-Encoding: gzip.这样,你就获得了相同的性能提升,又无需额外消耗服务器的性能。

3.缩编、混淆和编译

Javascript文件越小,通过线路把文件下载至浏览器中的时间就越快,浏览器对文件的读取和解析就越快。因此,我们想方设法让代码的体积尽可能的小。可以通过缩编、混淆和编译来实现。

缩编:缩编是将Javascript代码中的所有空格和换行符进行移除,以产出更小体积的代码文件,但处理后的代码仍保留着由开发者编写的完全相同的语句。因为Javascript的执行是基于特定的关键字和语句,而与当中包含的空格字符无关,这样我们就可以安全地移除这些字符来减小文件的体积。

混淆:混淆是一种更高级的代码优化方法,他会着眼于变量和函数名称,并找出哪些是可全局性访问的,哪些是在特定的作用域中访问的。所有的全局变量和全局函数会保留原来的名称,但那些在限定特定作用域中的则会重命名为简短的名称,从而显著地减少名称在代码文件中所占的体积。通过将那些名称在恰当的位置以恰当的方式进行替换,代码将会像混淆处理发生前那样继续运作。

代码中所用的全局变量和全局函数越少,经混淆处理后的代码就会越小。

编译:编译是一种更先进的处理方法,它会全面地对代码进行分析,并对代码中的语句进行简化,缩减、整合,生成有着相同行为的另一语句,虽然能够实施这一特定类型优化操作的工具为数不多,但是当缩编和混淆相结合时,这是产生最小体积的最有效方法。

3.1.使用JSMIN进行代码缩编

3.2.使用Uglify进行代码混淆

3.3.使用Google Closeure Compiler进行代码编译

3.4.使用匿名、自执行的函数闭包来减少全局变量的使用

4.请求时才延迟加载Javascript文件

二、优化文档对象的操作

导致大多数网站和应用程序出现性能缓滞的一个最大因素是通过Javascript低效访问HTML页面元素。因为所有浏览的Javascript引擎独立于其渲染引擎,通过Javascript获取对页面元素的引用要涉及从一个引擎跳转到另一个引擎,浏览器则充当了两者之间的中介。为了提高性能,我们需要减少这种跳转所出现的次数。

1.实现对页面元素的最小化访问 (引用一次之后保存在变量中,减少再次获取相同的引用;由父及子先加属性,再添加至页面中)

2.尽量使用已有元素(cloneNode())

3.离线DOM的应用(document fragment)

4.使用CSS而非javascript来操控页面样式(修改页面元素的style属性会影响页面布局,从而在浏览器中引发一次重排(reflow))

三、提升DOM性能

1.事件委托至父元素

2.使用框架化处理频密发生的事件

四、提升函数性能

1.使用记忆功能保存先前函数的返回结果

五、使用正则表达式实现更快速的字符串操作

字符 修饰符 方法

match (返回数组) replace(替换) search(返回第一个找到的匹配项的索引值)

六、更快速的使用数组

1.快速创建素组;

2.快速进行数组循环(break continue 保存变量而不是一味获取)

七、转移密集型业务至web worker

 通常一个浏览器会至少存在三个线程:JS引擎线程、GUI渲染线程、用于控制交互的浏览器时间触发线程。JS引擎线程是处理Javascript的单线程。

使用web worker来处理图像数据。

八、简单的性能测量

执行前后的时间差值

猜你喜欢

转载自www.cnblogs.com/sheandhe/p/10387689.html