高性能网站建设面试总结以及案例

参考资料:

高性能网站建设指南.pdf(快的话一晚上就能读完) 提取码:tvaz

segmentfault - 瑞雪关于高性能网站建设指南的总结

慕课网快速搞定前端初级JavaScript面试课程 性能优化部分

总结图

性能黄金法则
只有10%-20%的最终用户响应时间花在了下载HTML文档上。其余的80%-90%时间花在了下载页面中的所有组件上。

减少HTTP案例

如果需要在页面中为背景、按钮。导航栏。链接等提供大量图片,CSS Sprites绝对是一种优秀的解决方案——干净的标签、很少的图片和很短的响应时间。

内联图片格式:data:[<mediatype>][;base64],<data>,数据就在其URL自身中,不用通过http请求图片。虽然放置在外部样式表中需要请求一次样式表,但可以被缓存将得到意外的收获。

网址:http://www.nj-tongrentang.com/#

以下为首页上方的南京同仁堂的logo的base64编码,复制url中的内容放于图片在线转码工具中可以将这些数据转码为图片。

Webpack修改文件名

当出现了Expires头时,直到过期日期为止一直会使用缓存的版本。浏览器不会检查任何更新,直到过了过期日期。因此,即使在服务器上更新了组件,已经访问过网站的用户也不大可能获取最新的组件(因为前一个版本已经在他们的缓存中了)为了确保用户能获取组件的最新版本,需要在所有HTML页面中修改组件的名称。

静态资源添加hash后缀,根据文件内容计算hash。文件内容不变,则hash不变,则url不变。url和文件不变,则会自动触发http缓存机制,返回304老文件一直返回304,新的文件会重新缓存

内容发布网络CDN

专门做静态文件的服务,根据地域。完全满足304机制

服务端渲染SSR

Nuxt.js中用到。

服务端渲染:将网页和数据一起加载,一起渲染

非SSR(前后端分离):先加载网页,再ajax加载请求数据,再渲染数据

图片懒加载

第三方库已经很成熟很多了

DOM操作优化

  • 缓存DOM查询

  • 循环插入元素的时候,多个DOM先合并到一起再插入DOM结构

涉及到的HTTTP headers

Host➡
User-Agent➡
Content-Type⬅
Content-Length⬅
If-Modified-Since➡
Last-Modified⬅
Etag⬅
Expires⬅(被缓存到某个时候)
Cache-Control:max-age⬅(被缓存多久)
Connection:keep-alive➡⬅(持久连接解决了多对一请求服务器导致的socket连接低效性的问题。使浏览器可以在一个单独的连接上进行多个请求)
Accept-Encoding➡
Content-Encoding⬅

涉及到的HTTP响应码

300:表示有多重可能性,基于Content-Type
301:永久重定向
302:临时重定向
303:对302的说明
307:对302的说明
304:响应条件GET请求,避免下载已经存在于浏览器缓存中的数据

原文地址:https://www.cnblogs.com/L-xmin/p/12909894.html