《高性能网站建设指南》笔记

js文件何时合并?

css和js究竟是内联仍是外部引入?

  前者速度快,但没办法缓存,没办法多页面共用;后者速度慢,须要额外的请求,但能够缓存,多页面共享。css

  一箭双鵰的办法【内联+预加载+cookie标志判断】:用户第一次打开网页时,没有cookie,服务器返回包含内联css和js的页面和cookie,速度很快,页面空闲下来后执行预加载;第二次打开有cookie了,并且第一次执行了预加载,如今能够返回一个带外部文件的html了,由于以前预加载了,因此速度很快。注意,第一次预加载的时候,要处理内联代码和预加载的代码,防止二者冲突。解决冲突的方式以下(主要是处理js,由于css重复的话没问题,但js重复执行的话可能会形成问题):html

  1.建立一个不可见的iframe,里面是空白。iframe标签onload以后,往里面的dom添加script标签或者link标签,由于iframe内外环境是隔离的,因此不会有影响前端

  2.使用preload、prefetch等属性node

  3.最麻烦的方式,处理冲突的逻辑嵌入到业务逻辑中。标志一个全局变量,来判断代码有没有执行过。ajax

流量跟踪

  对于站内的网站,可使用refer来的统计。浏览器

  但对于站外的地址,就不能使用refer了(没办法获取发给其余服务器的请求),能够对出站地址进行包装,如http://www.mtsite.com?url=www.baidu.com 访问这个地址,实际是访问了站内的网站,进行统计后,再302重定向。缓存

  跟踪出站流量,除了以上重定向的方式外,还有其余变种,本质都是把跳转过程从服务器移到了前端,用js来实现实现跳转而已,方式以下,重写a标签的点击事件(return false),发送请求记录站外的地址(ajax方式、new Image()方式),(回调事件中、img的onload或onerr中)再跳转。服务器

  以上要注意的一点是:a标签若是没有指定target,跳转会致使当前文档被卸载。因此在这种状况下,必需要把location.url=xxx;放到回调事件中执行cookie

  使用重定向的一个目的是:美化url。访问短的好记的url,而后重定向到长的url去。dom

配置或者移除Etag

  etag的值与文件大小、修改时间以及inode(或者说文件所在的硬盘序列号)有关。集群服务器中相同的文件会对应不一样的etag(inode、硬盘序列号不一样)。n台文件服务器中,能命中304的概率只有1/n,效率低下。解决办法是:配置或者移除etag。

  配置etag:对文件服务进行配置,是etag仅仅与文件大小、修改时间相关,这样一来,多台服务器对于同一个文件也能生成同一个etag了。

  移除etag:不使用etag,而使用last-modified来代替。这其实和配置etag的思路一致的,即多台服务器对于相同的文件都能成功标识

  前者标识文件的修改时间和大小,后者标识文件的修改时间。因此总结起来移除etag是最好的选择。


 

1.浏览器对同一个主机有固定的并行下载数,若是页面的资源来自于多个主机,则下载的效率能够提升(脚本除外,无论是否来自同一个主机,下载和执行脚本的时候老是阻塞其余资源的下载和dom渲染),但dns查找所消耗的时间也会增长。除了能够增长并行下载数,还能够下降无谓的cookie流量(访问文件也会带上cookie,不一样主机的cookie不共享)

2.典型的预加载图片方式:

onload = function(){
     if(document.images){
            new Image().src = "xxx.jpg";
     }  
}

3.使用iframe是一种清除广告系统与当前页面系统的简单手段,但会增长额外的http请求

相关文章
相关标签/搜索