高性能网站建设经验总结

建站运维 0 评论

在网站建设和seo优化中提高网站的访问速度是一个站点的首先要考虑的问题。高性能网站建设的大致方向就是从缓存、压缩、减少请求等方面进行处理,雅虎的工程师们就总结出“网站性能黄金法则”:“只有10%~20%的最终用户响应时间花在了下载HTML文档上,其余的80%~90%时间花在了下载页面中的所有组件上”。下面通过十四个方面来聊聊高性能网站建设的一些经验。

高性能网站建设经验总结
高性能网站建设

一、减少HTTP请求,图片地图、CSS Sprites、内联图片和脚本、脚本和样式表的合并。

图片地图,Css Sprite,内联图片和脚本,样式表的合并。运用这些技术,估计页面响应时间会减少到50%左右。

图片地图在淘宝中很是蛮常见的,就是用一个图来挂N个连接地址,通过分析点击图片的坐标和位置来产生连接,这样,会减少服务器的连接。

图片地图有很多难点,不太容易控制,但是,如果你正在导航栏或者其他超链接中使用多个图片,将他们转换为图片地图是加速页面的最简单的方式。

Css Srprites是利用css来控制的,主要是控制背景图片的坐标来控制图片的显示,可以将毫无关联的图片集成到一张图片中。当然,合成图片有很大的难度,需要专业人员做,还有,制作成本可能较高。但是可以考虑在那些不经常变动的地方使用它,例如,如果需要在页面中为背景,按钮,导航栏,连接等提供大量图片,css sprites绝对是一种优秀的解决方案,干净的标签,很少的图片和很短的相应时间。

在站点发布时,将多个js文件,和多个css文件合并成单个或者尽可能的合并,是有好处的。

二、使用CDN(内容发布网络)。

一组分布在多个不同地理位置的web服务器,用于更有效的向用户发布内容。除了缩短响应时间之外,cdn还可以带来其他优势。他们的服务包括备份,扩展存储能力和进行缓存。CDN还有助于缓和web流量峰值压力。

三、添加Expires头,修订文件名,比如为经常需要改变的文件添加版本号等

长久的Exxpires头最常用于图片,但应该将其用在所有组件上,包括脚本,样式表和flash。很多顶级网站现在还没做到这一点。

web服务器使用Expires头来告诉web客户端它可以使用一个组件的当前副本,知道指定的时间位置。

对于Expires头来说,它使用了一个特定的时间,它要求服务器和客户端的时钟严格同步。

换种方式,Cache-Control使用max-age指令指定组件被缓存多久。

跨浏览器改善缓存的最佳解决方案就是使用ExpiresDefault设置的Expires头。

解决获取最新版本的文档的最有效方式是:修改其所有连接,这样,全心的请求将从原始服务器下载最新的内容。

四、压缩组件,即减少HTTP相应的大小来减小响应时间。

web客户端可以通过HTTP请求中的Accept-Encoding头来标识对压缩的支持。

web服务器通过响应中的Content-Encoding头来通知Web客户端。

gzip是最流行和最有效的压缩方式。在使用压缩组件时,比较常见的压缩有:HTML文档压缩,脚本和样式表压缩。

五、将样式表放在顶部,减少“白屏(Blank White Screen)”现象,尽量使用LINK标签将样式表放在文档HEAD中。

将样式表放在文档底部会导致在浏览器中组织内容逐步呈现。为避免当样式变化时重绘页面中的元素,浏览器会阻塞内容逐步呈现。

这个规则对于加载页面所需要的时间没有太多影响,它影响更多的是浏览器对这些组件顺序的反映。

在IE中,将样式表放在文档底部会导致摆平问题。

如果样式表仍在加载,构建呈现树就是一种浪费,因为在所有样式表加载并解析完毕之前,无需绘制任何东西,否则,在其准备好之前显示内容会遇到FOUC(无样式内容的闪烁)问题。

六、将脚本放在底部,并行下载,脚本阻塞。

HTTP1.1规范建议浏览器从每个主机名并行的下载两个组件。

如果将脚本放在页面顶部,正如通常的情况那样,页面中的所有东西都位于脚本之后,整个页面的呈现和下载都会被阻塞,知道脚本加载完毕。放置脚本的最好地方就是页面的底部,这不会阻止页面内容的呈现,而且页面中的可视组件可以今早下载。

高性能网站建设技巧
高性能网站建设技巧

七、避免CSS表达式,使用“一次性表达式”,事件处理器。

css表达式是动态设置css属性的一种强大而且又危险的方式。

ie中不支持min-width。

有些规则用于处理页面加载之后的性能问题,这通常是由CSS表达式引起的问题。然而,有些时候,css表达式也会影响页面的加载时间。

八、使用外部JavaScript和CSS,纯粹而言,内联比外联快。加载后下载。

