具体描述
如果你使用JavaScript构建交互丰富的Web应用,那么JavaScript代码可能是造成你的Web应用速度变慢的主要原因。《高性能JavaScript》揭示的技术和策略能帮助你在开发过程中消除性能瓶颈。你将会了解如何提升各方面的性能,包括代码的加载、运行、DOM交互、页面生存周期等。雅虎的前端工程师Nicholas C. Zakas和其他五位JavaScript专家介绍了页面代码加载的最佳方法和编程技巧,来帮助你编写更为高效和快速的代码。你还会了解到构建和部署文件到生产环境的最佳实践,以及有助于定位线上问题的工具。
作者简介
Nicholas C.Zakas,雅虎首页的主要开发者,雅虎用户界面库(YUI)代码贡献者,擅长利用JavaScript、HTML、CSS、XML、XSLT设计和实现WEB界面的软件工程师。
目录信息
第1章:加载和执行 1
1.1 脚本位置 2
1.2 组织脚本 4
1.3 无阻塞的脚本 5
1.3.1 延迟的脚本 5
1.3.2 动态脚本元素 6
1.3.3 XMLHttpRequest脚本注入 9
1.3.4 推荐的无阻塞模式 10
1.4 小结 14
第2章:数据访问 15
2.1 管理作用域 16
2.1.1 作用域链和标识符解析 16
2.1.2 标识符解析的性能 19
2.1.3 改变作用域链 21
2.1.4 动态作用域 24
2.1.5 闭包,作用域和内存 24
2.2 对象成员 27
2.2.1 原型 27
2.2.2 原型链 29
2.2.3 嵌套成员 30
2.2.4 缓存对象成员值 31
2.3 小结 33
第3章:DOM编程 35
3.1 浏览器中的DOM 35
3.1.1 天生就慢 36
3.2 DOM访问与修改 36
3.2.1 innerHTML对比DOM方法 37
3.2.2 节点克隆 41
3.2.3 HTML集合 42
3.2.4 遍历DOM 46
3.3 重绘与重排 50
3.3.1 重排何时发生? 51
3.3.2 渲染树变化的排队与刷新 51
3.3.3 最小化重绘和重排 52
3.3.4 缓存布局信息 56
3.3.5 让元素脱离动画流 56
3.3.6 IE和:hover 57
3.4 事件委托 57
3.5 小结 59
第4章:算法和流程控制 61
4.1 循环 61
4.1.1 循环的类型 61
4.1.2 循环性能 63
4.1.3 基于函数的迭代 67
4.2 条件语句 68
4.2.1 if-else对比switch 68
4.2.2 优化if-else 70
4.2.3 查找表 72
4.3 递归 73
4.3.1 调用栈限制 74
4.3.2 递归模式 75
4.3.3 迭代 76
4.3.4 Memoization 77
4.4 小结 79
第5章:字符串和正则表达式 81
5.1 字符串连接 81
5.1.1 加(+)和加等于(+=)操作符 82
5.1.2 数组项连接 84
5.1.3 String.prototype.concat 86
5.2 正则表达式优化 87
5.2.1 正则表达式工作原理 88
5.2.2 理解回溯 89
5.2.3 回溯失控 91
5.2.4 基准测试的说明 96
5.2.5 更多提高正则表达式效率的方法 96
5.2.6 何时不使用正则表达式 99
5.3 去除字符串首尾空白 99
5.3.1 使用正则表达式去首尾空白 99
5.3.2 不使用正则表达式去除字符串首尾空白 102
5.3.3 混合解决方案 103
5.4 小结 104
第6章:快速响应的用户界面 107
6.1 浏览器UI线程 107
6.1.1 浏览器限制 109
6.1.2 多久才算“太久”? 110
6.2 使用定时器让出时间片段 111
6.2.1 定时器基础 112
6.2.2 定时器的精度 114
6.2.3 使用定时器处理数组 114
6.2.4 分割任务 116
6.2.5 记录代码运行时间 118
6.2.6 定时器与性能 119
6.3 Web Workers 120
6.3.1 Worker运行环境 120
6.3.2 与Worker通信 121
6.3.3 加载外部文件 122
6.3.4 实际应用 122
6.4 小结 124
第7章:Ajax 125
7.1 数据传输 125
7.1.1 请求数据 125
7.1.2 发送数据 131
7.2 数据格式 134
7.2.1 XML 134
7.2.2 JSON 137
7.2.3 HTML 141
7.2.4 自定义格式 142
7.2.5 数据格式总结 144
7.3 Ajax性能指南 145
7.3.1 缓存数据 145
7.3.2 了解Ajax类库的限制 148
7.4 总结 149
第8章:编程实践 151
8.1 避免双重求值(Double Evaluation) 151
8.2 使用Object/Array直接量 153
8.3 不要重复工作 154
8.3.1 延迟加载 154
8.3.2 条件预加载 156
8.4 使用速度快的部分 156
8.4.1 位操作 156
8.4.2 原生方法 159
8.5 小结 161
第9章:构建并部署高性能JavaScript应用 163
9.1 Apache Ant 163
9.2 合并多个JavaScript文件 165
9.3 预处理JavaScript文件 166
9.4 JavaScript压缩 168
9.5 构建时处理对比运行时处理 170
9.6 JavaScript的HTTP压缩 170
9.7 缓存JavaScript文件 171
9.8 处理缓存问题 172
9.9 使用内容分发网络(CDN) 173
9.10 部署JavaScript资源 173
9.11 敏捷JavaScript构建过程 174
9.12 小结 175
第10章:工具 177
10.1 JavaScript性能分析 178
10.2 YUI Profiler 179
10.3 匿名函数 182
10.4 Firebug 183
10.41 控制台面板分析工具 183
10.4.2 Console API 184
10.4.3 网络面板 185
10.5 IE开发人员工具 186
10.6 Safari Web查看器 188
10.6.1 描述文件面板 189
10.6.2 资源面板 191
10.7 Chrome开发人员工具 192
10.8 脚本阻塞 193
10.9 Page Speed 194
10.10 Fiddler 196
10.11 YSlow 198
10.12 dyna Trace Ajax Edition 199
10.13 总结 202
索引 203
· · · · · · (收起)
读后感
本书从性能角度全面分析js,相比市面上大部分企图面面俱到的教材要好很多。中文版仅210页,字字如金。 作者做了大量的浏览器测试,科学可信,逐步分析js程序员关心的性能问题,并提供对应的解决技巧和方案。 本书是一本冲破js学习瓶颈的好书,书中隐含的编程思想和良好的编码习...
非常好的javascript性能和优化技巧书籍,作者做了大量的测试工作,总结了很多有价值的内容。不过在实际使用中要根据实际情况灵活使用,比如有些测试是在几万次的循环里才会有一些差距,这种情况下如果只是为了优化性能而使代码变得复杂和难以理解就得不偿失了。如果确实存在性...
从我第一次接触Web编程的时候,我就对JavaScript这个名字耿耿于怀,因为它跟Java一点儿关系也没有,却非要拥有一个这样的名字来哗众取宠。从现在看,这门语言的生命力还是很旺盛的。 《高性能》这本书是JavaScript界的神书之一,如果你说你没看过这本书而且你还是一个Web前端开...
作为一个前端,居然这是我看完的第一步javascript的书,说来惭愧,其实也还没有完全看完,DOM的那部分没有细看,因为觉得现在已经不再试DOM的时代了就没有看。 因为看过的书不多,所以不评价到底好不好,不过看完总会有不一样的收获,至少对于javascript编程的思想以及习惯上有...
最佳实践类书籍,灰常实用! 同是zakas写的,讲闭包、作用域、原型链的部分,如果有同学看《JS高级程序设计》觉得理解不够透彻的话,建议看这本书,言简意赅多了~~当然这部分个人觉得还是dmitry的blog里的ECMAScript系列文章讲得最好~~ 讲性能优化的部分很多人都已经评论了。...
用户评价
这是一本真正能帮助我写出高效JavaScript代码的书!我之前一直以为性能优化就是简单地减少循环次数或者使用一些小技巧,但《高性能JavaScript》彻底颠覆了我的认知。它深入探讨了JavaScript引擎的编译和执行过程,比如JIT(Just-In-Time)编译、代码优化等。作者通过大量的实验和数据分析,向我们展示了不同的JavaScript代码写法对性能产生的实际影响。我尤其喜欢书中关于内存泄漏的章节,它详细讲解了内存泄漏的常见原因,比如闭包、全局变量、定时器等等,并且提供了非常实用的检测和修复方法。这对于我这种经常在大型项目中工作的开发者来说,简直是福音。此外,书中还讲解了Web Workers的使用,以及如何利用多线程来提升JavaScript的执行效率,这对我开发需要处理大量计算的应用程序非常有帮助。总而言之,《高性能JavaScript》是一本理论与实践相结合的优秀著作,它能够让你从根本上理解JavaScript的性能瓶颈,并提供切实可行的解决方案。
太棒了!这本书就像是一本 JavaScript 性能优化的“武功秘籍”,让我茅塞顿开。《高性能JavaScript》并没有简单地罗列一些优化技巧,而是从 JavaScript 语言的本质出发,剖析了 JavaScript 引擎的底层工作原理。我曾经对 JavaScript 的一些特性感到困惑,比如作用域链、原型继承等等,这本书都给出了非常清晰的解释,并且将它们与性能联系起来。特别是关于垃圾回收机制的讲解,让我明白了为什么有些看似无害的代码可能会导致内存占用过高,从而影响程序的性能。书中还提供了很多关于浏览器渲染过程的优化建议,比如如何减少重绘和回流,如何优化 CSS 选择器,以及如何合理使用图片和字体等资源。这些都是在实际 Web 开发中非常重要的性能考量因素。这本书的写作风格非常严谨,逻辑清晰,而且充满了作者丰富的实践经验。它就像一位经验老道的导师,循循善诱地引导我一步步深入理解 JavaScript 的性能优化之道。读完这本书,我感觉自己能够更自信地去编写高性能的 JavaScript 代码了。
这本书简直是为我量身定做的!我一直在寻找一本能真正让我深入理解 JavaScript 性能优化技巧的书籍,而《高性能JavaScript》完全超出了我的预期。它没有泛泛而谈,而是非常系统地剖析了 JavaScript 引擎的工作原理,比如 V8 引擎的垃圾回收机制、内存管理、以及代码执行的流程。作者用非常清晰易懂的语言解释了诸如闭包、原型链、事件循环等核心概念,并且深入浅出地阐述了它们是如何影响代码性能的。让我印象最深的是关于 DOM 操作的部分,书中详细对比了不同 DOM 操作方式的性能差异,并提供了具体的优化建议,比如批量操作、事件委托等等,这些都是我在实际开发中常常会遇到的痛点,而这本书给了我行之有效的解决方案。它不仅仅是告诉“是什么”,更重要的是“为什么”以及“怎么做”。我感觉自己就像在一位经验丰富的导师的指导下学习,一点点地构建起对 JavaScript 性能的深刻认知。这本书让我明白了,写出“能跑”的代码和写出“跑得快”的代码之间,存在着巨大的鸿沟,而《高性能JavaScript》就是一座连接这座鸿沟的桥梁。我强烈推荐给所有想要提升 JavaScript 开发能力的开发者,尤其是那些对性能有追求的工程师。
这本书绝对是JavaScript性能优化领域的“圣经”!我一直以来都觉得自己的JavaScript代码写得还不错,但总觉得在性能方面还有提升空间,总是有些模模糊糊的感觉。《高性能JavaScript》的出现,彻底改变了我的看法。它不仅仅是一本技术书籍,更像是一堂生动的性能调优实践课。书中的内容涵盖了JavaScript引擎的内部运作机制、内存管理、垃圾回收、事件循环、以及各种常见的性能陷阱和规避方法。作者用非常形象的比喻和详尽的图解,将那些枯燥的技术概念变得触手可及。比如,书中对JavaScript的事件队列和call stack的讲解,让我彻底明白了为什么有些异步操作会按照预期执行,而有些却会产生意想不到的结果。此外,关于代码压缩、混淆、以及CDN加速等内容,也为我提供了非常实用的优化思路。这本书的优点在于,它不仅讲解了“怎么做”,更重要的是讲解了“为什么这么做”,让你知其然,更知其所以然。读完这本书,我感觉自己仿佛拥有了一双“透视眼”,能够看穿代码背后的性能玄机。
哇,这本书真是太扎实了!读完之后,感觉我对 JavaScript 的理解上了一个全新的台阶。它没有停留在表面,而是深入到了 JavaScript 语言的底层机制,比如内存分配、对象创建、函数执行上下文等等。作者通过大量生动的代码示例,展示了不同写法对性能的影响,让我不再是凭感觉去优化,而是有了科学的依据。特别是关于网络请求的部分,书中详细分析了 HTTP 协议的原理、DNS 解析过程、以及如何通过合理的资源加载策略来减少页面加载时间,这对于前端性能优化来说至关重要。我还学到了很多关于数据结构和算法在 JavaScript 中的应用,如何选择合适的数据结构来存储和处理数据,以及如何编写更高效的算法来避免性能瓶颈。这本书的逻辑性非常强,每一章的内容都环环相扣,层层递进,让你在不知不觉中就掌握了复杂的概念。而且,作者的写作风格非常严谨,没有一丝一毫的废话,每一句话都充满了干货。如果你是一个对 JavaScript 性能有执着追求的开发者,那么这本书绝对是你不容错过的宝藏。它会让你在面对复杂的性能问题时,不再束手无策,而是能够游刃有余地解决。
Nicholas是很不错的前端工程师,这本书值得看
最后两章的内容已经过时了,其他部分还好,但总的来说没有很多新的收获。
好书!!!
翻
明白了不少东西~