Web2.0网站性能调优实践

news/2024/5/21 13:26:00/文章来源:https://blog.csdn.net/ynwso/article/details/5183191

      当前web2.0革命风起云涌,web2.0强调服务,而服务最基本的要求是速度快和稳定,离开这两个谈功能强大和易用性都没有任何意义。本文介绍一些关于笔者运营一个web2.0网站的优化心得和经验,希望能够和大家共同探讨。
      Web2.0网站不同于以往以静态信息为主的网站架构,以往的结构大体分为2层,一个是客户端浏览器,一个就是web服务器;而web2.0以动态和交互为主,一般是3层或者4层,在静态信息网站的结构上的web服务器后端会增加应用服务器和数据库。一般会把浏览器和web服务器归为最上一层即为web层,应用服务器为中间一层,数据库为最底层。从优化角 度来讲,越上层优化获得益处越大,优化也是从上自下而来。
      Web层优化:

      1、DNS的解析时间

      这个时间就是在用户第一次访问网站的时候产生,解析时间会影响用户的访问感受,因此想要网站响应速度快,第一就是不要在DNS解析上产生问题。另外DNS的TTL时间也要考量,IE的DNS过期时间是30 分钟,TTL设置的比这个长一点就可以。另外在web服务器上使用keep-live也会减少DNS查询次数。
      2、降低浏览器发起请求的数量尽量降低浏览器发起请求的数量,就是说尽量能够让浏览器缓存任何可以缓存的东西。这样当用户访问过一次后,第二次访问可能会使得发起的请求数趋近1或者等于1,如果是静态的页面则可能是0。方法包括:
          1)把所有的样式表文件并为1个
          2)把所有的js文件并成1个
          3)图片尽量能够合成1张,这个跟以前不一样,现在大多数是adsl上网,反而是大量的零碎图片能够影响速度
          4)页面布局与样式页面采用xhtml,采用div+css布局,而把样式表和xhtml文件分开,一则能够降低xhtml文件大小,二则能够  对样式表文件进行其他缓存处理。这里还有个ui设计的原则,ui跟系统结构一样,越简洁越好,这样整体页面代码会比较少,速度也会比较不错。
          5)JavaScript文件JavaScript文件也最好放到html文件外,原因同上。
     3、静态文件的优化方法

          1)目前大多数的浏览器都支持gzip压缩文件,因此为文本、静态页面、样式表、JavaScript文件等可以压缩处理的文件进行压缩处理能够减少内容获取时间,一般压缩完的大小为原大小的 10-30%。这个在apache等web服务器上进行设置,笔者使用lighttpd的设置为:
server.modules = (
   ….
   "mod_compress",
   …
)
compress.cache-dir="/usr/local/lighttpd/cache"
compress.filetype = ("text/plain", "text/html", "text/css", "text/javascript")
         2)还可以在静态文件服务器前面增加缓存服务器比如squid,进一步增强客户端的访问性能。如果有好的财力,还可以使用一些商业的CDN加速服务。
     4、应用Cookie的注意事项

          Cookie的应用要注意,要限制cookie的应 用域和应用的目录以及过期时间。不然如果用户是第一次访问的话,可能连一个小小的静态图片都要发送cookie到服务器,这样增加了通信负载。另外要限制 cookie的大小,一个3k的cookie能够增加延迟达到80ms。
提高页面速度页面由2-4个不同域名的服务器提供服务能够提高速 度,这个国外也有研究证明。比如主html文件由app.domain.com提供,样式表由style.domain.com提供,图片等由 img.domain.com提供,这样浏览器可以同时从多个服务器下载文件,速度就能够上去。但是最好不要超过4个。
     5、样式表文件位置

          把样式表文件放在页面的<head>,这样能够先读取。因为在ie中有个样式表的问题,样式表如果没有加载完会影响后面的html内容的页面显示,因此虽然html文件都已经在浏览器了,但是页面还是显示不出来。

          把JavaScript移到html文件末尾把JavaScript移到html文件末尾。为什么这么做呢,因为JavaScript处理的过程中会阻塞后面的页面显示,并且也会使得http请求也被阻止。笔者的网站就有过这样的例子,网站上放了一 个合作方的JavaScript,结果每次访问时候感觉页面都停滞,用户体验特别差,后来让同事处理了一下,放到末尾等页面加载完了再显示在原有位置,一 下子就好了。
     6、尽量避免跳转尽量避免跳转比如301和302。如果必须的话,对301和302的页面添加过期头。笔者原来的单点登录就需要进行跳转,后来改进了不需要跳转,整体的速度效果就出来了。
     7、移除重复的脚本要移除重复的脚本,ie会对重复的脚本发起重复的http请求,大多数网站在运营一段时间都有可能出现这个情况,笔者的网站中就经常有市场人员添加的重复的广告脚本
     8、AJAX内容AJAX内容也是可以进行缓存的,同样可以压缩和缓存异步调用的xml、json等数据。
     9、对爬虫进行限制对爬虫进行限制,国内的一些爬虫非常厉害,并且不遵守robots规矩,经常有反应某某厉害爬虫把网站搞瘫的事件。怎么对爬虫进行限制呢,只能在web服务器上下功夫了,apache等服务器都能够进行限制,笔者的lighttpd限制10个并发的配置如下:  
      evasive.max-conns-per-ip = 10
