如何有效提升网站性能——前端优化策略解析

如何提升前端性能优化

前端编程代码优化、易维护性、浏览器兼容性是至关重要的议题。从实际工程应用的角度来看,前端优化问题最为常见。前端性能提升的规则,基本囊括了当前前端大部分的性能优化原则,许多更高级和细致的优化方法都是基于这些原则衍生出来的。

前端性能提升有哪些准则

1. 降低HTTP请求次数

尽量合并图片、CSS、JS等资源。例如,一个页面若包含5个CSS文件,将其合并为一个文件,则只需发起一次HTTP请求,节省网络请求时间,加快页面加载速度。

2. 利用CDN

网站上的静态资源,如CSS、JS以及图片,均采用CDN分发。

3. 避免空src和href

当link标签的href属性为空、script标签的src属性为空时,浏览器在渲染时会将当前页面的URL作为它们的属性值,从而加载页面内容作为其值。因此,应避免此类疏忽。

4. 为文件头指定Expires

Expires用于设置文件的过期时间,通常对CSS、JS、图片资源有效。它可以使内容具有缓存性,当再次访问相同资源时,可通过浏览器缓存区读取,无需再次发起HTTP请求。

5. 使用gzip压缩内容

gzip可以压缩任何文本类型的响应,包括HTML、XML、JSON。这可以大大减少请求返回的数据量。

6. 将CSS置于顶部

网页资源加载时按照从上到下的顺序进行,因此将CSS置于页面顶部可以优先渲染页面,使用户感觉页面加载速度很快。

7. 将JS置于底部

加载JS时会对后续资源造成阻塞,必须等待JS加载完毕才能加载后续文件,因此将JS置于页面底部最后加载。

8. 避免使用CSS表达式

例如:

font-color: expression((new Date()).getHours()%3?"#FFFFFF":"#AAAAAA");

此表达式会持续在页面上计算样式,影响页面性能。并且CSS表达式仅被IE支持。

9. 将CSS和JS置于外部文件中

目的是缓存文件,可参考原则4。但有时为了减少请求,也会直接写入页面,需根据PV和IP的比例权衡。

10. 权衡DNS查找次数

减少主机名可以节省响应时间。但同时,需要注意,减少主机名会减少页面中并行下载的数量。

IE浏览器在同一时刻只能从同一域名下载两个文件。当在一个页面显示多张图片时,IE用户的图片下载速度就会受到影响。因此,新浪会使用多个二级域名来放置图片。

以下是新浪微博的图片域名,我们可以看到它有多个域名,这样可以保证不同域名能够同时下载图片,而无需排队。但若使用的域名过多,响应时间就会变慢,因为不同域名的响应时间不一致。

11. 精简CSS和JS

这涉及到CSS和JS的压缩。例如,新浪的一个CSS文件,将空格、回车等全部去除,减少文件大小。现在的压缩工具有很多,基本主流的前端构建工具都能进行CSS和JS文件的压缩,如grunt、glup等。

12. 避免跳转

例如,当URL本应包含斜杠(/)却被忽略时。例如,当我们要访问http:// baidu.com时,实际上返回的是一个包含301代码的跳转,它指向的是http:// baidu.com/(注意末尾的斜杠)。在nginx服务器中可以使用rewrite;Apache服务器中可以使用Alias或者mod_rewrite或者the DirectorySlash来避免。

另一种是不用域名之间的跳转,例如访问http:// baidu.com/bbs跳转到http:// bbs.baidu.com/。那么可以通过使用Alias或者mod_rewirte建立CNAME(保存一个域名和另一个域名之间关系的DNS记录)来替代。

13. 删除重复的JS和CSS

重复调用脚本会增加额外的HTTP请求,并浪费计算资源。在IE和Firefox中,不管脚本是否可缓存,都存在重复运算JavaScript的问题。

14. 配置ETags

它用于判断浏览器缓存中的元素是否与服务器上的一致。比last-modified date更具有弹性,例如某个文件在1秒内修改了10次,Etag可以综合Inode(文件的索引节点(inode)数)、MTime(修改时间)和Size进行精准判断,避开UNIX记录MTime只能精确到秒的问题。在服务器集群中使用,可取后两个参数。使用ETags减少Web应用带宽和负载。

15. 可缓存的AJAX

异步请求同样会造成用户等待,因此在使用ajax请求时,要主动告诉浏览器如果该请求有缓存就去请求缓存内容。如下代码片段,cache:true就是显式的要求如果当前请求有缓存的话,直接使用缓存

$.ajax({ url:'url', dataType:"json", cache: true, success: function(son, status){} });

16. 使用GET来完成AJAX请求

当使用XMLHttpRequest时,浏览器中的POST方法是一个“两步走”的过程:首先发送文件头,然后才发送数据。因此使用GET获取数据时更加有意义。

17. 减少DOM元素数量

