作家
登录

技术进阶:通过来JavaScript 性能调优提高 Web 应用性能

作者: 来源: 2018-02-05 09:37:42 阅读 我要评论


媒介

参考如下两段代码:

如今的互联网应用中,在Web 开辟中经常会碰到机能的问题,尤其是针对当今的 Web2.0 +应用。JavaScript 是当今应用最为广泛的 Web 开辟说话,Web 应用的机能问题很大年夜一部分都是由法度榜样员写的 JavaScript 脚本机能不佳所造成的,琅绫擎包含了 JavaScript 说话本身的机能问题,以及其与 DOM 交互时的机能问题。本文重要来商量一下若何尽可能多的避免这类问题,大年夜而最大年夜限度的进步 Web 应用的机能。

1.JavaScript 机能调优

JavaScript 说话因为它的单线程和解释履行的两个特点,决定了它本身有很多处所有机能问题,所以可改进的处所有不少。

1.1 eval 的问题:

比较下述代码:

清单 1. eval 的问题

技巧进阶:经由过程来JavaScript 机能调优进步 web 应用机能

有"eval"的代码比没有"eval"的代码要慢上 100 倍以上。

重要原因是:JavaScript 代码在履行前会进行类似"预编译"的操作:起首会创建一个当前履行情况下的晃荡对象,并将那些用 var 申明的变量设置为晃荡对象的属性,然则此时这些变量的赋值都是 undefined,并将那些以 function 定义的函数也添加为晃荡对象的属性,并且它们的置魅恰是函数的定义。然则,如不雅你应用了"eval",则"eval"中的代码(实际上为字符串)无法预先辨认其高低文,无法被提前解析和优化,即无法进行预编译的操作。所以,其机能也会大年夜幅度降低。

1.2 Function 的用法

比较下述代码:

清单 2. function 的用法

技巧进阶:经由过程来JavaScript 机能调优进步 web 应用机能

这里类似之前提到的"eval"办法,这里"func1"的效力会比"func2"的效力差很多,所以推荐应用第二种方法。

1.3函数的感化域链(scope chain)

JavaScript 代码解释履行,在进入函数内部时,它会预先分析当前的变量,并将这些变量归入不合的层级(level),一般情况下:

局部变量放入层级 1(浅),全局变量放入层级 2(深)。如不雅进入"with"或"try – catch"代码块,则会增长新的层级,即将"with"或"catch"里的变量放入最浅层(层 1),并将之前的层级依次加深。

参考如下代码:

清单 3. 函数感化域链

技巧进阶:经由过程来JavaScript 机能调优进步 web 应用机能

变量地点的层越浅,拜访(攫取或修改)速度越快,层越深,拜访速度越慢。所以这里对"images","widget","combination"的拜访速度比"document","myObj"要快一些。所以推荐尽量应用局部变量,可见如下代码:

清单 4. 应用局部变量

技巧进阶:经由过程来JavaScript 机能调优进步 web 应用机能

我们用局部变量"doc"代替全局变量"document",如许可以改进机能,尤其是对于大年夜量应用全局变量的函数琅绫擎。

再看如下代码:

清单 5. 慎用 with

技巧进阶:经由过程来JavaScript 机能调优进步 web 应用机能

加上"with"关键字,我们让代码加倍简洁清楚了,然则如许做机能会受影响。正如之前说的,当我们进入"with"代码块时,"combination"便大年夜本来的层 1 变到了层 2,如许,效力会大年夜打扣头。所以比较一下,照样应用本来的代码:

解决筹划 2:

清单 6. 改进 with

技巧进阶:经由过程来JavaScript 机能调优进步 web 应用机能

清单 7. 缩小对象拜访层级

技巧进阶:经由过程来JavaScript 机能调优进步 web 应用机能

字符串拼接

经常看到如许的代码:

清单 8. 字符串简单拼接

str += "str1" + "str2"

这是我们拼接字符串常用的方法,然则这种方法会有一些临时变量的创建和烧毁,影响机能,所以推荐应用如下方法拼接:

清单 9. 字符串数组方法拼接

var str_array = [];

str_array.push("str1");

然则如许并不是最好的方法,JavaScript 有个特点,对于 object 对象来说,其属性拜访层级越深,效力越低,比如这里的"myObj"已经拜访到了第 3 层,我们可以如许改进一下:

str_array.push("str2");

str = str_array.join("");

这里我们应用数组(array)的"join"办法实现字符串的拼接,尤其是法度榜样的老版本的 Internet Explore(IE6)上运行时,会有异常明显的机能上的改进。

当然,最新的浏览器(如火狐 Firefox3+,IE8+ 等等)对字符串的拼接做了优化,我们也可以如许写:

清单 10. 字符串快速拼接

 1/4    1 2 3 4 下一页 尾页

  推荐阅读

  一文让你学会所有的python模块使用

如不雅你退出 Python 说冥器并从新进入,你做的任何定义(变量和办法)都邑损掉。是以,如不雅你想要编写一些更大年夜的法度榜样,为预备说冥器输入应用一个文本编辑器会更好,并以那个文>>>详细阅读


本文标题:技术进阶:通过来JavaScript 性能调优提高 Web 应用性能

地址:http://www.17bianji.com/lsqh/40502.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)