阳子SEO博客

如何优化网站性能

首先,前端优化

网站性能优化是一个综合性的课题,它涉及到服务器的配置和网站的前后台程序。我只想分享我从实际经验中尝试过的网站性能优化方法。我之所以将web2.0放在标题中,是因为本文更关注中小型网站的性能优化,并且我使用的系统也是web2.0的典型LAMP架构

首先,让我们谈谈前端的优化。用户访问网页的80%的等待时间发生在浏览器的前端,尤其是下载网页和网页中的各种元素(图片,CSS,Javascript,flash…,)。因此,在许多情况下,与花费大量时间在复杂的程序改进上相比,前端优化通常可以起到事半功倍的作用。雅虎最近向第三方披露了其内部性能测试工具YSOW,并公布了13条著名的网站性能优化规则。建议您下载并安装YSOW作为评估网站优化效果的工具。下面我选择一个最有价值的来详细解释优化方法:

对于第一次访问您的网站并且没有将您的网站内容缓存在浏览器缓存中的用户,我们可以采取的措施包括:

1)减少页面访问产生的http连接数

对于第一次访问您的网站的用户来说,页面生成的http连接数是影响性能的关键瓶颈。

对策:

-保持页面设计尽可能简单,尽量减少图片的使用,并通过放弃一些不必要的页面效果来减少javascript的使用。

-使用一些优化技术,例如使用图片的背景位移来减少图片的数量;图像地图技术;使用内嵌图像将css图片绑定到网页中。

-尝试合并js和css文件,以减少独立文件的数量。

2)使用gzip压缩网页内容

使用gzip压缩网页中的静态内容可以大大减少用户访问网页的等待时间(据说可以达到60%)。主流网络服务器支持或提供gzip压缩。如果使用apache服务器,只需在配置文件中打开mod_gzip(apache1.x)或mod_deflate(apache2.x)。对于所有静态页面,使用gzip压缩可以显著提高服务器效率并减少带宽支出。请注意图片内容本身已经是压缩格式,所以不要再次压缩它是很重要的。

3)将CSS放在页面顶部,将JS文件放在页面底部

CSS的引用应该放在html的头部,JS文件的引用应该尽可能放在页面底部的标签后面。主要思想是让核心页面内容尽快显示出来。但是,应该注意的是,在一些广泛使用js的页面的底部可能会有一些js文件,这可能会导致一些意想不到的问题,所以可以根据实际情况适当地应用它。

4)最小化JS文件的内容

具体来说,一些javascript压缩工具用于压缩js脚本,删除空白字符和注释,并最小化变量名。在gzip压缩的基础上,js内容压缩可以提高5%的性能。

5)尽量减少外部脚本的使用,减少域名系统查询时间

不要在网页中引用太多的外部脚本。首先,dns解析过程需要20-120毫秒;其次,如果页面中引用了太多的外部文件(如各种广告、联盟和其他代码),您的网站可能会因为外部文件的响应速度而被拖垮。如果有必要,试着把这些脚本放在页脚。然而,应该提到的是,浏览器通常只能并行处理同一域名下的两个请求,而具有不同子域的域名不受此限制。因此,将该网站的静态内容(css、js)放在其他子域(如static.xxx.com)下将有助于提高浏览器并行下载网络内容的能力。

对于经常访问您网站的人来说,主要的优化思想是尽可能多地使用用户浏览器的缓存来减少服务器开销。

1)在标题中添加过期时间(过期标题)

为标题中的静态内容添加更长的过期时间,以便用户将来可以只访问缓存中的文件,而无需与服务器进行任何交互。然而,这样做有一些问题。当图片、CSS和js文件被更新时,如果用户不刷新他们的浏览器,他们就不能得到这个更新。这样,当我们修改图片、css和js文件时,我们必须重命名它们,以确保用户可以访问最新的内容。这可能会给开发带来很多麻烦,因为这些文件可能会被站点中的许多文件引用。Flickr的解决方案是通过url重写使不同版本号的URL实际指向同一个文件,这是一种聪明的方法,因为URL级别的操作效率非常高,可以为开发过程提供很多便利。

为了理解为什么这样做,有必要理解浏览器在访问网址时是如何工作的:

A.当第一次访问url时,用户从服务器部分获得页面内容,并将相关文件(图像、CSS、js,)保存在缓存中,并且还在文件头中保存相关信息,如过期时间、最后修改时间、ETags等。

B、当用户重复访问该网址时,浏览器首先检查缓存中是否有同名文件,如果有,则检查该文件的到期时间;如果文件未过期,将直接从缓存中读取文件,不再访问服务器。

C.如果缓存中文件的过期时间不存在或已经超过,浏览器将访问服务器获取文件的头信息,检查上次修改的和ETags信息,如果发现上次访问后本地缓存中的文件没有被修改,则使用本地缓存中的文件;如果已被修改,从服务器获取最新版本。

