提升网站页面速度的14条最佳实践

时间: 2019-05-21阅读: 131标签: 优化

《高性能网站建设指南》一书共列举了14条提升网站速度的方法。性能黄金法则:只有10%-20%的最终用户响应时间花在了下载HTML文档上,其余80%-90%时间花在了下载页面中的所有组件上。  


一、减少http请求

1.图片地图
2.CSS Sprites
3.内联图片 
4.合并脚本和样式表


二、使用内容发布网络

内容发布网络(CDN)是一组分布在不同地理位置的web服务器,用于更加有效地像用户发布内容。即利用就近原则,响应发送给用户需要的数据,进而缩短响应时间,来提高网站性能。


三、添加Expires头

浏览器(和代理)使用缓存来减少HTTP请求的数量,并减少HTTP响应的大小,使web页面加载得更快。web服务器使用Expires头来告诉web客户端它可以使用一个组件的当前副本。

注意:Expires头使用的是一个特定的时间,它要求客户端与服务器的时钟严格同步,一旦两个时间统一,Expires头的时间将没有意义。

为了解决Expires头的限制,HTTP1.1 引入了Cache-Control使用max-age指令指定组件缓存多久。它以秒为单位定义更新窗。如果从组件请求开始过去的秒数小于max-age,浏览器就可以使用缓存的版本。

注意: 
 1.在小于HTTP1.1版本之前仍需要设置Expires头,为了做更好的兼容,最好同时使用HTTP1.1和max-age,在支持max-age的版本中,如果两者同时存在max-age会重写Expires头。 
 2.利用Apache模块mod_expires可以使Expires头能够像max-age那样以相对的方式设置日期。通过Expires_Default指令来实现。时间可以用年/月/周/日/时/分/秒为单位来设置。


四、压缩组件

1.从HTTP1.1开始,web客户端可以通过HTTP请求中的Accept-Encoding头来识别对压缩的支持。
Accept-Encoding:gzip,deflate;
2.配置
a.Apache1.3的gzip压缩由mod_gzip模块提供
b.Apache2.x中压缩通过mod_deflate模块来完成。
3.代理缓存
在Web服务器的响应中添加Vary头。Web服务器可以告诉代理根据一个或者多个请求头来改变缓存的响应。
Vary:Accept-Encoding
这种情况下代理服务器会缓存每个响应的两个版本——Accept-Encoding为gzip时的压缩内容和没指定Accept-Encoding时的非压缩内容。


五、将样式表放在顶部

由于浏览器总是在样式表加载并解析完之后才会绘制页面内容,所以把样式表放在底部才会出现白屏或者无样式内容的闪烁问题。


六、将脚本放在页面底部

浏览器总是从上到下执行页面内容,如果将脚本放置在页面顶部,则在加载脚本的这段时间内,页面的内容呈现将被阻塞!


七、避免css表达式

css表达式也会影响页面的加载时间。如果必须要在页面加载记载的时候对css样式进行重置,可以考虑使用时间处理器来代替css表达式。


八、使用外部Jacascript和css

1.如果需要呈现给用户的页面可以实现完整缓存,那么使用外部Jacascript和css会提高网站性能。
2.在使用使用外部Jacascript和css时,可以设置页面加载完成后下载,这样可保证页面也首屏效果。


九、减少DNS查询

1.Internet是通过IP地址来查找服务器的。由于IP地址很难记忆,通常使用包含主机名的URL来取代它,但是浏览器发送请求时,IP地址仍然是必需的。这就是Domain Name System(DNS)所处的角色,DNS将主机名映射到IP地址上。当你输入一个网址时,链接到服务器的DNS解析器会返回服务器的IP地址。
2.DNS开销:通常浏览器查找的一个给定的主机名的IP地址要花费20-120毫秒,在完成查找之前,浏览器不能从主机那里下载任何的东西。
3.使用Keep-Alive和较少的域名来减少DNS查询


十、精简JavaScript

精简是从代码中移除不必要的字符,比如空白符(空格、换行、制表符)等以减少文件大小,进而改善加载时间。


十一、避免重定向

1.重定向用于将用户从一个url重新路由到另一个url。重定向有很多种:301和302是常见的两种
2.当Web服务器向浏览器返回一个重定向时,响应中就会拥有一个范围在3xx的状态码(注意:"304 Not Modeified"并不是真的重定向-他是用来响应GET请求,避免下载已经存在于浏览器缓存中的数据。)。
3.重定向的损伤:在重定向完毕并且HTML文档下载完成之前,没有任何东西显示给用户。


十二、移除重复脚本

重复性脚本损伤性能的方式有两种:不必要的HTTP请求和执行JavsScript所浪费的时间。


十三、配置或移除ETag

1.Etag是什么?
实体标签(Entity Tag ETag)是Web服务器和浏览器用于确认缓存组件的有效性的一种机制。
2.浏览器的缓存与确认?
步骤一:Expires头:浏览器在下载组件时,会将它存储到缓存中。再次请求改组件时,会确认改组件是否过期来决定是否重新请求改组件,而这个过期时间是由Expires头的值来决定。当请求一个组件时,服务器会根据其选项在响应中返回一个Expires头。
步骤二:条件GET请求:如果缓存的组件过期了(或者用户明确地重新记载了页面),浏览器在重用它之前必须首先检查它是否仍然有效,这称作条件GET请求。如果组件有效,原始服务器会返回一个"304 Not Modified"状态码。

服务器在检测缓存的组件是否有效时有两种方式: 1.比较最新修改日期 2.比较实体标签  

2.1 最新修改时间:

原始服务器通过Last-Modified响应头来返回组件的最新修改时间,它要求服务器端和客户端时间完全统一的情况下才有意思。  