这是一门大学问,这里可以引申出一堆优化的细节。想要具体研究的可以看后面推荐书籍。总之大原则是减少DOM数量,从而减少浏览器的解析负担。

18. 避免404

例如外链的CSS、JS文件出现问题返回404时,会破坏浏览器的并行加载。

19. 减少Cookie的大小

Cookie中不要塞太多东西,因为每个请求都得带着它跑。

20. 使用无cookie的域

例如CSS、js、图片等,客户端请求静态文件时,减少了Cookie的反复传输对主域名的影响。

21. 不要使用滤镜

IE独有属性AlphaImageLoader用于修正7.0以下版本中显示PNG图片的半透明效果。这个滤镜的问题在于浏览器加载图片时会终止内容的呈现并且冻结浏览器。在每一个元素(不仅仅是图片)它都会运算一次,增加了内存开支,因此它的问题是多方面的。

IE独有的属性AlphaImageLoader被用于修正7.0以下版本中PNG图片的半透明显示问题。然而,这个滤镜在浏览器加载图片时会导致内容展示中断并使浏览器冻结。它会在每个元素(包括但不限于图片)上执行一次计算,从而增加了内存消耗,因此它的问题涉及多个方面。

完全避免使用AlphaImageLoader的最佳策略是改用PNG8格式,这种格式在IE中运行良好。如果确实需要使用AlphaImageLoader,请使用下划线_filter属性来使其对IE7以上版本的用户不起作用。

  1. 不要在HTML中放大图片

    例如,如果你需要的图片尺寸是5050,那么就无需使用一张500500的大尺寸图片,以免影响加载速度。

  2. 缩小favicon.ico并缓存

初学Web前端推荐阅读哪些书籍?

从事前端开发9年,推荐您阅读以下6本书籍:

《JavaScript DOM编程艺术》

这是一本超级畅销的前端书籍,前端程序员必读,建议至少阅读两遍。本书特别适合前端初学者,前端的核心技术是JavaScript,这也是前端的一个难点。本书易于入门,案例生动,有助于初学者更好地理解。书中提及的许多编程思想也适合低中级前端开发者学习。

《JavaScript权威指南》

这是一本前端程序员必读的书籍,不仅适合初学者,也适合已经在做前端工作的程序员随时查阅。书中涵盖了JavaScript的所有内容以及Web浏览器实现的JavaScript API。对于了解JavaScript基础知识,如对象、数组、语法、作用域、闭包等,都非常有帮助。

《JavaScript高级程序设计》

如果你想要系统地学习JavaScript,我强烈推荐这本书。这本书可以一直保留,并在使用过程中标注重点,将来可以作为参考资料,是工作中非常有用的助手。面试时也能很好地运用,我们通常称之为“红宝书”。

《你不知道的JavaScript》

这本书不适合前端初学者,但如果你想要深入了解JavaScript原理,这是每个前端程序员必须研究的一本书。它将引导JavaScript开发者深入研究语言内部,了解每个组件的用途。如果你能透彻理解这本书,那么以后理解任何东西都会更快,更容易掌握。

《Vue.js权威指南》

Vue是目前前端的主流框架,在国内应用最为广泛,因此了解Vue原理必须阅读一本书。我之所以推荐这本书,是因为它对于Vue初学者有质的提升。从基础知识到主流打包以及源码解析,还有许多实践案例,是一本不错的实用书籍。主要内容包括数据绑定、指令、表单控件绑定、过滤器、组件、表单验证、服务通信、路由和视图、vue-cli、测试开发和调试、源码解析及主流打包构建工具等。内容全面,讲解细致,示例丰富,适用于各层次开发者。

《编程之美》

无论是什么岗位的程序员,都必须阅读这本书。没有读过这本书的程序员几乎都是假程序员。书中包含60道算法和程序设计题目,这些题目在近年来的笔试、面试中频繁出现,或被微软员工热烈讨论。作者试图从书中各种有趣的问题出发,引导读者发现问题、分析问题、解决问题,寻找更优的解法。这可以大幅提高编程思维和行业深入思考,最终成为技术大牛。

如果您不想购买纸质版书籍,可以到我的前端交流分享群下载PDF电子书。

我经常在这里回答问题,热爱技术,喜欢帮助别人解答行业技术问题和行业知识。

如果您对学习前端有任何疑问,可以随时向我咨询,我将为您提供一个非常好的前端交流学习群:前面是二九六,中间是二一二,后面是五六二。有问题就在群里问我,这样您可以少走很多弯路,提高工作效率,记得多与有经验的人交流,不要闭门造车。如果没有较好的教程,也可以向我索取。

您对此有什么看法?觉得我推荐的前端书籍靠谱吗?

请在评论区分享您的想法!

以上所转载内容均来自于网络,不为其真实性负责,只为传播网络信息为目的,非商业用途,如有异议请及时联系btr2020@163.com,本人将予以删除。
THE END
分享
二维码
< <上一篇
下一篇>>