Web性能优化

通常说来,web前端指网站业务逻辑以前的部分,包括浏览器加载、网站视图模型、图片服务、CDN服务等,主要优化手段有浏览器访问、使用反向代理才、CDN等。javascript

浏览器访问优化前端

 

1、减小http请求,合理设置 HTTP缓存java

  减小http的主要手段是合并CSS、合并javascript、合并图片。将浏览器一次访问须要的javascript和CSS合并成一个文件,这样浏览器就只须要一次请求。图片也能够合并,多张图片合并成一张,若是每张图片都有不一样的超连接,可经过CSS偏移响应鼠标点击操做,构造不一样的URL。web

  缓存的力量是强大的,恰当的缓存设置能够大大的减小 HTTP请求。怎样才算合理设置 ?原则很简单,能缓存越多越好,能缓存越久越好。例如,不多变化的图片资源能够直接经过 HTTP Header中的Expires设置一个很长的过时头 ;变化不频繁而又可能会变的资源可使用 Last-Modifed来作请求验证。尽量的让资源可以在缓存中待得更久。浏览器

 

2、使用浏览器缓存缓存

  对一个网站而言,CSS、javascript、logo、图标这些静态资源文件更新的频率都比较低,而这些文件又几乎是每次http请求都须要的,若是将这些文件缓存在浏览器中,能够极好的改善性能。经过设置http头中的cache-control和expires的属性,可设定浏览器缓存,缓存时间能够是数天,甚至是几个月。服务器

  在某些时候,静态资源文件变化须要及时应用到客户端浏览器,这种状况,可经过改变文件名实现,即更新javascript文件并非更新javascript文件内容,而是生成一个新的JS文件并更新HTML文件中的引用。
  使用浏览器缓存策略的网站在更新静态资源时,应采用逐量更新的方法,好比须要更新10个图标文件,不宜把10个文件一次所有更新,而是应该一个文件一个文件逐步更新,并有必定的间隔时间,以避免用户浏览器突然大量缓存失效,集中更新缓存,形成服务器负载骤增、网络堵塞的状况。
cookie

 

3、启用压缩网络

  在服务器端对文件进行压缩,在浏览器端对文件解压缩,可有效减小通讯传输的数据量。若是能够的话,尽量的将外部的脚本、样式进行合并,多个合为一个。文本文件的压缩效率可达到80%以上,所以HTML、CSS、javascript文件启用GZip压缩可达到较好的效果。可是压缩对服务器和浏览器产生必定的压力,在通讯带宽良好,而服务器资源不足的状况下要权衡考虑。并发

 

4CSS Sprites

 

  合并 CSS图片,减小请求数的又一个好办法。

 

5LazyLoad Images

 

       这条策略实际上并不必定能减小 HTTP请求数,可是却能在某些条件下或者页面刚加载时减小 HTTP请求数。对于图片而言,在页面刚加载的时候能够只加载第一屏,当用户继续日后滚屏的时候才加载后续的图片。这样一来,假如用户只对第一屏的内容感兴趣时,那剩余的图片请求就都节省了。

 

6CSS放在页面最上部,javascript放在页面最下面

  浏览器会在下载完成所有CSS以后才对整个页面进行渲染,所以最好的作法是将CSS放在页面最上面,让浏览器尽快下载CSS。若是将 CSS放在其余地方好比 BODY中,则浏览器有可能还未下载和解析到 CSS就已经开始渲染页面了,这就致使页面由无 CSS状态跳转到 CSS状态,用户体验比较糟糕,因此能够考虑将CSS放在HEAD中。

      Javascript则相反,浏览器在加载javascript后当即执行,有可能会阻塞整个页面,形成页面显示缓慢,所以javascript最好放在页面最下面。但若是页面解析时就须要用到javascript,这时放到底部就不合适了。

 

      Lazy Load Javascript(只有在须要加载的时候加载,在通常状况下并不加载信息内容。)随着 Javascript框架的流行,愈来愈多的站点也使用起了框架。不过,一个框架每每包括了不少的功能实现,这些功能并非每个页面都须要的,若是下载了不须要的脚本则算得上是一种资源浪费 -既浪费了带宽又浪费了执行花费的时间。目前的作法大概有两种,一种是为那些流量特别大的页面专门定制一个专用的 mini版框架,另外一种则是 Lazy Load。

7、异步请求Callback(就是将一些行为样式提取出来,慢慢的加载信息的内容)

 

8、减小cookie传输

 

        一方面,cookie包含在每次请求和响应中,太大的cookie会严重影响数据传输,所以哪些数据须要写入cookie须要慎重考虑,尽可能减小cookie中传输的数据量。另外一方面,对于某些静态资源的访问,如CSS、script等,发送cookie没有意义,能够考虑静态资源使用独立域名访问,避免请求静态资源时发送cookie,减小cookie传输次数。

 

9CSS选择符优化

 

  在大多数人的观念中,都以为浏览器对 CSS选择符的解析式从左往右进行的,例如 
#toc A { color: #444; } 这样一个选择符,若是是从左往右解析则效率会很高,由于第一个 ID选择基本上就把查找的范围限定了,但实际上浏览器对选择符的解析是从右往左进行的。如上面的选择符,浏览器必须遍历查找每个 A标签的祖先节点,效率并不像以前想象的那样高。根据浏览器的这一行为特色,在写选择符的时候须要注意不少事项,有兴趣的童鞋能够去了解一下。

 

 

CDN加速

  CDN(contentdistribute network,内容分发网络)的本质仍然是一个缓存,并且将数据缓存在离用户最近的地方,使用户以最快速度获取数据

  因为CDN部署在网络运营商的机房,这些运营商又是终端用户的网络服务提供商,所以用户请求路由的第一跳就到达了CDN服务器,当CDN中存在浏览器请求的资源时,从CDN直接返回给浏览器,最短路径返回响应,加快用户访问速度,减小数据中心负载压力。 
  CDN缓存的通常是静态资源,如图片、文件、CSS、script脚本、静态网页等,可是这些文件访问频度很高,将其缓存在CDN可极大改善网页的打开速度。

 

反向代理

 

传统代理服务器位于浏览器一侧,代理浏览器将http请求发送到互联网上,而反向代理服务器位于网站机房一侧,代理网站web服务器接收http请求。以下图所示:

论坛网站,把热门词条、帖子、博客缓存在反向代理服务器上加速用户访问速度,当这些动态内容有变化时,经过内部通知机制通知反向代理缓存失效,反向代理会从新加载最新的动态内容再次缓存起来。

此外,反向代理也能够实现负载均衡的功能,而经过负载均衡构建的应用集群能够提升系统整体处理能力,进而改善网站高并发状况下的性能。

相关文章
相关标签/搜索