警惕(Vigilant):警觉地关注,主要是为了避免危险。
任何人阅读了本书或其前传《高性能网站建设指南》,都会理解网站速度缓慢的危害性:饱受挫折的用户、负面的品牌认知、膨胀的运营开支及缩水的财务收益。我们必须不断努力使网站更快。当我们取得进步的时候,同时也意味着开始落后了。我们必须处处留心,每一次修复Bug、增加新功能和升级系统都可能对网站的速度产生影响。我们必须时时关注,今天实现的性能提升很可能明天就会失效。因此,必须保持警惕。
守夜(Vigil):节日的前一刻仍然保持警觉。
根据vigil的拉丁语义,守夜意味着我们应该保持警觉直到庆祝真正开始。网站的确可以变得更快,甚至飞快,我们可以为自己关心和专注所获得的成果庆祝。这是真的!使网站速度更快是可以实现的。本书介绍的技术已经让一些风靡全球的网站的加载时间减少了60%,它们同样也将造福小型网站,而最终使用户从中受益。
蜘蛛侠(Vigilante):自我任命的正义使者。
作为开发者,我们有责任去捍卫用户的利益。你应该在自己的网站上充当性能的布道者,实施这些技术,并与同事分享这本书,为更快的用户体验而战。如果你的公司没有人专门负责性能,那么任命自己来担当这种角色吧。性能蜘蛛侠--听起来很不错。
本书的内容结构
How This Book Is Organized
这本书是对我第一本书《高性能网站建设指南》(O'Reilly出版)的跟进。在那本书中,我为Web性能提升设置了14条规则。
规则1:减少HTTP请求。
规则2:使用内容发布网络。
规则3:添加Expires头。
规则4:采用Gzip压缩组件。
规则5:将样式表放在顶部。
规则6:将脚本放在底部。
规则7:避免CSS表达式。
规则8:使用外部的JavaScript和CSS。
规则9:减少DNS查询。
规则10:精简JavaScript。
规则11:避免重定向。
. 规则12:删除重复的脚本。
规则13:配置ETag。
规则14:使Ajax可缓存。
我称之为"规则"是因为它们易于实施。看看2007年3月美国十大网站的统计数据:
两个站点使用CSS sprites。
26%的资源添加了Expires头。
5个站点压缩了HTML、JavaScript和CSS。
4个站点精简了JavaScript。
2009年4月的统计数据显示这些规则渐渐地获得了青睐:
9个站点使用了CSS sprites。
93%的资源添加了Expires头。
10个站点都压缩了HTML、JavaScript和CSS。
9个站点精简了JavaScript。
《高性能网站建设指南》中的规则现在依旧适用,并且大多数Web公司都应该从这些规则做起。我们已经有所进展,但在这套原始规则之上还有很多工作要做。
然而,Web没有停滞不前,我们必须迎头赶上。虽然《高性能网站建设指南》中的14条规则依旧适用,但网页内容和Web 2.0应用程序的增长带来了一系列新的性能挑战。本书提供了开发者所需的能为新一代网站提速的最佳实践。
本书的所有章节由3部分组成:JavaScript性能(第1~7章)、网络性能(第8~12章)和浏览器性能(第13~14章)。附录A介绍了一组最佳性能分析工具。
以下6章是由特约作者完成的:
第1章 理解Ajax性能,由Douglas Crockford完成。
第2章 创建快速响应的Web应用,由Ben Galbraith和Dion Almaer完成。
第7章 编写高效的JavaScript,由Nicholas C. Zakas完成。
第8章 可伸缩的Comet,由Dylan Schiemann完成。
第9章 超越Gzip压缩,由Tony Gentilcore完成。
第10章 图像优化,由Stoyan Stefanov 和Nicole Sullivan完成。
这些作者都是上述各个领域的专家,我想请你直接听听他们的声音。为了便于识别这些章节,我在每章的开头都注明了特约作者的名字。
JavaScript性能
JavaScript Performance
在对当今网站的分析中,我经常能体会到JavaScript是实现高性能Web应用程序的关键,所以我以如下章节作为本书的开始。
第1章理解Ajax性能由Douglas Crockford所著。Douglas介绍了Ajax如何改变浏览器和服务器的交互方式,以及开发者应如何理解这种新的关系才能恰当地抓住提升性能的时机。
第2章创建快速响应的Web应用是由 Ben Galbraith 和 Dion Almaer共同完成的,它使JavaScript性能提升回归到真正重要的事情上:用户体验。如今的Web应用程序在按钮点击事件发生后需要调用复杂的函数,必须根据浏览器需要完成的工作来评估Wed应用程序。如果一个程序员能理解程序代码和Web响应时间的关系,其将更容易编写成功的Web应用程序。
我编写了接下来的4章。它们都集中在处理JavaScript的机制上--封装和加载的最佳方式,以及将其插入页面的最佳位置。第3章拆分初始化负载介绍了当今许多Web应用程序面临的处境:在页面初始化时下载一个庞大的JavaScript,这不仅会阻塞渲染还会阻塞后续资源的下载。为了更高效的加载,对这个庞大的JavaScript进行拆分是关键。
第4章和第5章相辅相成。在眼下流行的浏览器中,外部脚本会阻塞页面中剩下的所有资源。第4章无阻塞加载脚本中介绍了在加载外部脚本时如何避开这些造成阻塞的陷阱。当行内脚本依赖外部脚本时,异步加载它们是一个挑战。幸运的是,有几种技术可以整合行内脚本和它们所依赖的异步加载的脚本。这些技术在第5章整合异步脚本中做介绍。第6章布置行内脚本介绍了应用行内脚本的最佳性能实践,特别是它们对并发加载的影响。
我认为Nicholas C. Zakas所写的第7章编写高效的JavaScript是Douglas所写的第1章的补充。Douglas介绍了Ajax的全貌,而Nicholas则专注于加速JavaScript的几种具体技术。
网络性能
Network Performance
Web应用程序和桌面应用程序不同--每次使用它们时都必须通过互联网进行下载。Ajax的应用产生了一种服务端和客户端数据通信的新形式。毫不夸张地说,在一些互联网速度尚不理想的新兴市场中,Web产业还蕴含着一些巨大的增长机遇。所有这些因素都突显了提升网络性能的必要性。
在第8章可伸缩的Comet中,Dylan Schiemann介绍了一个超越Ajax的架构,它为诸如聊天和文档协助之类的实时应用提供了大容量、低延迟的实时连接。
第9章超越Gzip压缩介绍了为何打开Gzip压缩并不足以保证用最佳的方式发送网站内容。Tony Gentilcore 透露了一个鲜为人知的现象,全球有15%的互联网用户的网络性能因Gzip压缩无法使用而被严重降低。
Stoyan Stefanov和Nicole Sullivan联合贡献了第10章图像优化。它为该主题提供了彻底的解决方案。本章回顾了所有的流行图像格式,展现了很多图像优化技术,介绍了如何选择图像压缩工具。
剩下的章节由我完成。第11章划分主域提醒我们当今流行浏览器和下一代浏览器的连接限制。它包括了通过多个域来成功划分资源的技术。
第12章尽早刷新文档的输出全面地介绍了在完整的HTML文档到达之前使用块编码渲染页面的好处与缺陷。
浏览器性能
Browser Performance
iframe是一种在网页中嵌入第三方内容的,方便且常用的技术,但它们也会带来开销。第13章少用iframe介绍了iframe的缺点并提供了一些替代方案。
第14章简化CSS选择符介绍了复杂选择符影响性能的原理,并在客观的分析后指出使用时最需要注意的情况。
附录A性能工具介绍了我推荐的用于分析网站和找出急需改进性能之处的工具。
本书约定
Conventions Used in This Book
本书使用下列排版约定:
等宽体(Constant width)
表示命令、选项、开关、变量、属性(attribute)、键值、函数、类型、类、名字空间、方法、模块、属性(property)、参数、值、对象、事件、事件处理程序、XML标签、HTML标签、宏、文件内容和命令的输出。
等宽粗体(Constant width bold)
表示实际中应由用户输入的命令或其他文本。
这个图标表示提示、建议或一般说明。
这个图标表示警告或提醒。
意见和问题
Comments and Questions
请将对本书的评价和存在的问题通过如下地址告知出版者。
美国:
O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
对于本书的评论或技术性的问题,请发送电子邮件到:
bookquestions@oreilly.com
想了解关于O'Reilly图书、课程、会议和新闻的更多信息,请参阅我们的网站:
http://www.oreilly.com
http://www.oreilly.com.cn
与本书有关的在线信息如下所示:
http://www.oreilly.com/catalog/9780596522308(原书)
代码示例
Using Code Examples
你可以直接在程序或者文档中使用本书提供的代码,无须与我们联系获得许可,除非复制大量的程序。例如,使用本书中的一些代码编写程序不需要得到许可,不过如果是想将O'Reilly书中的代码例子用于出售或复制光盘就必须获得许可。可以引用本书的内容或者代码样例来解决其他问题,但是在自己的产品文档中大量使用本书的代码样例需要事先得到许可。
我们会非常感谢你在引用本书时声明版权,虽然不是必需的。声明版权时通常要注明标题、作者、出版社以及ISBN序列号。例如:"Even Faster Web Sites, by Steve Souders. Copyright 2009 Steve Souders, 978-0-596-52230-8。"
如果你觉得自己对示例代码的使用超出了合理情况或上述许可的范围,请随时联系我们permissions@oreilly.com。
Safari? Books Online
Safari Books Online是一家按需所取的数字图书馆,它同时提供来自世界各地领先的技术和业务作者的书籍和视频两种形式的专业内容。
专业技术人员、软件开发人员、网页设计师,以及商业和创意专业人士使用Safari联机丛书作为研究,是解决问题、学习和认证培训的主要资源。
Safari Books Online提供了一系列的产品组合和针对组织、政府机构和个人的定价方案。用户有机会在一个完全可搜索的数据库中访问成千上万的书籍、培训视频和即将出版的原稿,它们来自O'Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology以及大量其他出版商。有关Safari Books Online的更多详细信息,请访问我们的网站。
致谢
Acknowledgments
首先我要感谢本书的特约作者:Dion Almaer、Douglas Crockford、Ben Galbraith、Tony Gentilcore、Dylan Schiemann、Stoyan Stefanov、Nicole Sullivan和Nicholas C. Zakas。他们成就了这本特别的书。他们每个人都是极具实力的专家,其中大多数人都自己写过书。他们的宝贵经验,为我们带来了一些独特的好东西。
我要感谢所有的审阅者:Julien Lecomte、Matthew Russell、Bill Scott和Tenni Theurer。此外特别要感谢Eric Lawrence和Andy Oram。Eric校对了本书和《高性能网站建设指南》。他为两本书都提供了极其深入且专业的反馈。Andy是我的前一本书《高性能网站建设指南》的编辑,他负责改善本书,使每一句、每一节、每一章都畅通易读,相比别人而言他的工作可谓辛苦至极。
特别感谢我的编辑Mary Treseler。很多编辑都经历过与多位作者协作整理同一本书的挑战。我很高兴她接手了这个项目,并指导我们将大量想法顺利地呈现在你手上的这本书中。
在Google我与一群热爱研究Web性能的人一起工作。Tony Gentilcore是Fasterfox的创造者和第9章的作者。他也是我的同事,我们一天得讨论好几次关于Web性能的看法。Steve Lamm、Lindsey Simon和Annie Sullivan经常与我一同工作,他们热衷于性能优化。据我所知,其他对Web性能有贡献的"Google人"还有Jacob Hoffman-Andrews、Kyle Scholz、Steve Krulewitz、Matt Gundersen、Gavin Doughtie和Bryan McQuade。
本书中许多见解来源于我在Google以外的朋友。他们知道,如果给我一个改善性能的思路,这个思路很可能会见诸于一本书或一篇博文。这个性能亲友团成员包括Dion Almaer、Artur Bergman、Doug Crockford、Ben Galbraith、Eric Goldsmith、Jon Jenkins、Eric Lawrence、Mark Nottingham、Simon Perkins、John Resig、Alex Russell、Eric Schurman、Dylan Schiemann、Bill Scott、Jonas Sicking、Joseph Smarr和Tenni Theurer。
这份名单难以面面俱到,对此我感到很抱歉。感谢他们抽出宝贵时间给我发送电子邮件或在会议上和我交流,他们的经验教训与成功案例令我坚持下去,重要的是我知道了有这么多人都在致力于提高Web的速度。
谢谢我的父母,感谢你们一直以来为我是个作家而自豪。尤其要谢谢我的妻子和3个女儿,我向你们保证现在开始休假。