根据我的经验,如果可能的话,试着遵循这个原则,给静态文件增加到期时间,这可以大大减少用户对服务器资源的重复访问。

2)将css和js文件放在独立的外部文件中以供参考

将css和js文件放在单独的文件中,这样它们将被单独缓存,并且在访问其他页面时可以直接从浏览器的缓存中读取。一些网站的主页可能是个例外。这些主页的浏览量可能不大,但它们是用户访问网站的第一印象,也是引导用户进入其他页面的起点。或者这些页面本身使用了大量的ajax本地刷新和技术,css和js文件可以直接写在页面中。

3)删除重复的脚本

在IE中,包含重复的js脚本会导致浏览器缓存未被使用。仔细检查你的程序并去掉重复的引用脚本应该不难。

4)避免重定向

除了标题中的人工重定向之外,网页重定向经常会在无意中发生,并且重定向的内容不会使用浏览器缓存。例如,当用户访问时,服务器将转到/通过301,并在其后添加一个“/”。如果服务器的配置不好,也会给服务器带来额外的负担。通过配置apache的别名或使用mod_rewrite模块可以避免不必要的重定向。

其他,如使用CDN分发机制,避免CSS表达式,避免ETags等。并不常用,因此在此不再重复。

经过以上优化,您可以尝试用yslow测试网页的性能得分,一般可以达到70分以上。

当然,除了优化浏览器前端和静态内容,还有优化程序脚本、服务器、数据库和负载。这些更深层的优化方法对技术有更高的要求。本文的后半部分将关注后端的优化。

第二,后端优化

前端优化可以避免我们造成的服务器和带宽资源的不必要的浪费,但是随着网站访问量的增加,所有的问题都不能仅仅通过前端优化来解决。后端软件处理并行请求的能力、程序运行的效率、硬件性能和系统的可扩展性将成为影响网站性能和稳定性的关键瓶颈。优化系统和程序的性能可以从以下几个方面开始:

1)优化1)apache、mysql和其他软件的配置

虽然apache和mysql使用的默认设置足以使您的网站在安装后运行,但您仍然可以通过调整mysql和apache的一些系统参数来追求更高的效率和稳定性。在这个领域有很多专业的文章和论坛(比如:),如果你想掌握它们,你需要进行深入的研究和实践,所以我们不会在这里集中讨论。

2)应用环境的加速

这里,我只以我最常用的php开发环境为例。有一些工具和软件可以通过优化php运行环境来加快速度。其基本原理是在不改变任何代码的情况下预编译和缓存PHP代码,因此相对简单,可以将PHP的运行效率提高50%以上。常用的php加速工具有:APC。套餐=APC)、Turck MMCache()、php accelebrator()和Zend性能套件,收费

3)将静态内容与动态内容分开

Apache是一个功能齐全但巨大的web服务器,其资源占用基本上与同时运行的进程数量成正比,这消耗了大量的服务器内存,并且在处理并行任务时具有平均效率。在某些情况下,我们可以使用轻量级的web服务器来托管静态图片、样式表和javascript文件,这可以大大提高静态文件的处理速度并减少内存占用。我使用的网络服务器是俄罗斯的nginx,其他选项包括轻量级和thttpd。

4)基于反向代理的前端访问负载均衡

当前端服务器无法应对用户访问时,通过前端服务器实现网络访问的负载均衡是最快、最可行的方案。基于反向代理的负载均衡可以通过apache的mod_proxy来实现。建议使用nginx作为代理服务器,处理速度比apache快。

5)应用缓存技术提高数据库效率、文件缓存和分布式缓存

数据库访问处理并发访问的能力是许多网站应用程序的关键瓶颈。在考虑使用主从结构和多场来构建服务器集群之前,我们应该首先确保数据库查询的缓存得到充分利用。一些数据库类型(如mysql的innoDB)内置了对缓存的支持。此外,可以使用程序方法通过文件或内存来缓存常见查询。例如,在php中使用ob_start和文件读写函数可以方便地实现文件缓存。如果您有多个服务器,您可以通过memcache技术通过分布式共享内存缓存数据库查询,这不仅高效而且可扩展。memcache技术已经在livejournal和Craigslist.org等知名网站进行了测试。

6)检查服务器的运行状态,找出影响性能的瓶颈

没有办法一劳永逸地优化系统。有必要检测服务器的运行状态,以便及时发现影响性能的瓶颈和可能存在的潜在问题,因为网站的性能总是取决于桶中的缺点。一些脚本可以用来检测web服务的运行,一些开源软件也提供了很好的功能

7)良好的扩展架构是稳定性和性能的基础

一些技巧和窍门可以帮助你度过眼前的困难,但是如果你想让网站有能力应对大规模的访问,你需要从系统架构上做彻底的规划,以便让许多前辈无私地构建它们

cache
Processed in 0.010664 Second.