对于内联和外联来说,内联相对是快点的。但是尽管结果如此,现实中还是推荐使用外部文件会产生较快的页面。

如果js和css是外部文件,浏览器就能缓存他们,HTML文档的大小减小,而且不会增加http请求的数量。

如果你的网站的本质上能够为用户带来高完整缓存绿,使用外部文件的收益就越大,如果大不可能产生完整缓存,则内联是更好的选择。外部文件可以极大的提高组件的重用率。

九、减少DNS查找(Reduce DNS lookups),DNS缓存和TTL。

DNS查找可以被缓存起来提高性能。

在用户请求了一个主机名之后,DNS信息会留在操作系统的DNS缓存中,之后对于该主机名的请求将无需进行过多的DNS查找,至少短时间内不需要。

重启浏览器会清空浏览器缓存,但是不会清空DNS Client缓存。

当网络操作中心尝试通过DNS变化来转移流量时。如果一个IP上的流量已经被专一走,但该IP扔在运行,则使用旧的DNS记录的IE用户至少需要30分钟才能更新DNS。访问站点的活跃用户会一直使用旧的ip地址而不会更新DNS,指导发生错误。

当客户端的DNS缓存为空,DNS查找的数量与web页面中惟一主机名的数量相等。减少唯一主机名的数量就可以减少DNS查找的数量。这方面的优秀事例是Google,它的页面只需要一次DNS查找。

十、精简JavaScript。

精简js代码的最流行的工具是JSMin。JSMin的源代码以C,C#,Java,Javascript,Perl,Php,Python和Ruby等语言公开。

内联的js块也应该精简,尽管对于现金的网站这一实践的效果并不很明显。精简css能够带来的节省通常要小于精简js,因为通常css中的注释和空白比js少。

十一、 避免重定向。

重定向用于将用户从一个URL重新路由到另一个URL,重定向有很多种。

重定向会使页面变慢。

重定向是解决很多问题的简单方式,但最好使用其他不会减慢页面加载速度的解决方案。

缺少结尾的斜线:有一种重定向最为浪费、发生的也很频繁的,但Web开发人员通常都没有意识到它。即“缺少结尾的斜线”。如:访问http://xx.com/xxx时,会导致一个301重定向响应,其中包含一个到http://xx.com/xxx/的重定向。当然主机名后缺少结尾斜线是不会发生重定向的,如访问http://baidu.com,但在浏览器中看到的最终URL还是包含结尾斜线的,导致自动产生斜线的原因是,浏览器在进行GET请求时必须指定一些路径,如果没有路径,就会简单的使用文档根(/)。

连接网站,一般是用户从旧的URL转移到新的URL的最简单的方式就是重定向,可以通过Alias、mod_rewrite、DirectorySlash和直接链接代码来避免重定向。

跟踪内部流量,重定向经常用于跟踪用户的流量的流向,另一种方式选择是使用Referer日志来跟踪流量去向,每个HTTP请求都包含一个URL,表明从哪个页面发起的请求,也就是引用方(有的时候没有引用页,如当用户键入URL或只用书签时)。对于内部流量,也就是同一家公司各个网站之间的流量,是值得通过建立Referer日志来避免重定向,以此来节省最终用户相应时间。

十二、移除重复脚本。

虽然脚本可以缓存,当用户重新加载页面时也会产生额外的HTTP请求。在页面中多次包含相同的脚本会使页面变慢。在IE中,如果脚本没有被缓存,或者在重新加载页面时,会产生额外的HTTP请求。

十三、配置ETag,实体标签(Entity Tag)是Web服务器和浏览器用于确认缓存组件的有效性的一种机制。

ETag在HTTP1.1中引入。ETag是唯一标识了一个组件的一个特定版本的字符串。唯一的格式约束是该字符串必须用引号引起来,原始服务器使用ETag相应头来指定组件的ETag。

iis和apache的etag是不一样的。如果etag不匹配,用户丸不会按照etag的设计计划那样接受到更小更快的304响应

十四、使Ajax可缓存。

用户是否需要等待的关键因素在于ajax请求是被动还是主动的。被动请求是为了将来使用预先发起的。

主动请求是基于用户当前的操作而发起的。确保ajax请求遵守性能知道,尤其应具有长久的Expires头。

以上就是总结的高性能网站建设的技巧,网站如果响应速度跟不上,用户在浏览你网站的时候用户体验会很差,试想浏览你的网站半分钟才打开网页内容,客户还会有耐心看你网站的其他内容吗?所以建设高性能网站才是首选!

  • 本文标题:高性能网站建设经验总结
  • 本文地址:https://www.seoserp.cn/html/872.html
  • 本建站运维版权归原创作者所有,与本站立场无关。转载请注明出处。

发表评论

邮箱地址不会被公开。 必填项已用*标注

^