Skip to content

《高性能JavaScript》(High Performance JavaScript)

虽然很薄的一本书,涵盖JavaScript这门语言的精髓。不适合初学者看。
1.作用域scope chain
函数创建时,它的作用域链中填入一个单独的可变对象,这个全局对象表示所有全局范围定义的变量,如window,navigator,document等
函数执行时,会创建一个运行期上下文execution context的内部对象。当函数值执行完毕,就会被销毁。所以每次执行都是独一无二的,多吃调用就会创建多个。
每个运行期上下文都有自己的作用域链,一个被称作活动对象activation object的新对象,包含所有局部变量,明明参数,参数集合以及this。然后此对象被推入作用链的前端。
在没有优化JavaScript引擎的浏览器中多用局部变量,少用全局变量。
with语句可以改变作用域链。一个新的可变对象被创建,包含参数指定的对象的所有属性。这个对象被推入作用域链的头部。
try-catch语句中的catch执行过程中会把异常对象推入一个可变对象并置于作用域的头部。
对象可以有两种成员类型:实例成员(own成员)和原型成员。实例成员存在于对象实例中,原型成员则由对象原型继承而来。
对象的原型决定了实例的类型。默认情况下,所有对象都是object的实例,并继承了所有基本方法。
可以定义并使用构造器来创建另一种类型的原型。延长原型链。
缓存对象成员值。局部变量替代属性以避免多次查找带来的性能开销。
2.dom编程
浏览器中通常会把DOM和JavaScript独立实现。DOM是一个语言无关的,用于操作XML和HTML文档的应用程序接口(API)
性能上,两个相互独立的功能只要通过接口彼此连接,就会产生消耗。

算法和流程控制
代码的整体结构是影响运行速度的主要因素之一。代码数量少一定运行速度快,代码数量多却也不意味着运行速度一定慢。影响性能的最直接因素是代码的组织结构,以及计提问题的解决方法。
在JavaScript提供的4种循环类型中,只有for-in循环比其他几种明显要慢。提示:不要使用for-in来遍历数组成员。

条件语句
优化if-else:最小化到达正确分支前所需判断的条件数量。把if-else组织成一系列嵌套的if-else语句。

字符串链接,推荐使用简单的+和+=操作符。
回溯既是正则表达式匹配功能的基本组成部分,也是正则表达式的低效之源。

JavaScript和用户界面更新在同一个进程中运行,因此一次只能处理一件事情。

高性能的Ajax包括以下方面:了解你项目的具体需求,选择正确的数据格式和与之匹配的传输技术。

通过避免使用eval()和Function()构造器来避免双重求值带来的性能消耗。同样,给setTimeout()和setInterval()传递函数而不是字符串作为参数。

尽量使用直接量创建对象和数组。直接量的创建和初始化都比非直接量形式要快。

Published inReading

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注