2.1 实体标签:

 ETag提供了另一种方式,用于检测浏览器缓存中的组件与原始服务器上的组件是否匹配。ETag在HTTP1.1中引用。ETag是唯一标识了一个组件的一个特定版本的字符串。唯一的格式约束是该字符串必须用引号引起来。原始服务器使用ETag来响应指定组件的Etag。 Etag为验证实体提供了比修改最新日期更为灵活的机制,例如,如果实体依据User-Agent或者Accept-Language头而改变,实体的状态可以反映在ETag中。此后,如果浏览器必须验证一个组件,它会使用If-None-Match头将ETag传回原始服务器。如果ETag是匹配的,就会返回304状态吗。  

3.ETag带来的问题
ETag的问题在于,通常使用的组件的某些属性来构造它,这些属性对于特定的,寄宿了网站的服务器来说是唯一的。当浏览器从一台服务器获取了原始组件,之后,又向另外一台不同的服务器发起条件GET请求时,ETag是不会匹配的——对于使用服务器集群来处理请求的网站来说,这是很常见的一种情况。默认情况下,对于拥有多台的服务器网站,APache和IIS中嵌入的数据都会大大地降低有效性验证的成功率。

3.1 Apache1.3和2.X的ETag格式是inode-size-timestamp,即使文件系统的所有信息都是一致的,但是不同服务器上的inode仍然是不同的。

3.2 IIS5.0和6.0在ETag上有着类似的问题。IIS上ETag的格式是Fletimestamp:ChangNumber。ChangNumber适用于跟踪IIS配置变化的计数器。对于网站背后的服务器来说,ChangNumber不大相同。
3.3 最后结果,对于完全相同的组件,从一台服务器到另一台Apache和 IIS产生的ETag是不同的,如果你使用了服务器集群,使用ETag会造成组件不必要的重复加载并影响服务器的性能、增加宽带的开销。

4.ETag用还是不用?
如果你使用的是服务器集群,且使用默认的ETag配置,你的用户将面对缓慢的页面,你的服务器会有很高的负载,你会消耗大量的带宽,而且代理也不能有效地缓存你的内容。

为了使用ETag的灵活性的验证能力而又要消除其所带来的问题,有一种选择是对ETag进行自定的配置。比如可以使用一段根据浏览器是否为Internet Explorer而变化的脚本。如果使用PHP来生成脚本,你可以通过设置ETag头来反映浏览器的状态。 如果你的组件必须通过最新修改日期之外的一些东西来进行验证,则自定义ETag是一种强大的方法。如果你不能自定义ETag,建议你移除ETag。 

 

十四、使用Ajax可缓存

公所周知,主动的Ajax请求时异步的,用户可能仍然需要等待响应。不过用户不必忍受整个页面的重新加载了,而且用户在等待时,UI仍然可以响应。
由于Ajax毕竟是一个请求,所有为更好的用户体验,我们仍需结合上面其他的性能优化条例来使用,比如缓存等。


链接: http://www.fly63.com/article/detial/3387

如何设置网站的robots.txt?

做过网站优化的朋友都知道,搜索引擎蜘蛛爬行抓取网站时首先会去访问根目录下的robots.txt文件,如果robots文件存在,则会根据robots文件内设置的规则进行爬行抓取,如果文件不存在则会顺着首页进行抓取,那么robots文件的工作原理是什么呢?

Webpack 打包后代码执行时机分析与优化

代码执行时机将决定着是否能够正常执行,当依赖文件没加载完成就开始执行、使用对应模块,那么将会导致执行异常。这在“ 存在资源加载失败时,加载重试影响原来文件的执行顺序 ”的场景下尤为常见。

运用meta标签进行网站优化

Set-Cookie(cookie设定)说明:如果网页过期,存盘的cookie将会被删除(必须是GMT的时间格式); Window-target(显示窗口的设定)说明:强制页面在当前窗口以独立页面显示----用来防止别人在框架里面调用你的页面

网站优化重点注意事项

可能很多的小白还不清楚,网站优化的重点在哪里,到底是站内优化重要还是站外优化重要,要知道的是,百度除了相关说明的,外链对网站的帮助已经越来越小,但是并不是代表就可以不去做

关于Js防抖与节流的思考

防抖:就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间,防抖注重结果;节流::是让一个函数无法在很短的时间间隔内连续调用

优化(Vue)Javascript文件体积

可以看到竟然有8M和5.3M这么大的文件!在本地开发时由于本地网络打开文件很快感受不明显,但当把这些文件部署到服务器上,能明显感觉首屏打开时间是非常慢的。好,看到了问题,我们来优化~

JS 代码脏乱差?你需要知道这些优化技巧

JavaScript 是万众瞩目的力量。它是世界上最流行的编程语言。它容易理解,有丰富的学习资源,对初学者非常友好。JavaScript 有着庞大的资源库,对小公司和大企业都颇具吸引力。庞大的 JS 工具和库生态系统为开发者的生产力带来了福音

网页首屏性能优化总结

本文总结了系统地进行前端性能优化的整体思路。具体到实施的过程,每一种优化方法都能搜到详细的文章,这里就不展开了。同时,还应该结合具体的业务场景对症下药,最终真正的提高用户体验。符合预期。

Vue项目优化

在日常的Vue项目开发中,随着业务的日渐负责,代码量的日益增加,随之带来的问题就是打包后的vendor.js体积过大,导致加载时空白页时间过长,给用户的体验太差。为此我们需要减少vendor.js的体积,从本质上来解决这种问题

WEB前端_搜索引擎工作原理与SEO优化

搜索引擎的工作分为三个阶段,即爬行,索引和检索;搜索引擎具有网络爬虫或蜘蛛来执行爬网,每次抓取工具访问网页时,它都会复制该网页并将其网址添加到索引中。

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全