BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

采访高性能ASP.NET网站一书的作者Dean Hume及书评

| 作者 Anand Narayanaswamy 关注 0 他的粉丝 ,译者 邵思华 关注 3 他的粉丝 发布于 2014年8月7日. 估计阅读时间: 13 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

Dean Hume所编写的《高性能ASP.NET网站》(Fast ASP.NET Websites)一书能够帮助你学习提升ASP.NET与MVC应用程序性能的各种方式。

全书共划分为12个章节,分为三大部分(分别论述了性能的定义,通用的最佳实践,以及针对ASP.NET方面的技术)。第一章首先论述了网站优化的必要性,通过它对业务、搜索引擎排名、移动设备用户和环境影响等场景展开论述。

作者展示了一张性能周期图,展示了你需要对网站的哪些部分进行优化,以及各个必须的步骤。他指出了一些优化的核心因素,例如性能分析(profile)、指出性能问题、实现方法以及网站监控,并且在本书接下来的章节中对这些内容分别展开了详细的介绍。

Hume简要地讲述了前端优化的概念,提出了一些他所认为的性能提升黄金法则。他也建议开发者对后端代码进行优化,它在高性能应用程序中扮演了一个非常关键的角色。

在本书第二章中,你将学习HTTP的基础知识、空缓存与完整缓存(primed cache)的概念,以及多种以图表和图例查看网络请求情况的工具。他特别指出了F12这个开发者用以调试的快捷键。

在本章内容结束之前,作者列举了提高前端性能的14项黄金法则,这些原则是由《高性能网站建设指南》(High Performance Web Sites)一书的作者Steve Sounders最先提出的。举例来说,第3条法则建议你在HTTP头中加入一个“expires”头信息,第9条法则则建议你尽量减少DNS查找。

本书接下来的部分转为讨论一些通用的性能最佳实践。

第三章讲解了压缩的概念,以及它的各种类型,例如Gzip、Deflate和SDCH。作者讲述了压缩的必要性、它的各种优缺点,以及对Accept-Encoding头信息的使用。

本章也列举了通过IIS和对应的web.config文件添加压缩功能所必须的步骤,Hume也讨论了添加压缩功能的一些其它方式,例如使用一些NuGet包或是使用定制化的类库。不过他没有对这些类库展开详细的讨论,同时他强烈建议你不要使用这些类库。

第四章讨论了HTTP、IIS缓存以及相关的web.config配置,以及其它一些技巧和点子,例如通过文件重命名的方式实现缓存的立即更新。

本章结束之前,作者用一个简单的应用对输出缓存的相关概念进行了完整的分析,并给出了源代码。

第五章讲解了文件压缩及合并的相关概念,并特别提到了ASP.NET 4.5中与之相关的新特性。作者通过屏幕截图和相关源代码完整地讲述了在ASP.NET MVC和Web Forms中使用文件合并功能的必需步骤。

在第六章中,你将学习到如何通过在适合的位置引用CSS和JavaScript文件,以获得最好的性能。书中将通过一些达意的图示来帮助你掌握这一技巧。Hume也分析到当样式表和JavaScript脚本的引用顺序被改变后可能会引起的页面显示问题,他同时也讨论了各浏览器对HTML5技术的支持情况、编写异步JavaScript、工作线程(web worker),以及在MVC和Web Forms应用程序中如何使用应用程序缓存等内容。

在第七章中,作者讨论了如何通过在线以及客户端命令行工具进行图片优化,包括Smush.itKrakenpngcrush等网站与工具。通过对各种相关HTML标签的应用,你还将学习到使用图片优化(Image Optimizer)这个Visual Studio插件的使用、数据URL的概念,以及图像的维度在应用程序性能中所扮演的角色。

接下来的一章讨论了ETag的使用,以及如何从ASP.NET Web Forms和MVC应用程序中去除ETag的相关步骤。通过一些实时的屏幕截图,作者比较了移除ETag之前和之后,应用程序的性能在Yahoo!的YSlow工具上的性能评分情况。

第九章介绍了内容分发网络与域名分片(domain sharding)的概念,并且在本章中对开启CDN之前与之后的性能进行了一次对比。同时在本章中也提供了一个列表,列举了在全球比较靠谱的一些CDN提供商。

本书的最后一部分讨论了一些特定于ASP.NET的优化技巧。第十章和十一章对调整ASP.NET MVC和Web Forms应用程序的性能所需的步骤进行了完整的阐述, 作者总共讨论了以下概念:

  • 发布模式与调试模式
  • 使用favicon,以及代码性能诊断
  • Web.config设置
  • Response.Redirect与Server.Transfer的区别

全书的最后一章简要地介绍了服务端缓存、System.Runtime.Caching命名空间以及分布式缓存的一些知识。Hume通过一个“冲浪滑板商店”的示例应用程序讲解了如何正确使用缓存技术的必要步骤。

作者为这本书特意为同一个示例项目上传了两个不同的版本,以便开发者们分析经过优化之后的应用程序性能与之前相比有多大的提升。

整本书的最后部分包含了两个附录,附录一描述了创建本地IIS服务器所必须的步骤,而附录二中列举了本书中所提到过的一些资源的链接。

《高性能ASP.NET网站》一书对于那些打算通过优化ASP.NET应用程序以提高网站性能的开发者是十分有帮助的,对于还在学习中的.NET开发者而言是详细的参考资料。我个人认为这本书对所有的ASP.NET开发者来说都是一本必读书籍,毕竟网站的加载速度足够快,才能够让访问者愿意停留在你的网站上。