web层的优化目的就是极大的利用了浏览器的缓存特性,从而达到几乎是本地访问的速度,下图是笔者访问douban.com首页的效果图对比:

前一列数据是空的缓存所需要下载的文件大小和http请求数量,后面是真实访问的带cache的情况,效果特别明显。http请求减少了95%,内容cache了82%。


应用程序层优化:

      应用服务器的优化,Php的可以采用一些优化手段比如Zend Optimizer、eAccelerator、MMCache、Zend Performance Suite等。Java的可以采用一些性能强的jdk、应用服务器,对jdk参数进行优化等等;
      使用ETagETag,就像版本控制服务器中的版本号一样,每次更新后的ETag是不一样的,而浏览器处理就类似版本服务器的客户端一样,先把版本号发到服务器请求。ETag的处理过程,先是Web服务器在响应的http头中发送ETag,比如这样:
ETag: "1111-2222-3333"
Last-Modified: Thu, 07 Oct 2007 15:20:18 GMT
而浏览器如果再次请求该页面就会发送类似如下的头:
If-None-Match: "1111-2222-3333"
If-Modified-Since: Thu, 07 Oct 2007 15:20:18 GMT
此时,如果该页面没有任何变更,则web服务器会响应一个304的头,并且不需要附带页面内容给浏览器(即不需要再动态生成页面内容),这样就大大减少了服务器的处理和网路通信负载。
      同步变异步同步变异步,在web2.0网站中经常有很复杂的处理,比如一个用户的注册还需要发邮件等操作,有时候可能还有其他的处理,这样用户的等待时间比较长,并且容易出现错误。此种情况下,把其他处理变成异步 的,从而直接把页面尽快响应给用户。笔者的一个数据上传的程序也是如此处理,一大堆数据,上传时间可能就1-2秒,而处理时间可能长的需要接近10秒(需 要在数据库中进行上千次的插入操作),而在应用服务器容器内处理耗时则更长,笔者后来改成异步处理以后,用户满意度则大幅上升。
      使用缓存,还是缓存,可能的情况下尽量使用缓存,毕竟现在内存非常便宜,用空间换取时间效率应该是非常划算的。尤其是对耗时比较长的、需要建立网络链接的,方法:采用memcached进行数据库或者常用数据的缓存;应用数据库缓冲池减少建立数据库连接的时间
采用gzip压缩动态页面可能情况下,也可以采用gzip压缩动态页面。如果服务器较多,cpu负载不高,则可以考虑对动态页面增加gzip压缩功能。
      集群处理,访问压力大的时候,对应用服务器采用集群处理。
      应用服务器的优化主要是减少程序处理的时间,提高运行效率。


      数据库优化这个议题跟具体数据库关系比较大,议题也比较广泛,笔者就只简要列举一下:
      设置专门的DBA,专门负责数据库的安装、优化;对sql进行优化采用数据库集群和复制功能分担数据库压力。
