黑马程序员技术交流社区

标题: 【南京前端】网页性能优化,缓存优化、加载时优化 [打印本页]

作者: 大蓝鲸小蟀锅    时间: 2018-7-17 23:29
标题: 【南京前端】网页性能优化,缓存优化、加载时优化
本帖最后由 大蓝鲸小蟀锅 于 2018-7-20 23:55 编辑

本文提供一个优化网页性能的大概思路,具体操作网上资料很多。
缓存优化
性能优化第一步,便是管理好页面的缓存,避免重复下载资源。否则,即增加服务器压力,又折磨用户的钱包。
浏览器缓存机制
按照这一套逻辑,便可规划好网站的缓存。
如果资源提前过期,如何通知浏览器更新资源?
通常无法做到这一点,因为浏览器发现资源没过期,根本不会发出请求。 但是可以通过修改资源的网址来实现。所以需要给资源文件名加上版本号或者随机标记。例如 style.1234.css。 也就是说,不要让浏览器缓存html文件,否则,过期之前,浏览器都不会请求服务器。
加载时优化消灭不必要的下载
最好的优化,便是根本不下载资源。所以要尽量减少比不要的资源。
压缩所有可以压缩的资源代码自不用说,都是文本,全部压缩。优化图片优化字体关键渲染路径
浏览器渲染一张网页通过以下步骤。
优化关键渲染路径,便是指优化这个渲染过程,让网页尽快呈现出来。
cssjs动画优化
重绘过程
CSS选择器
reflow, layout
Chrome, Opera, Safari, Internet Explorer中叫layout. 火狐称之为Reflow。
reflow总是牵涉整个文档流。
Paint
浏览器渲染网页时,会将网页分层(layer),最后将不同层合并,然后完成渲染。 同一层中,哪怕只有一个小小的元素发生变化,整个层都会被repaint。 这一点可以在开发者工具的Paint Profiler界面中观察到,layer界面中可以观察网页有多少个layer。
will-change属性可以为元素创建新layer(works in Chrome, Opera and Firefox).或 transform: translateZ(0);(works in all browsers).
用transform, opacity来制作动画,可实现无layout和repaint. (Devtool Performance的main中无动画相关事件。)
debounce
debounce:不要高频率调用函数,事件连续触发时,只调用一次函数。
监听函数可能会调用perventDefault, 导致compositor线程必须等待监听函数执行完成。 不过新扩展的addEventListener方法第三个参数可以解决此问题。

小技巧
——清风徐来






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2