性能是任何一个网站成功的关键,然而,如今日益丰富的内容和大量使用Ajax的Web应用程序已迫使浏览器达到其处理能力的极限。Steve Souders是Google Web性能布道者和前Yahoo!首席性能工程师,他在本书中提供了宝贵的技术来帮助你优化网站性能。
Souders的上一本畅销书《高性能网站建设指南》(High Performance Web Sites)震惊了Web开发界,它揭示了在客户端加载一个网页的时间大约占用了总时耗的80%。在《高性能网站建设进阶指南》(Even Faster Web Sites)这本书中,Souders与另外8位专家级特约作者提供了提升网站性能的最佳实践和实用建议,主要包括以下3个关键领域:
• JavaScript——你将获得忠告:理解Ajax性能、编写高效的JavaScript、创建快速响应的应用程序、无阻塞加载脚本等。
• 网络——你将学到:跨域共享资源、无损压缩图片大小,以及使用块编码加快网页渲染。
• 浏览器——你将发现:避免或取代iframe的方法、简化CSS选择符,以及其他技术。
对于当前的富媒体网站和Web 2.0应用程序来说,速度至关重要。在本书中,你将学习如何节省宝贵的网站加载时间,使其更快地响应用户的请求。
致谢 I
前言 III
第1章:理解Ajax性能 1
1.1 权衡 1
1.2 优化原则 2
1.3 Ajax 4
1.4 浏览器 4
1.5 哇! 5
1.6 JavaScript 6
1.7 总结 6
第2章:创建快速响应的Web应用 7
2.1 怎样才算足够快 9
2.2 测量延迟时间 10
2.2.1 当延迟变得很严重时 12
2.3 线程处理 12
2.4 确保响应速度 13
2.4.1 Web Workers 14
2.4.2 Gears 14
2.4.3 定时器 16
2.4.4 内存使用对响应时间的影响 17
2.4.5 虚拟内存 18
2.4.6 内存问题的疑难解答 18
2.5 总结 19
第3章:拆分初始化负载 21
3.1 全部加载 21
3.2 通过拆分来节省下载量 22
3.3 寻找拆分 23
3.4 未定义标识符和竞争状态 24
3.5 个案研究:Google日历 25
第4章:无阻塞加载脚本 27
4.1 脚本阻塞并行下载 27
4.2 让脚本运行得更好 29
4.2.1 XHR Eval 29
4.2.2 XHR注入 31
4.2.3 Script in Iframe 31
4.2.4 Script DOM Element 32
4.2.5 Script Defer 32
4.2.6 document.write Script Tag 33
4.3 浏览器忙指示器 33
4.4 确保(或避免)按顺序执行 35
4.5 汇总结果 36
4.6 最佳方案 38
第5章:整合异步脚本 41
5.1 代码示例:menu.js 42
5.2 竞争状态 44
5.3 异步加载脚本时保持执行顺序 45
5.3.1 技术1:硬编码回调(Hardcoded Callback) 46
5.3.2 技术2:Window Onload 47
5.3.3 技术3:定时器(Timer) 48
5.3.4 技术4:Script Onload 49
5.3.5 技术5:降级使用script标签(Degrading Script Tags) 50
5.4 多个外部脚本 52
5.4.1 Managed XHR 52
5.4.2 DOM Element和Doc Write 56
5.5 综合解决方案 59
5.5.1 单个脚本 59
5.5.2 多个脚本 60
5.6 现实互联网中的异步加载 63
5.6.1 Google分析和Dojo 63
5.6.2 YUI Loader 65
第6章:布置行内脚本 69
6.1 行内脚本阻塞并行下载 69
6.1.1 把行内脚本移至底部 70
6.1.2 异步启动执行脚本 71
6.1.3 使用script的defer属性 73
6.2 保持CSS和JavaScript的执行顺序 73
6.3 风险:把行内脚本放置在样式表之后 74
6.3.1 大部分下载都不阻塞行内脚本 74
6.3.2 样式表阻塞行内脚本 75
6.3.3 问题确曾发生 77
第7章:编写高效的JavaScript 79
7.1 管理作用域 79
7.1.1 使用局部变量 81
7.1.2 增长作用域链 83
7.2 高效的数据存取 85
7.3 流控制 88
7.3.1 快速条件判断 89
7.3.2 快速循环 93
7.4 字符串优化 99
7.4.1 字符串连接 99
7.4.2 裁剪字符串 100
7.5 避免运行时间过长的脚本 102
7.5.1 使用定时器挂起 103
7.5.2 用于挂起的定时器模式 105
7.6 总结 107
第8章:可伸缩的Comet 109
8.1 Comet工作原理 109
8.2 传输技术 111
8.2.1 轮询 111
8.2.2 长轮询 112
8.2.3 永久帧 113
8.2.4 XHR流 115
8.2.5 传输方式的前景 116
8.3 跨域 116
8.4 在应用程序上的执行效果 118
8.4.1 连接管理 118
8.4.2 测量性能 119
8.4.3 协议 119
8.5 总结 120
第9章:超越Gzip压缩 121
9.1 这为什么很重要 121
9.2 问题的根源 123
9.2.1 快速回顾 123
9.2.2 罪魁祸首 123
9.2.3 流行的乌龟窃听者实例 124
9.3 如何帮助这些用户 124
9.3.1 设计目标:最小化未压缩文件的尺寸 125
9.3.2 引导用户 129
9.3.3 对Gzip的支持进行直接探测 130
第10章:图像优化 133
10.1 两步实现简单图像优化 134
10.2 图像格式 135
10.2.1 背景 135
10.2.2 不同图像格式的特性 137
10.2.3 PNG的更多资料 139
10.3 自动无损图像优化 141
10.3.1 优化PNG格式的图像 142
10.3.2 剥离JPEG的元数据 143
10.3.3 将GIF转换成PNG 144
10.3.4 优化GIF动画 144
10.3.5 Smush.it 145
10.3.6 使用渐进JPEG格式来存储大图像 145
10.4 Alpha透明:避免使用AlphaImageLoader 146
10.4.1 Alpha透明度的效果 147
10.4.2 AlphaImageLoader 149
10.4.3 AlphaImageLoader的问题 150
10.4.4 渐进增强的PNG8 Alpha透明 151
10.5 优化Sprite 153
10.5.1 超级Sprite VS.模块化Sprite 154
10.5.2 高度优化的CSS Sprite 155
10.6 其他图像优化方法 155
10.6.1 避免对图像进行缩放 155
10.6.2 优化生成的图像 156
10.6.3 Favicons 157
10.6.4 Apple触摸图标 158
10.7 总结 159
第11章:划分主域 161
11.1 关键路径 161
11.2 谁在划分主域 163
11.3 降级到HTTP/1.0 165
11.4 域划分的扩展话题 168
11.4.1 IP地址和主机名 168
11.4.2 多少个域 168
11.4.3 如何划分资源 168
11.4.4 新型浏览器 169
第12章:尽早刷新文档的输出 171
12.1 刷新文档头部的输出 171
12.2 输出缓冲 173
12.3 块编码 175
12.4 刷新输出和Gzip压缩 176
12.5 其他障碍 177
12.6 刷新输出时的域阻塞 178
12.7 浏览器:最后的障碍 178
12.8 不借助PHP进行刷新输出 179
12.9 刷新输出问题清单 180
第13章:少用iframe 181
13.1 开销最高的DOM元素 181
13.2 iframe阻塞onload事件 182
13.3 使用iframe并行下载 184
13.3.1 脚本位于iframe之前 184
13.3.2 样式表位于iframe之前 185
13.3.3 样式表位于iframe之后 186
13.4 每个主机名的连接 187
13.4.1 iframe中的连接共享 187
13.4.2 跨标签页和窗口的连接共享 188
13.5 总结使用iframe的开销 190
第14章:简化CSS选择符 191
14.1 选择符的类型 191
14.1.1 ID选择符 192
14.1.2 类选择符 193
14.1.3 类型选择符 193
14.1.4 相邻兄弟选择符 193
14.1.5 子选择符 193
14.1.6 后代选择符 193
14.1.7 通配选择符 194
14.1.8 属性选择符 194
14.1.9 伪类和伪元素 194
14.2 高效CSS选择符的关键 194
14.2.1 最右边优先 195
14.2.2 编写高效的CSS选择符 195
14.3 CSS选择符性能 197
14.3.1 复杂的选择符影响性能(有时) 197
14.3.2 应避免使用的CSS选择符 200
14.3.3 回流时间 201
14.4 在现实中测量CSS选择符 202
附录:性能工具 205
索引 221
《全面图解电动自行车和三轮车维修》内容简介:本书为“杰出电工系列丛书”之一,全书共分10章,主要内容包括电动自行车基础知识,
《CSS精粹(第2版)》采用问答的形式,为CSS使用过程中一些有价值的经典问题提供了精彩的实践解决方案。《CSS精粹(第2版)》内容包括
本书是经典著作《Linux设备驱动程序》的第三版。如果您希望在Linux操作系统上支持计算机外部设备,或者在Linux上运行新的硬件,或
游戏透视 本书特色 《游戏透视(动漫游戏专业系列教材)》由浅入深、详细地讲述了绘画透视的基本概念以及不同的绘画透视种类,从动漫与游戏制作的流程出发,配合大量精美...
《被颠覆的汽车帝国:中国汽车电商与车联网生态报告》内容简介:本书对移动互联网时代下的车企的现状及当代车企的营销活动进行了深
《良渚文化村》内容简介:良渚文化村位于杭州市西北的余杭,是在城市扩张和农村城市化的背景下,从2000年开始由民营企业开发建设的
《小程序,巧应用:微信小程序开发实战》内容简介:系统全面地讲解微信小程序的开发技术。开篇创建一个小程序项目并解析体验,介绍
编辑推荐为什么只因为客户将某个项目交给了设计师,后者就应该为相关信息大声吆喝呢?这种理由是站不住脚的。所以,倒还不如说,设
《英语应该这样学!》内容简介:本书从英语学习的五大板块——发音、单词、语法、语感、习题——入手,逐一分析了中国英语学习者(
《那颗星星不在星图上:寻找太阳系的疆界》内容简介:关于太阳系及其行星的故事的书不少,这本绝对是质量最高的一本。作者文笔清新
《如何让你的销售增加369%:引导式销售技巧》内容简介:如何增加销售是每一个企业关注的话题,本书详细介绍了可以大幅提升销售的引
《喷头下的世界:漫谈3D打印(双色)》从多种科学技术之间彼此影响、相互促进、分流交汇、掺杂渗透的角度,向读者介绍近年来异常
《三国故事中的人生智慧》内容简介:《三国演义》是古代演义小说的经典,充满了令人心潮澎湃的故事,通过描述董卓、袁绍、曹操、吕
《土摩托看世界》内容简介:《土摩托看世界》主要内容包括格瓦拉的阿根廷、谁的非洲、天堂的衰落——莫尔斯比港、热带雨林拯救站、
《21天学通JavaWeb开发》是JavaWeb开发的基础教程,针对没有接触过或还不是特别熟悉JavaWeb开发的读者,详细介绍了JavaWeb开发的
《Neo4j 3.x入门经典》内容简介:Neo4j是一个高性能的NoSQL图数据库,将结构化数据存储在拓扑图上而不是表中,从而轻松地管理巨量的
《详解AutoCAD 2022机械设计(第6版)》内容简介:本书结合典型机械设计案例,详细讲解AutoCAD 2022机械设计的知识要点,让读者在学
《万物大历史·科学和技术是怎么发展而来的》内容简介:"大历史”概念由美国知名历史学家大卫·克里斯蒂安提出,后经比尔·盖茨大力
写这本书之前,作者一直在摸索一种最有利于入门者学编程的方法,并应用到教学当中。经过两年的教学实践,他确信他的方法是有效的
本书全面介绍了交互设计的基本理论,从界面设计、交互原理到用户体验,囊括了所有专业知识点,并通过列举大量具有开创性的交互设