你可以在Manning Publications的网站上免费下载本书的一个章节,也可以在该网站上订购一本实体书。

InfoQ有幸与Hume进行了一番对话,谈论了有关本书的更多内容。

InfoQ:是什么样的动力促使你编写了这本《高性能ASP.NET网站》呢?

我所参加过的一些技术大会,例如Velocity中经常有一些与web性能相关的讲座,从几次参与下来的经历中,我感觉到.NET社区非常需要一本专门描写ASP.NET应用程序的Web性能的基础指南。这本书的每一个章节都会讨论一些如何提供你的应用程序的性能的相关技巧。无论你是个经验丰富的开发者还是一个新手,本书中所涵盖的一些基本原则都能够对你创建高性能的网站有所帮助。

InfoQ:你在本书第二章中谈到了缓存,它是否在ASP.NET中扮演了一个重要的角色?

第二章提到了一些基本的工具和技巧,它们是你对网站进行分析时所必需掌握的。其中一个领域是关于HTTP的基本概念,包括HTTP缓存。而HTTP缓存不仅仅对于ASP.NET开发者,对于使用任何语言进行web开发的程序员而言都是很重要的一环。

InfoQ:你在本书中讨论了一些性能原则,你认为开发者们必须要遵循这些原则吗?

我想,大多数的开发者都会在工作中遇到某个运行缓慢的网站,需要通过一些改进手段来提升它的速度。如果你能够在开发这些网站时遵循这些性能原则,你就能保证这个网站在一开始就是性能良好的,每个人都希望网站的速度足够快!

InfoQ:你能为我们分享一下关于在ASP.NET应用程序中对压缩的使用吗?

IIS本身就对压缩功能提供了良好的支持,你所要做的就是在应用程序中打开这些功能。如今的互联网上依然有许多网站没有使用压缩功能,其实只需要几个简单的配置就能够使网站的性能得到很大程序的提升。曾经有个调查结果宣称:由于网站没有应用内容缓存,而造成使用者每天在等待页面加载上所额外消耗的时间总和可达到19年之多,多么令人震惊的事实!

InfoQ:你能为我们分享一下关于文件压缩与合并的区别吗?

文件压缩适用于CSS文件与JavaScript文件,它的作用就是将一些去除或缩短一些无意义的长代码。而对CSS和JavaScript文件进行合并是一种可以有效地减少网页所包含的HTTP请求数量的方法。通过将多个JavaScript文件合并成一个单独的脚本文件,并且将所有CSS合并在一个单独的样式表文件中,你能够使网页所包含的HTTP请求数量大大减少。而如果你能同时应用文件压缩与合并,你就能够得到更大的性能提升。ASP.NET本身就包括了一些优秀的特性,能够帮助你自动压缩与合并CSS和JavaScript文件。

InfoQ:你在第八章中提到了ETag。你认为开发者们如何才能理解所生成的tag码的作用呢?

ETag是一种包含在HTTP响应中的字符串,它能够帮助浏览器鉴别与校验浏览器端的缓存。但如果使用方法不当,它所带来的一些好处也会被减弱。本书为读者提供了多种对应用程序的ETag进行调整的方法,务求使它产生最好的结果。

InfoQ:使用CDN能够在哪些方面提升网站的性能呢?

一个内容分发网络(CDN)能够保证以高可用性和高性能为用户提供内容。CDN通常是分布在全球的,它会选择将内容分布到离你的用户最近的服务器上。举例来说:这意味着如果你的用户来自于印度孟买,他们就会从离孟买最近的服务器上获取内容,而不是跨越半个地球连接到某台在欧洲的服务器上。距离的缩短大大减少了网络延迟,这样就能够在很大程序上提升你的网站性能了。有一个叫做CDN planet的优秀网站,它提供了一个完整的可用的CDN供应商的列表。我建议你去查看一下这个列表。

InfoQ:在第十章中,你谈论了favicon。如果对favicon的应用不当,可能会产生怎样的问题呢?

在一个高流量的ASP.NET应用程序中,如果你忘了给网站添加一个favicon,你可能会在你的错误日志中看到一条“著名”的错误信息:“The controller for path /favicon.ico does not implement IController”。多数浏览器在默认情况下都会试图查找网站的favicon,而如果忘了添加一个favicon,所产生的404错误会导致无意义的磁盘读取和额外的运算。虽然对于小型网站来说,你可能不会观察到这一错误,但在高流量的网站上这一点的确会对性能产生损害。

InfoQ:你是否留意到有哪些书籍会成为你这本著作的竞争对手呢?

Steve Souders有一本著作叫做《搭建高性能网站》(High Performance Websites),它为开发者们提供了实用的建议和各种本质方面的知识。我不想把这本书称作竞争对手,相反,我认为对任何有志于进行web开发的人们来说,这本书都是必读的。

关于作者

Dean Hume《高性能ASP.NET网站》一书的作者,他同时也是MVC HTML5 Toolkit这个著名工具的创建者。他十分热衷于在博客上发贴,并且热心于参与其它与技术和代码相关的网站。Hume对于持续不断地打造他的个人技能,并且为通过他的文章、演讲、或各种主题的培训而了解他的人提供帮助有着强烈的意愿。

查看英文原文:Review and Interview with Dean Hume - Author of Fast ASP.NET Websites

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT