Yahoo对Web前端优化的14条经验拔萃
规则10——精简JavaScript和CSS(Minify JavaScript and CSS) 混淆是可以应用在源代码上的另一种优化方式。相比较于精简,混淆更加复杂,因此更容易产生bug。混淆可以更大程度上压缩源代码,但是也存在着一定的风险。 除了外部JavaScript外,内联在<script>和<style>块中的源代码也需要被精简。即使使用了gzip来压缩JavaScript和CSS,使用精简能够将代码大小再减少5%或者更多。 规则11——避免重定向(Avoid Redirects) 复制代码 代码如下:
浏览器会自动将用户带到Location字段给出的URL。重定向所必需的所有信息都包含在这个头中,响应体通常是空的。不管叫什么名字,301或者302响应在实际中都不会被缓存,除非有附加的头(如Expires或Cache-Control等)要求它这么做。meta refresh标签和JavaScript也可以用于重定向,但是最好的技术是使用标准的3xx状态码,以保证后退按钮能够正常工作。 需要我们记住的是重定向会使页面变慢。在用户和HTML文档间插入一个重定向后,在此HTML文档到达之前页面上不会描绘任何东西,任何组件也不会被下载。 有一种重定向最为浪费,发生的也很频繁,但是Web开发人员通常都没有意识到它,它发生在URL的结尾必须出现斜线(/)而没有出现的情形。例如访问地址将导致一个301响应包含重定向至。当主机名后缺少结尾斜线时不会发生重定向。在Apache中,我们可以通过Alias指令或者mod_rewrite模块或者DirectorySlash指令来处理缺少结尾斜线时的重定向问题。 从一个旧的站点链接到新的站点是使用重定向的另一种常见场景。其他形式还包括将一个网站的不同部分连接起来,以及基于一些条件(浏览器类型、用户帐户类型等)来引导用户。使用重定向来连接两个网站很简单而且只需要很少的额外代码。但是,虽然重定向降低了开发的复杂性,也损害了用户体验,通常可以进行其他的选择:如果两个代码的路径在同一台服务器上,可以使用Alias和mod_rewrite;如果域名由于重定向发生改变,可以使用一个CNAME(一条DNS记录,用于创建一个域名指向另一个域名的别名)让两个主机名指向相同的服务器,然后使用Alias和mod_rewrite。 规则12——移除重复脚本(Remove Duplicate Scripts) 当重复脚本的现象发生时,将产生不必要的HTTP请求和浪费执行JavaScript的时间。不必要的HTTP请求会发生在IE中,而不会发生在Firefox中。在IE中,如果脚本被包含两次且没有被缓存,浏览器会在页面加载期间产生两个HTTP请求;即使脚本可以缓存,当用户重新加载页面时也会产生额外的HTTP请求。对JavaScript进行的多余的执行从而浪费时间的现象在IE和Firefox中都存在,与脚本是否被缓存无关。 避免意外包含同一脚本两次的一种方法是在你的模块系统中实现一个脚本管理模块。包含脚本的典型方式是在HTML页面中使用SCRIPT标签:
JavaScript Code复制内容到剪贴板
<script type=”text/javascript” src=”menu_1.0.17.js”></script> 另一种选择是在PHP中创建一个函数:
PHP Code复制内容到剪贴板
<?php insertScript(“menu.js”) ?> 为了防止统一个脚本被重复添加多次,insertScript函数需要添加处理脚本的依赖性和版本的功能。 规则13——配置Etag(Configure ETags) 复制代码 代码如下:
此后,如果浏览器必须验证一个组件,它会使用If-None-Match头将ETag传回原始服务器。如果ETag是匹配的,就会返回304状态码,在此例中使响应减少12195字节。 复制代码 代码如下:
ETag的问题在于,通常使用组件的某些属性来构造它,这些属性对于特定的、寄宿了网站的服务器来说是唯一的。当浏览器从一台服务器上获取了原始组件之后又尝试向另一台服务器来验证组件时,ETag是不匹配的。这种情况对于使用服务器集群来处理请求的网站来说是很常见的一种情况。默认情况下,Apache和IIS向ETag中嵌入的数据都会大大降低有效性验证的成功率。 Apache1.3和2.x的ETag格式是inode-size-timestamp。文件系统使用inode来存储诸如文件类型、所有者、组和访问模式等信息。尽管在多台服务器上一个给定的文件可能位于相同的目录、具有相同的文件大小、权限、时间戳等,从一台服务器到另一台服务器,器inode仍然是不同的。 (编辑:焦作站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |