如何进行网站性能优化
一、前端优化
网站性能优化是一个很综合的话题,涉及到服务器的配置和网站前后端程序等各个方面,我只是从实际经历出发,分享一下自己所尝试过的网站性能优化方法。之所以在标题上挂一个web20,是因为本文更偏重于中小网站的性能优化,我所使用的系统也是典型web20的LAMP架构。
首先讲讲前端的优化,用户访问网页的等待时间,有80%是发生在浏览器前端,特别是页面和页面中各种元素(、CSS、Javascript、 flash…)的下载之上。因此在很多情况下,相对于把大量的时间花在艰苦而繁杂的程序改进上,前端的优化往往能起到事半功倍的作用。雅虎最近将内部使用的性能测试工具yslow向第三方公开,并发布了著名的网站性能优化的十三条规则,建议你下载并安装yslow,并作为测评网站优化效果的工具。下面我挑其中特别有价值的具体说明一下优化的方法:
对于第一次访问您网站,尚未在浏览器cache中缓存您网站内容的用户,我们可以做的事情包括:
1)减少一个页面访问所产生的http连接次数
对于第一次访问你网站的用户,页面所产生的http连接次数是影响性能的一个关键瓶颈。
对策:
- 尽量简洁的页面设计,最大程度减少的使用,通过放弃一些不必要的页面特效来减少javascript的使用。
- 使用一些优化技巧,比如利用的背景位移减少的个数;image map技术;使用Inline images将css捆绑到网页中。
- 尽量合并js和css文件,减少独立文件个数。
2) 使用gzip压缩网页内容
使用gzip来压缩网页中的静态内容,能够显著减少用户访问网页时的等待时间(据说可达到60%)。主流的web服务器都支持或提供gzip压缩,如果使用apache服务器,只需要在配置文件中开启 mod_gzip(apache1x)或mod_deflate(apache2x)即可。凡是静态的页面,使用gzip压缩都能够显著提高服务器效率并减少带宽支出,注意内容本身已经是压缩格式了,务必不要再进行压缩。
3)将CSS放在页面顶端,JS文件放在页面底端
CSS的引用要放在html的头部header中,JS文件引用尽量放在页面底端标签的后面,主要的思路是让核心的页面内容尽早显示出来。不过要注意,一些大量使用js的页面,可能有一些js文件放在底端会引起一些难以预料的问题,根据实际情况适当运用即可。
4)使JS文件内容最小化
具体来说就是使用一些javascript压缩工具对js脚本进行压缩,去除其中的空白字符、注释,最小化变量名等。在使用gzip压缩的基础上,对js内容的压缩能够将性能再提高5%。
5)尽量减少外部脚本的使用,减少DNS查询时间
不要在网页中引用太多的外部脚本,首先,一次dns的解析过程会消耗20-120毫秒的时间;其次,如果在页面中引用太多的外部文件(如各种广告、联盟等代码),可能会因为外部文件的响应速度而将你的网站拖得很慢。如果不得不用,那么就尽量将这些脚本放在页脚吧。不过有一点需要提及,就是浏览器一般只能并行处理同一域名下的两个请求,而对于不同子的域名则不受此限制,因此适当将本站静态内容(css,js)放在其他的子域名下(如 staticxxxcom)会有利于提高浏览器并行下载网页内容的能力。
对于您网站的经常性访问用户,主要的优化思路就是最大限度利用用户浏览器的cache来减少服务器的开销。
1)在header中添加过期时间(Expires Header)
在header中给静态内容添加一个较长的过期时间,这样可以使用户今后访问只读取缓存中的文件,而不会与服务器产生任何的交互。不过这样做也存在一些问题,当、CSS和js文件更新时,用户如果不刷新浏览器,就无法获得此更新。这样,我们在对、css和js文件修改时,必须要进行重命名,才能保证用户访问到最新的内容。这可能会给开发造成不小的麻烦,因为这些文件可能被站点中的许多文件所引用。flickr提出的解决办法是通过url rewrite使不同版本号的URL事实上指向同一个文件,这是一个聪明的办法,因为url级别的操作效率是很高的,可以给开发过程提供不少便利。
要理解为什么这样做,必须要了解浏览器访问url时的工作机制:
a 第一次访问url时,用户从服务器段获取页面内容,并把相关的文件(images,css,js…)放在高速缓存中,也会把文件头中的expired time,last modified, ETags等相关信息也一同保留下来。
b 用户重复访问url时,浏览器首先看高速缓存中是否有本站同名的文件,如果有,则检查文件的过期时间;如果尚未过期,则直接从缓存中读取文件,不再访问服务器。
c 如果缓存中文件的过期时间不存在或已超出,则浏览器会访问服务器获取文件的头信息,检查last modifed和ETags等信息,如果发现本地缓存中的文件在上次访问后没被修改,则使用本地缓存中的文件;如果修改过,则从服务器上获取最新版本。
我的经验,如果可能,尽量遵循此原则给静态文件添加过期时间,这样可以大幅度减少用户对服务器资源的重复访问。
2)将css和js文件放在独立外部文件中引用
将css和js文件放在独立文件中,这样它们会被单独缓存起来,在访问其他页面时可以从浏览器的高速缓存中直接读取。一些网站的首页可能是例外的,这些首页的自身浏览可能并不大,但却是用户访问网站的第一印象以及导向到其他页面的起点,也可能这些页面本身使用了大量的ajax局部刷新及技术,这时可以将 css和js文件直接写在页面中。
3)去掉重复的脚本
在IE中,包含重复的js脚本会导致浏览器的缓存不被使用,仔细检查一下你的程序,去掉重复引用的脚本应该不是一件很难的事情。
4)避免重定向的发生
除了在header中人为的重定向之外,网页重定向常在不经意间发生,被重定向的内容将不会使用浏览器的缓存。比如用户在访问,服务器会通过301转向到/,在后面加了一个“/”。如果服务器的配置不好,这也会给服务器带来额外的负担。通过配置apache的 alias或使用mod_rewrite模块等方法,可以避免不必要的重定向。
还有一些,比如使用CDN分发机制、避免CSS表达式等、避免使用ETags等,因为不太常用,这里就不再赘述了。
做完了上述的优化,可以试着用yslow测试一下网页的性能评分,一般都可以达到70分以上了。
当然,除了浏览器前端和静态内容的优化之外,还有针对程序脚本、服务器、数据库、负载的优化,这些更深层次的优化方法对技术有更高的要求。本文的后半部分将重点探讨后端的优化。
二、后端优化
上次写完web20网站前端优化篇之后,一直想写写后端优化的方法,今天终于有时间将思路整理了出来。
前端优化可以避免我们造成无谓的服务器和带宽资源浪费,但随着网站访问量的增加,仅靠前端优化已经不能解决所有问题了,后端软件处理并行请求的能力、程序运 行的效率、硬件性能以及系统的可扩展性,将成为影响网站性能和稳定的关键瓶颈所在。优化系统和程序的性能可以从以下的方面来入手:
1)apache、mysql等软件的配置的优化
尽管apache和mysql等软件在安装后使用的默认设置足以使你的网站运行起来,但是通过调整mysql和apache的一些系统参数,还是可以追求更高的效率和稳定性。这个领域中有很多专业的文章和论坛(比如: ),要想掌握也需要进行深入的研究和实践,这里就不重点讨论了。
2)应用程序环境加速
这里仅以我最常应用的php开发环境为例,有一些工具软件可以通过优化PHP运行环境来达到提速的目的,其基本原理大致是将PHP代码预编译并缓存起来,而不需要改变任何代码,所以比较简单,可以将php的运行效率提升50%以上。比较常用的php加速工具有:APC( http: //peclphpnet/package-infophppackage=APC)、Turck MMCache( )、php accelebrator(),还有收费的Zend Performance Suite
3)将静态内容和动态内容分开处理
apache是一个功能完善但比较庞大的web server,它的资源占用基本上和同时运行的进程数呈正比,对服务器内存的消耗比较大,处理并行任务的效率也一般。在一些情况下,我们可以用比较轻量级的web server来host静态的、样式表和javascript文件,这样可以大大提升静态文件的处理速度,还可以减少对内存占用。我使用的web server是来自俄罗斯的nginx,其他选择方案还包括lighttpd和thttpd等。
4)基于反向代理的前端访问负载均衡
当一台前端服务器不足以应付用户访问时,通过前端机实现web访问的负载均衡是最快速可行的方案。通过apache的mod_proxy可以实现基于反向代理的负载均衡,这里推荐使用nginx做代理服务器,处理速度较apache更快一些。
5)应用缓存技术提高数据库效能,文件缓存和分布式缓存
数据库访问处理并发访问的能力是很多网站应用的关键瓶颈,在想到使用主从结构和多farm的方式构建服务器集群之前,首先应该确保充分使用了数据库查询的缓存。一些数据库类型(如mysql的innoDB)自身内置对缓存的支持,此外,还可以利用程序方法将常用的查询通过文件或内存缓存起来。比如通过 php中的ob_start和文件读写函数可以很方便的实现文件形式的缓存,而如果你拥有多台服务器,可以通过memcache技术通过分布式共享内存来对数据库查询进行缓存,不仅效率高而且扩展性好,memcache技术在livejournal和Craigslistorg等知名网站应用中都得到了检验。
6)服务器运行状态的检测,找到影响性能的瓶颈所在
系统优化没有一劳永逸的方法,需要通过检测服务器的运行状态来及时发现影响性能的瓶颈,以及可能存在的潜在问题,因为网站的性能,永远取决于木桶中的短板。可以编写一些脚本来检测web服务的运行,也有一些开源的软件也提供了很好的功能
7)良好的扩展架构是稳定和性能的基础
一些技巧和窍门可以帮你度过眼前的难关,但要想使网站具备应付大规模访问的能力,则需要从系统架构上进行彻底的规划,好在很多前人无私的把他们架构
网站的经验分享给我们,使我们可以少走甚多弯路。我最近读到的两篇有启发的文章:
- 从LiveJournal后台发展看大规模网站性能优化方法
- Myspace的六次重构
最后不得不提到程序编码和数据库结构对性能的影响,一系列糟糕的循环语句,一个不合理的查询语句、一张设计不佳的数据表或索引表,都足以会使应用程序运行的速度成倍的降低。培养全局思考的能力,养成良好的编程习惯,并对数据库运行机制有所了解,是提高编程质量的基础。
我总结了一些切实可行的方法,做网站优化时时,以下的方法可以令你的网页速度大大提高。
一、记得帮页面减肥
我们浏览网页实际上是将虚拟主机中的网页内容下载到本地硬盘,再用浏览器解释查看的。下载网页的快慢在显示速度上占了很大比重,所以网页本身所占的空间越小,那么浏览速度就会越快。这就要求在做网页的时候遵循一切从简的原则,如:不要使用太大的Flash动画、等资源。干净、简洁的页面会给人一种思路明朗的感觉。
二、如没必要,尽量使用静态HTML页面
众所周知,ASP、PHP、JSP等程序实现了网页信息的动态交互,运行起来的确非常方便,因为它们的数据交互性好,能很方便地存取、更改数据库的内 容,使网站“动”起来,如:论坛、留言板等。但是这类程序必须先由服务器执行处理后,生成HTML页面,然后再“送”往客户端浏览,这就不得不耗费一定的服务器资源。如果在虚拟主机上过多地使用这类程序,网页显示速度肯定会慢,所以没有必要,请尽量使用静态的HTML页面。
三、不要将整个页面内容塞到一个Table中
这是网页设计的问题了,很多站长为了追求页面统一对齐,将整个页面的内容都塞进了一个Table(表格)里,然后再由单元格td来划分各个“块”的布 局,这种网站的显示速度是绝对慢的。因为Table要等里面所有的内容都加载完毕后才显示出来的,如果某些内容无法访问,就会拖延整个页面的访问速度。正确的做法是:将内容分割到几个具有相同格局的Table中去,不要全都塞到一个Table里。
四、将ASP、ASPX、PHP等文件的访问改为.js引用
这在ASP、ASPX、PHP等程序设计时应该注意的,如果你要在静态的HTML页面里嵌入动态的数据,而这些动态的数据是由ASP、PHP等程序来 提供的话,会使用以下的语句引用:,这样的话,每次有一个人访问你的网站,服务器就要执行并处理一次tongjiasp文件,从数据库抽取相应的数据, 再输出给网页显示,如果有几万个人同时访问,就要执行几万次,后果就可想而知。建议在这些程序中将数据动态生成到一个1js文件中去,然后在首页通过 src="http://wwwxxxxcom/1js"> / > 这样的代码来引用该1js文件。这样,数据显示的任务就交给客户端的浏览器去做,不会耗费服务器的资源,显示速度自然就很快。
五、讲究网站计数器代码放置的技巧
在网页里放置计数器可以统计网站的访问流量,为站长和广告商家提供访问依据,但是,不管功能有多强大的网站统计系统,都会有出故障的时候。如果直接把 统计代码放到页面内容的前面,或者放在一个Table或者div标签里,那么在计数器不能访问的时候,你的页面上那个Table或者div就会产生几十秒 钟的延迟,导致页面很长时间才能访问。所以,要提高网站的速度,就要讲究统计代码放置的位置,正确的方法是:把统计代码放到页面的最下面,并且不要和页面 内容同在一个Table或者div标签里。可以在页面代码的最下方直接放置统计代码,或者在最下方单独做一个Table或者div来放置计数器。这样,在计数器不能访问的时候,你的网站速度也不会受到丝毫影响。
六、友情链接的学问
网站之间互相做链接可以增加网站的宣传效果,做LOGO链接更能准确地描述网站的主题和定位,宣传效果会大大的增强,但链接做得太多,必然会 影响网页的显示速度。很多站长都喜欢直接引用友情网站上的URL,这样要先经过加载才能显示的,各个友情网站的访问速度不一样,整个表格都要等图 片都下载完了才能显示出来,这样大大降低了网页的速度。因此,做友情链接时应尽量做到:
1 只做文字链接:做文字链接是不会延迟网页速度的。
2 将所有链接放到一个独立的分页去,然后在首页链接上该页。
3 如果友情链接一定要出现在首页,请将链接所在的整个Table放到页面的最下方,因为页面是由上到下逐行显示的,将其放到页面的最下方,不会延迟其他内容的显示。
4 友情链接的LOGO先下载后再传到自己的网页空间,这样,速度由自己的网站空间决定而不受友情网站的影响。
1优化服务器
一、原因
2优化网络
服务器是网站的核心组成部分,如果服务器性能不足或者出现故障,另外,如果网站的访问量过大,服务器也会承受不住,从而影响网站的访问速度。
3优化代码
网络速度是影响网站访问速度的重要因素。如果网络速度慢,如果网络连接不稳定,也会影响网站的访问速度。
一、选择一个好的建站系统
众所周知开展企业要开展网络营销,第一步就是建立一个企业网站,通过企业网站来展示企业产品、企业实力等相关信息,所以企业网站的建立是非常重要的,应该说从企业建站开始就要考虑到seo优化的因素,好在现在市面很多企业建站cms系统都有seo优化的功能,笔者认为这些cms系统自带的seo优化功能,能够满足目前企业优化的需求。
二、选择一个好的服务器
再与很多企业主交流时发现,很多企业家都知道网站要多的大气漂亮,要有营销功能等,但对于网站服务器有时候却不在乎,也许很多企业主也并不懂服务器、空间是什么,他们只要看到网站就可以了。所以这里需要普及下,如果我们是做国内的生意,推荐使用国内的服务器,当然现在使用国内服务器是要备案的,不过备案也没有想象中的那么麻烦,其实还是很简单的,只要按要求通过资料就可以了,而且都是免费备案的。选择国内服务器且备过案的对seo优化还是有一点正面的影响的。
三、网站域名
推荐使用COM域名。
四、关于网站的内容
可以说这一块是影响网站优化排名的一个很重要的因素,很多网站排名坐不上去,就是因为网站内容有问题,要么很简单,要么没有什么价值。所谓内容要有价值,主要体现在:
1、网站内容不是抄袭的,是原创的;
2、网站的内容对于访客来讲是有意义的,能够给访客带去一些有用的价值。
五、关于网站内外部优化
首先是网站内部优化,这个之前就提到过目前很多建站系统就有这样的功能,可能不同的系统操作的方式不一样,但总体操作都差不多;那么第二块就是外部优化,而外部优化很重要的一点就是外链建设,外链建设一般分为发布外链和友情链接交换,这主要就看资源了,需要积累。
当然最后最重要的就是坚持,坚持不断坚持,排名自然就会有了!
1带宽和吞吐量
带宽是指通信通道的大小,吞吐量是指处理系统发送和接收数据的能力。因此,您的硬件可能无法使用您的最大带宽,因此我们可以相应地升级服务器配置,以确保网站正常运行。
2衡量您的性能
网络带宽不足往往不会导致性能下降。跟踪链接的繁忙度可以帮助您更好地了解带宽与性能之间的关系。例如,黑客可能会使用过多的带宽来耗尽带宽资源。此时,服务器可能会负载下降,因此我们需要第三方CDN产品或负载平衡来解决它。
3选择正确监控工具
使用网站监视工具来帮助我们准确地了解服务器资源的分配方式。分析长期趋势并不总是有用的,因为它们会掩盖峰值利用率。同样,仅查看峰值只会告诉您哪个链接最繁忙。好的监控软件可以为您提供完整的,以指导您的优化工作。
4确保带宽使用目的
如果您购买的服务器是共享带宽,那么运行服务器的网站可能会降低所有人的速度,包括最终用户。如果是平台型网站,为了确保企业的网络是处于足够快的速度的那么建议您使用独占带宽,当然带来的成本也会随之变高。如果业务应用程序引起很多拥塞,请升级服务器带宽以优化服务器进程,或者是否应将其从网络中删除。
0条评论