其他优化措施网站的优化涉及的方面比较多,其他方面涉及的还包括网站架构、操作系统、服务器硬件、网络设备、isp机房网络等等的调优。
工具笔者用到的工具,都是firefox插件,所以firefox是必备的了:
1、LiveHTTPHeaders (http://livehttpheaders.mozdev.org/)
2、Firebug (
http://getfirebug.com)
3、YSlow (
http://developer.yahoo.com/yslow/),要先装Firebug
4、Web Developer (
http://chrispederick.com/work/web-developer/)
除了这些免费的工具外,还可以采用一些商业的网站性 能监测服务。一般网站性能监测服务商都会在不同的isp设置数据采集点,然后会定期模拟浏览器的访问对网站进行访问获取各种数据,比如dsn查询时间、第 一个包获取时间、整个页面加载时间等等,然后汇总到数据中心。数据中心则可以产生性能报表、不同时间的可访问率、哪个isp容易出问题、发出警报等等。如 果预算足够的话,可以采用这个服务。国外的有keynote、ip-label等,功能比较齐全,但是服务费用比较贵而且国内的点比较少。国内近些年也开 始涌现出一些厂商,比如基调网络。笔者使用的监测系统的图例:

笔者网站3年不同阶段的优化过程优化的原则是尽量不去优化,在未发生性能问题的时候,没有必要去专门考虑细节的性能问题,当然大的结构应该是能够适应网站不断发展变化的。笔者的网站近3年的优化过程如下:
1、开发完成,刚上线的时候,不做优化,用户量少,用了3台服务器。
2、10万用户的时候,主要对sql进行了优化,还是3台服务器。
3、10万用户到100万的过程中,采用了AJAX等,因此开始关注JavaScript的优化手段,访问量也快速上去,因此对静态文件进行分离并优化。服务器也进行了扩展,扩展到5台服务器。
4、100万-200万用户,业务系统增加了很多,因此数据库采用了复制,程序方面应用了各种缓存处理,在数据库和程序之间增加了memcached进行数据缓存。
5、在200万用户以上,主要在程序架构上做文章,对某些服务使用了集群。另外为了监测国内不同城市、isp的网络状况,使用了商业化的网站性能监测服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_866361.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java专业人士必备的书籍和网站列表

Roy Miller (royroywmiller.com), 创始人兼总裁, The Other Road, LLC 对于 Java™ 语言开发人员来说&#xff0c;信息过量是一个真正的问题。每个新入行的程序员都要面临一个令人畏缩的挑战&#xff1a;要进入的行业是一个具有海量知识的行业。要了解的东西简直太多了。对于有…

大型网站技术架构

架构演变第一步&#xff1a;物理分离webserver和数据库 最开始&#xff0c;由于某些想法&#xff0c;于是在互联网上搭建了一个网站&#xff0c;这个时候甚至有可能主机都是租借的&#xff0c;但由于这篇文章我们只关注架构的演变历程&#xff0c;因此就假设这个时候已经是托管…

用Varnish和Memcached缓存给WordPress网站提速-内存级加速

Varnish是一款高性能的缓存加速器&#xff0c;Varnish把数据存放在服务器的内存中&#xff0c;利用内存可以极大的提高PHP页面执行速度&#xff0c;可以设置0&#xff5e;60秒的精确缓存时间&#xff0c;32位的机器支持的缓存文件最大为2 GB。 Varnish采用VCL的配置&#xff0…

正则表达式的符号概念、捕获组与非捕获组、解读方式、练习网站

正则表达式 正则表达式的解读方法符号概念练习的网站看两个现象进行后续思考Group的用途 捕获组和非捕获组捕获组非捕获组组的命名 正则表达式的解读方法 读者最好能养成按照字符来理解正则表达式的习惯。&#xff08;参考自动物书《精通正则表达式》&#xff0c;这种读法对我…

基于VUE使用Hbuilder工具开发的甜品网站

上文已经提到了VUE实现的思维导图&#xff0c;感兴趣的同学可以自己去了解一下VUE&#xff0c;学过JS都会很快上手。本文是开发的甜品网站&#xff0c;适配所有手机的H5网页&#xff0c;你说它是APP、小程序好像都没错。 实现代码界面如下&#xff1a; 实现的主要代码如下&…

IE浏览器高通网站打不开dump分析选择目录总结

首先需要安装jdk与jre最新版本 安装之后配置好路径&#xff0c;重启电脑 如果浏览器提示&#xff1a;Unable to load Java Applet. Please make sure JRE is updated. 就如下图进行操作&#xff1a; 在浏览器设置->安全->去掉ActiveX筛选的前面的√ 当死机之后&#x…

Designing Websites for Performance 如何设计高性能网站 Lynda课程中文字幕

Designing Websites for Performance 中文字幕 如何设计高性能网站 中文字幕Designing Websites for Performance 设计性能网站探索快速模式&#xff0c;提示和技巧的网页设计师 在本文中&#xff0c;Brian Wood向您展示了如何优化和最小化Web图形的大小&#xff0c;实现流畅…

有一个属于自己的网站是不是很酷呢,超详细的建站流程,我都给你总结好了

上篇文章Relax讲到希望在AR这个方向上做一些事情&#xff0c;落实到具体上肯定是要做一些东西出来&#xff0c;从软件层面来说&#xff0c;传统互联网兴起是以成千上万的网站呈现的&#xff0c;移动互联网是以成千上万的APP呈现的&#xff0c;当然其实还有别的方式&#xff0c;…

接口调试网站和工具

调试网站&#xff1a;https://getman.cn/gsgaO 超级好用的一款在线接口调试网站&#xff0c;可以先分析带什么样的请求头部&#xff0c;什么样的数据体可以请求成功&#xff0c;然后调整请求代码格式。 调试工具&#xff1a;fidder 很多app不是我们开发的&#xff0c;但我们…

网站访问速度提升200%以上,阿里云虚拟主机支持PHP最新版本

日前&#xff0c;阿里云虚拟主机推出了新功能&#xff0c;支持PHP的最新版本 7.0和7.1&#xff0c;并支持用户在多个不同PHP版本之间切换。 PHP 作为最好的Web编程语言&#xff0c;最新版本已经更新到了7.0和7.1。阿里云作为国内虚拟主机的领头羊&#xff0c;为了给用户提供更先…

一键清理网站木马文件,从此网站拥有专属保镖 ——阿里云虚拟主机推出木马查杀功能

近日&#xff0c;阿里云推出了云虚拟主机网站木马查杀的新功能&#xff0c;十分适合对网站安全不了解、不熟悉的用户&#xff0c;或网站出现挂马情况不清楚如何处理的用户。 阿里云表示&#xff0c;此次网站木马查杀功能是阿里云安骑士专为虚拟主机推出的安全增值服务。通过周期…

每天自动备份网站数据,发现问题一键恢复 ——阿里云虚拟主机推出网站数据自动备份功能

近日&#xff0c;阿里云宣布推出虚拟主机网站自动备份功能&#xff0c;可自动备份用户的网站和数据库数据至单独的备份区域&#xff0c;用户可随时恢复前三天的网站和数据库的数据。一旦出现意外或者数据丢失情况&#xff0c;可将损失降低到最低。 数据是用户的最重要的财产&am…

10分钟轻松定制网站日志分析大盘

前言 作为站长的你是否也曾想针对站点访问日志信息&#xff0c;分析其中PV、UV、访问地域分布以及访问前十页面等情况。作为开发者的你是否也想记录应用的日志信息&#xff0c;针对top方法进行优化从而提升应用质量。作为运维老大的你是否也曾想过实时监控最近1个小时的服务器…

从网站上加载数据和从文本文件导入数据和超级燃的分列功能

从网站上加载数据 右键单击文件&#xff0c;选择打开方式为ie游览器&#xff0c;复制文件地址 数据——自网站——粘贴地址——选定表格&#xff08;旁有小箭头&#xff09;——导入——任意选定单元格 从文本文件导入数据 数据——自文本——选择文本 选择分隔符号&#x…

友情链接:对网站排名作用都深入了解吗?

说起友情链接的作用也是作为一个站长老生长谈的事情&#xff0c;但是对于新手做seo的站长们&#xff0c;可能就不是那么清楚了它的作用到底对网站有哪些了。往下看&#xff01; 一、友情链接&#xff0c;分为两种 1、双向友情链接&#xff1a;意思就是相互之间互相做链接&…

Gihub网站打不开怎么办

github打不开时&#xff1a; 1、通过IPAddress工具找出它的IP地址&#xff1a; 2、修改host文件&#xff08;windows路径&#xff1a;C:\Windows\System32\drivers\etc&#xff09;,添加以下内容 # github 140.82.112.4 github.com 140.82.112.4 gist.github.com 140.82.1…

javascript之jQuery 打造个性网站

文件结构 网页结构 头部:放LOGO,通往各个页面的链接 内容:放置页面的主体内容 底部:放置页面其他链接和版权信息 [html] view plain copy <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-tra…

在自己的电脑上搭建服务器,发布自己的网站(学习之用)

我们平常学习时经常会写一下javaweb程序&#xff0c;我们为了更能逼近现实&#xff0c;就想着自己的javaweb程序发布后&#xff0c;外网的同学能够访问我们的网站&#xff0c;难道我们去买空间&#xff0c;去买域名嘛&#xff0c;其实也没必要&#xff0c;我们只是学习&#xf…

大型网站的灵魂——性能

大型网站的灵魂——性能 转自&#xff1a;http://www.csdn.net/article/2015-02-26/2824026 总结&#xff1a; 1、现在主流的浏览器默认设置了DNS的预取功能&#xff08;DNS Prefetch&#xff09;&#xff0c;当然你也可以主动告知浏览器我的网站需要做DNS预取&#xff1a; …

大型网站系统架构的演化

一个成熟的大型网站&#xff08;如淘宝、京东等&#xff09;的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性&#xff0c;它总是随着用户量的增加&#xff0c;业务功能的扩展逐渐演变完善的&#xff0c;在这个过程中&#xff0c;开发模式、技术架构、设计思想…