写点什么

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

2014 年 8 月 06 日

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.it Kraken pngcrush 等网站与工具。通过对各种相关 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

2014 年 8 月 06 日 02:072919
用户头像

发布了 428 篇内容, 共 149.4 次阅读, 收获喜欢 20 次。

关注

评论

发布
暂无评论
发现更多内容

Spring 5 中文解析核心篇-IoC容器之IoC容器和Bean概述

青年IT男

Spring5 Spring Framework

Spring 5 中文解析核心篇-IoC容器之JSR330标准注解

青年IT男

Spring5 Spring Framework

话题讨论 | 你的桌面上会放哪些有趣的小摆件?

InfoQ写作平台官方

工作 话题讨论 办公室

你真的懂AQS吗?透彻理解AQS源码分析系列之AQS基础一

InfoQ_d2212957090d

AQS

mPaas 厂商push不通排查指南

阿里云金融线TAM SRE专家服务团队

android push

再爆安全漏洞,这次轮到Jackson了,竟由阿里云上报

YourBatman

Jackson Fastjson 安全漏洞 CVE-2020-24616

最通俗易懂的 Redis 架构模式详解

哈喽沃德先生

redis 架构模式 redis集群 redis哨兵 redis主从

跟随美团技术大牛的脚步,感受虚拟机源码及调优所带来的独特魅力

周老师

Java 编程 程序员 架构 面试

数字货币交易所系统开发|交易所搭建源码

WX13823153201

还不懂JVM的设计原理与实现?赶紧跟着字节大牛“身临其境”

周老师

Java 编程 程序员 架构 面试

深挖 Redis 6.0 源码—— SDS

yanglbme

redis 源码 源码分析

承兑商USDT支付系统平台开发|跑分系统搭建

WX13823153201

Spring 5 中文解析核心篇-IoC容器之基于注解的容器配置

青年IT男

Spring5 Spring Framework

敏捷转型谁先动:老总,项目经理or团队

华为云开发者社区

项目管理 敏捷 敏捷开发 团队 华为云

oeasy教您玩转linux010203显示logo

o

Spring 5 中文解析核心篇-IoC容器之Bean作用域

青年IT男

Spring5 Spring Framework

终端传感了解吗?18个知识点为你扫盲

华为云开发者社区

IoT 信息化 传感器 传输协议 无线传输器

Pod安装神策SDK报错Remote branch v2.1.3 not found in upstream origin

凌宇之蓝

ios 小程序flutter, 跨平台 CocoaPods pod React Native

百度被绿了?

程序员生活志

百度 互联网 头条

Spring 5 中文解析核心篇-IoC容器之依赖关系

青年IT男

Spring5 Spring Framework

在Alibaba广受喜爱的“Java突击宝典”简直太牛了

Java成神之路

Java 阿里巴巴 程序员 面试 架构师

联盟:互联网时代的人才变革

非著名程序员

互联网 个人成长 人才 人才发展 突破圈层,个体崛起

关于MySQL参数,这些你要知道

Simon

MySQL 参数

Spring 5 中文解析核心篇-IoC容器之BeanDefinition继承与容器拓展点

青年IT男

Spring5 Spring Framework

Spring 5 中文解析核心篇-IoC容器之类路径扫描和组件管理

青年IT男

Spring5 Spring Framework

Java集合源码学习笔记,Java程序员面试必备基础知识

Java成神之路

Java 程序员 面试 集合 架构师

欢迎观看 AzureShow

亮小猪

云计算 开源 技术社区 azure 视频

面试官问:Spring Boot中Tomcat是怎么启动的

Java小咖秀

tomcat 面试 springboot

Spring 5 中文解析核心篇-IoC容器之自定义Bean性质

青年IT男

Spring5 Spring Framework

区块链usdt支付平台搭建|OTC承兑跑分系统开发

WX13823153201

区块链usdt支付平台搭建

《我要进大厂》之mysql夺命连环13问

艾小仙

Java MySQL 面试题 Java 分布式 大厂

打造 VUCA 时代的 10 倍速 IT 团队

打造 VUCA 时代的 10 倍速 IT 团队

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