|
引言
不是所有人都能够使用高速 InterNET 连接。即使每个人都能够使用高速网络,也会因为各种各样的原因使您的 Web 应用程序看起来运行缓慢。在这个宽带速度不断提高的时代,您应当关注一下页面加载时间。将珍贵的页面加载时间缩短几秒,将更加珍贵的请求和响应时间缩短几毫秒。您将为访问者创造一种更好的体验。
阅读完本文之后,您将能够较好地了解网页加载时间优化的基本知识。您还能够使用工具和知识更好地识别和判断加载缓慢的页面部分和瓶颈。
先决条件
在理想情况下,您应该安装了 Mozilla Firefox。您还应该大体了解 Web 开发。本文涉及的主题并不复杂,但是如果您了解超文本标记语言(Hypertext Markup Language,HTML)、层叠样式表(Cascading Style Sheet,CSS)以及 ™ 编程语言等主题,那么在学习本文时将更加得心应手。不需要使用集成开发环境(IDE),只需使用您喜爱的编辑器。
您必须在浏览器中启用了 JavaScript。另外,要学习与 Firebug 和 YSlow 相关的内容,您需要安装 Firefox Web 浏览器。
假设您没有宽带
许多人通过某种形式的宽带连接访问 InterNET,这些形式可能是 DSL、网线、光纤或其他方法。但是,无法使用这类技术的用户不得不使用拨号连接。您一定已经忘记拨号上网是什么感觉了,但您可以试着回想一下网页逐行加载时的情形。
幸运的是,这些可怜的人们现在已经能够获得一些帮助。您可以通过缩短加载页面的时间来改善他们的体验。但是,拨号连接并不是降低加载和响应速度的惟一原因。许多 Web 设计人员错误地认为高速 InterNET 连接的到来会使网站性能优化变得没有必要。这种观点是不对的。例如,过去使用桌面软件执行的许多任务现在可以在线执行。在 Web 应用程序中获得像桌面软件那样的高速响应体验非常困难,因此性能优化非常重要。幸运的是,一些工具和最佳实践可用于缩短响应和加载时间,提供更加流畅的体验。
基本工具
对于所有与优化相关的任务,您必须使用工具来诊断瓶颈和识别问题。现在在 Web 开发中使用最广泛的两个工具是 Firebug 和 YSlow,它们都是开源、免费的 Firefox 插件。
Firebug
Firebug(参见 参考资料)是最流行的 Firefox 扩展之一,该应用程序能够使 Web 开发人员的工作更加轻松。它包含许多非常有用的功能,比如:
- JavaScript 调试
- JavaScript 命令行
- 监视 JavaScript 性能和跟踪 XmlHttpRequests
- 登录 Firebug 控制台
- 跟踪
- 检查 HTML 元素和动态编辑 HTML 代码
- 动态编辑 CSS 文档
YSlow
YSlow(参见 参考资料)分析网页,并根据 Yahoo! 起草的高性能网站规则(参见 参考),告诉您网页加载缓慢的原因。YSlow 是一个与 Firebug 集成的 Firefox 插件,因此您需要首先安装 Firebug,然后才能安装和使用 YSlow。
常识:牢记设计规则
令人惊讶的是简单的设计规则通常会被忽视,最终产生未经优化的、下载缓慢的网页。牢记以下规则,页面的加载速度将会更快。
使用良好的结构
可扩展 HTML (XHTML) 具有许多优势,但是其缺点也很明显。XHTML 可能使您的页面更加符合标准,但是它大量使用标记(强制性的 <start> 和 <end> 标记),这意味着浏览器要下载更多代码。所以,事情都有两面性,尝试在您的网页中使用较少的 XHTML 代码,以减小页面大小。
如果您确实不得不使用 XHTML,试着尽可能对它进行优化。例如,删除空格并采用严格的 XHTML 编码实践,提高下载和解析速度。要严格执行 XHTML Strict 规则,向文档中添加以下 doctype 语句:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
检查 cookie 使用情况
cookie 可能是很小的文件,但是浏览器仍然需要下载它们。较大的 cookie 所需的下载时间更长,进而增加了浏览器加载网页的时间。正因为如此,尽可能缩小 cookie 来最小化对浏览器响应时间的影响非常重要。
此外,设置一个较早的 expire 日期或者根本不设置 expire 日期,会缩短响应时间。
不要包含不必要的 JavaScript 代码,尽可能将其外部化
与 cookie 类似,JavaScript 文件的下载也需要时间,这不可避免地会降低整个页面的加载速度。因此,明智地使用 JavaScript(仅在真正必要时才使用)并优化脚本的大小和速度。
缩短 JavaScript 下载时间的另一种方式是使用外部文件,而不是包含脚本内联。这种方法也适用于 CSS,因为浏览器会缓存外部化的文本,而(在 HTML 页面自身中)以内联方式编码的 CSS 或 JavaScript 每次都会随 HTML 一起加载。要通过在 HTML 中引用 CSS 和 JavaScript 代码来外部化它们,可以使用具有以下形式的代码:
<link href="/stylesheets/myStyle.css" media="all" rel="Stylesheet" type="text/css" />
<script src="/Javascripts/myJavascript.js" type="text/Javascript"></script>
尽可能延迟脚本加载
我 在前面 提到过,移除完全不需要的 JavaScript 代码能够加快加载和处理速度。但是如果代码已经非常精简并且必须在页面中包含 JavaScript 代码的话,该怎么办?
在这种情形下,一种提升页面下载速度的潜在方式是将脚本放在页面的底部,使页面加载更迅速。通常,浏览器只能(从同一个域)下载不超过两个并行对象,如果一个对象是一段 JavaScript 代码,那么在该脚本下载完之前,其他页面组件的下载将会暂停。如果将 JavaScript 代码放在页面底部,(在大多数情况下)它将在最后下载,这时所有其他组件都已下载完。
使用 Firebug 扩展跟踪加载缓慢的文件,我敢打赌您的 JavaScript 文件是下载最慢的文件。压缩 JavaScript 文件会有所帮助,但是仅仅这样可能还不够。您可以使用以下代码片段延迟 JavaScript 的加载:
var delay = 5;
setTimeout("heavy();", delay * 1000);
使用 PNG 格式的图像
Graphic Interchange Format (GIF) 和 Joint Photographic Experts Group (JPEG) 图像格式都已过时了:Portable NETwork Graphic (PNG) 是未来流行的格式。当然,您可以说 GIF 和 JPEG 已经消亡,或者 PNG 没有任何缺陷,但是所有事物都有各自的优缺点,PNG 以最佳的文件大小提供了出色的质量。因此,如果进行选择的话,应该尽可能使用 PNG 图像。
保持 Ajax 调用简短、准确
当统称为 Asynchronous JavaScript + XML (Ajax) 的技术在两年前出现时,这些技术为处理页面请求和响应提供了一种革命性方法。然而,拨号用户可能从来没机会体验其真正的优势,因为在许多情形下,Ajax 需要在浏览器与服务器之间大量通信。因此,如果您能够保持 Ajax 调用简短和准确,可以避免用户花费无止尽的时间来等待元素刷新或响应。
进行一次较大的 Ajax 调用并在本地处理客户机数据
如果不能进行简短的 Ajax 调用,或者如果这些调用不能提供期望的结果,可以考虑一种替代方法:进行一次大的 Ajax 调用来获取所需的一切内容,然后让客户机在本地处理数据。通过这种方式,客户机只需等待一次(获取传入的数据),但是在此之后(当浏览器与服务器之间没有必要通信时),处理速度将更快。当然,还有大量 Ajax 优化技术,本教程无法一一列出。如果想要了解关于 Ajax 的更多信息,请查看 参考资料。
在沙箱中测试代码
还有一个经常被遗忘的常用技巧。尽管清醒的 Web 开发人员通常会在启动应用程序之前对其进行测试,但是有时候测试会使他们不那么重视维护任务,或者新功能添加得太快,并且未经过充分考虑或测试。结果,余下的脚本减缓了应用程序的速度。
如果您添加一项新功能,可以首先在沙箱里(完全脱离了应用程序的其余部分)进行测试,查看它作为单个函数的行为。通过这种方式,您可以反复检查,并分析性能和响应时间,无需考虑 Web 应用程序的其余部分。然后,当新功能的行为符合预期时,可以将其引入到应用程序的其余部分中,运行其他测试,保证功能本身的行为符合预期。
分析站点代码
在许多场景中,自我反省是一个不错的建议。幸运的是,在开发过程中,我们可以使用工具来帮助反省,并尽可能客观地进行实践。像 JSLint(参见 参考资源)这样的工具的价值是无法衡量的,尽管其站点宣称它 “可能令您备受挫折”,因为它向您提供了所有的潜在代码缺陷,这些缺陷不但使调试更加困难,而且可能导致更长的响应时间。
使用 JSLint 检查 JavaScript 代码中的错误或糟糕的编码实践
您不需要像完美主义者那样追求完美无缺的 JavaScript 代码。但是,许多开发人员没有认真对待代码分析,通常在开发过程中跳过了这个步骤。不幸的是,错误和糟糕的编码实践不仅不太专业,而且可能减缓应用程序的速度。当浏览器忙于应付错误和糟糕的编码实践时,加载不仅需要更多时间,还会导致难以调试的错误。
因此,如果想要获得良好的代码,可以考虑使用代码分析工具。有许多不同的工具可供使用,但是最适合 JavaScript 语言的工具非 JavaScript Lint 莫属,它也叫做 JSLint(参见 参考资料)。也可以使用 Firebug,但是 JSLint 更加正式,它包含在 YSlow 中。
检查孤立的文件和丢失的图像
检查孤立的文件和丢失的图像是一种明智之举。大部分 Web 开发人员都会检查错误的文件引用,但是这里仍然需要说明一下。丢失的文件容易引起各种问题,因为它们会导致 “The image/page cannot be displayed” 之类的错误消息。但是在网页速度优化方面,它们具有更大的缺陷:当浏览器寻找丢失的或孤立的文件时,它会消耗资源,这不可避免地会导致页面处理速度变慢。因此,请检查孤立或丢失的文件,包括拼写错误的文件名。
使用 YSlow 分析网页
YSlow 是一个相对较小但非常有用的 Firefox 扩展。当启动 YSlow 时,该扩展在浏览器的下半部分中打开,如下所示。
图 显示了 Performance 视图,可以在其中看到 YSlow 如何评估您的网页的性能,还能够看到该扩展检测到的问题。单击列表中的一个链接将打开一个页面,其中解释了相应的错误。如果存在可以改进的页面组件,YSlow 会给出改进建议。
在 Inspect 视图中,如 下面所示,您可以逐一分析元素来剖析页面。Inspect 视图的一个最有用的功能是,当您在页面上移动鼠标指针时,它会自动刷新,因此您无需通过滚动代码内容来查找需要检查的行。
从 Stats 视图的名称可以猜测到,它(如 下图 所示)显示与当前页面有关的统计数据。这些数据包括空的和主要的缓存和 cookie。
Components 视图(如 图 7 所示)列出了当前页面上的组件。显示的与每个组件有关的数据包括文件类型和路径、页面过期时间以及 HTTP 响应报头。单击一个组件可以将其打开,以供查看。单击一个列标题可以按升序或降序对表进行排序。
YSlow 是一个较小的、有用的扩展,可以在提高页面加载速度方面为您提供许多帮助。如果您以前未使用过它,那么现在应该使用了。
NET技术:20 种提升网页速度的技巧,转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。