We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
最近,在啃一本为人所熟知的动物书《[O`Reilly] - High Performance JavaScript - [Zakas]》。本书中,作者主要以四大角度去谈及 JavaScript 如何在性能上得以提高。为了能使其变为我自身 JavaScript 知识体系中的一部分,我以自己的语言去加以总结,并归档于此链接。(虽是英文,但描述得非常直白,希望大家不要害怕。)
在此,我希望通过这个 Issue,以中文的形式从更高的层次去总结所有的性能提升技巧以方便记忆与查询(但是细节也要深入去理解与学习,而非得过且过):
作者就此角度主要谈及如何去高效地加载与执行 JavaScript 代码。正因其执行过程会产生阻塞问题,因此我们需要通过若干方式去最小化该性能影响:
defer
XMLHttpRequest
[详情]
以优雅的编码技巧去提高性能会涉及到几个方面,如数据访问方式、DOM 相关编码或代码结构等。经过此章的阅读,个人认为这些技巧并不仅仅针对于 JavaScript 语言,而是作为一种更高层次的编程哲学去浸染开发者的编程思想,从而在骨子里下意识地提高代码的优雅程度。
首先,作者开篇所讲的是关于数据的访问,并区分出四种访问的方式:对字面值的访问、对变量的访问、对数组成员的访问以及对对象成员的访问。当然,访问的快慢也是与这顺序所相对应的。
with
try-catch
eval()
第二,关于 DOM 相关的编程,我们要谨记一点:DOM 的访问及操作犹如搭载在桥梁上的收费站,太多的访问与操作只会带来性能上的消耗。因此:
document.getElementsByName()
document.getElementsByClassName()
document.getElementsByTagName()
firstElementChild
document.querySelectorAll()
个人认为,为何我们写的代码总运行得这么慢?主要原因在于我们的算法不够高效,而且代码流的控制不够优雅。所执行的代码越多,执行的时间也就越长。因此不管是循环结构还是控制结构,作者都给出了自己的经验之谈:
for
while
do-while
for-in
switch
if-else
频繁的字符串操作与不严格的正则表达式都会产生重大的性能问题,因此我们需要谨记以下几点:
Array.join()
+
+=
通常我们都知道,一个页面的 UI 更新是与 JavaScript 代码的执行共享同一条进程。这也就意味着不能同时执行代码和更新页面。因此为了不影响用户的体验,我们最好:
setTimeout()
setInterval()
若想采用高性能的 Ajax 技术,也许你需要清楚自己的开发需求并根据它们来选择最合适的数据格式及传输方式。
对于数据格式来说:
当我们需要请求数据时:
倘若是往服务器发送数据:
除此之外,还有一些提升性能的技巧需要我们注意:
谈及性能优化,我们理应先从我们的代码入手:
Function()
[]
{}
如今 JavaScript 代码的构建工具层出不穷,Webpack、Gulp 等早已为人熟知,然而在使用这些辅助性工具之前,我们必须明白在构建与部署的过程中,一些细节往往会对应用的性能提升产生不可或缺的影响,如:
To be continued ...
The text was updated successfully, but these errors were encountered:
Virtual DOM
59e40c1
Former-commit-id: 0c3ad91 Former-commit-id: 025b23d
aleen42
No branches or pull requests
最近,在啃一本为人所熟知的动物书《[O`Reilly] - High Performance JavaScript - [Zakas]》。本书中,作者主要以四大角度去谈及 JavaScript 如何在性能上得以提高。为了能使其变为我自身 JavaScript 知识体系中的一部分,我以自己的语言去加以总结,并归档于此链接。(虽是英文,但描述得非常直白,希望大家不要害怕。)
在此,我希望通过这个 Issue,以中文的形式从更高的层次去总结所有的性能提升技巧以方便记忆与查询(但是细节也要深入去理解与学习,而非得过且过):
1. JavaScript 的加载
作者就此角度主要谈及如何去高效地加载与执行 JavaScript 代码。正因其执行过程会产生阻塞问题,因此我们需要通过若干方式去最小化该性能影响:
defer
属性可预加载 JavaScript 代码并等到页面加载渲染完成后及 onload 事件触发之前执行XMLHttpRequest
来加载 script[详情]
2. 编码技巧
以优雅的编码技巧去提高性能会涉及到几个方面,如数据访问方式、DOM 相关编码或代码结构等。经过此章的阅读,个人认为这些技巧并不仅仅针对于 JavaScript 语言,而是作为一种更高层次的编程哲学去浸染开发者的编程思想,从而在骨子里下意识地提高代码的优雅程度。
2.1 数据访问
首先,作者开篇所讲的是关于数据的访问,并区分出四种访问的方式:对字面值的访问、对变量的访问、对数组成员的访问以及对对象成员的访问。当然,访问的快慢也是与这顺序所相对应的。
with
、try-catch
及eval()
.[详情]
2.2 DOM 编程
第二,关于 DOM 相关的编程,我们要谨记一点:DOM 的访问及操作犹如搭载在桥梁上的收费站,太多的访问与操作只会带来性能上的消耗。因此:
document.getElementsByName()
、document.getElementsByClassName()
或document.getElementsByTagName()
等方法所放回的是一个 HTML Collections。遍历该集合时我们需要考虑到,若该集合不怎么大时,我们可以把集合的大小缓存在一个本地变量以作循环条件中的判断;而若集合非常大时则需要考虑把其转换成数组来遍历firstElementChild
、document.querySelectorAll()
等。[详情]
2.3 代码中的算法及代码流的控制
个人认为,为何我们写的代码总运行得这么慢?主要原因在于我们的算法不够高效,而且代码流的控制不够优雅。所执行的代码越多,执行的时间也就越长。因此不管是循环结构还是控制结构,作者都给出了自己的经验之谈:
for
、while
以及do-while
结构都非常相似,并没说哪种循环结构更为高效for-in
结构switch
结构比if-else
结构要高效,但并非是一个最佳的选择[详情]
2.4 字符串及正则表达式
频繁的字符串操作与不严格的正则表达式都会产生重大的性能问题,因此我们需要谨记以下几点:
Array.join()
是你的首选方式+
和+=
操作符来实现拼接[详情]
2.5 页面响应
通常我们都知道,一个页面的 UI 更新是与 JavaScript 代码的执行共享同一条进程。这也就意味着不能同时执行代码和更新页面。因此为了不影响用户的体验,我们最好:
setTimeout()
和setInterval()
来分解任务[详情]
2.6 Ajax
若想采用高性能的 Ajax 技术,也许你需要清楚自己的开发需求并根据它们来选择最合适的数据格式及传输方式。
对于数据格式来说:
当我们需要请求数据时:
倘若是往服务器发送数据:
除此之外,还有一些提升性能的技巧需要我们注意:
[详情]
2.7 编程中的一些细节
谈及性能优化,我们理应先从我们的代码入手:
eval()
或Function()
构造器来执行代码。而且,使用setTimeout()
和setInterval()
时,第一个参数应该传递函数,而非字符串[]
和{}
来创建数组和对象[详情]
3. 代码的构建与部署
如今 JavaScript 代码的构建工具层出不穷,Webpack、Gulp 等早已为人熟知,然而在使用这些辅助性工具之前,我们必须明白在构建与部署的过程中,一些细节往往会对应用的性能提升产生不可或缺的影响,如:
[详情]
To be continued ...
The text was updated successfully, but these errors were encountered: