剖析web前端性能优化原理,分析当前大公司在性能优化上所做的实践。
文件合并存在的问题:
新建 fis-conf.js
每种图片格式都有自己的特点,根据不同的业务场景选择不同的图片格式是很有必要的。
优点:可以减少网站的 HTTP 请求数量 缺点:整合图片比较大时,一次加载比较慢
webp 的优势体现在它具有更优的图像数据压缩算法,能带来更小的图片体积,而且拥有肉眼识别无差异的图像质量;同时具备了无损有损压缩模式、Alpha 透明以及动画的特性,在 JEPG 和 PNG 上的转化效果都非常优秀、稳定和统一。
www.iconfont.cn https://tinypng.com
图片转换网站:zhitu.isux.us 在图片小于8kb的时候做一个构建工具inline 的选择 雪碧图:www.spritecow.com
需要去监听 scroll 事件,在 scroll 事件的回调中去判断我们懒加载的图片是否进入可视区域。
// 获取可视区域的高度
var viewHeight = document.documentElement.clientHeight
function lazyload() {
var eles = document.querySelectorAll('img[data-original][lazyload]')
Array.prototype.forEach.call(else, function(item, index) {
var rect
if (item.dataset.original === '') return
rect = item.getBoundingClientRect()
if (rect.bottom >= 0 && rect.top < viewHeight) {
!function() {
var img = new Image()
img.src = item.dataset.original
img.onload = function() {
item.src = img.src
}
item.removeAttribute('data-original')
item.removeAttribute('lazyload')
}()
}
})
}
lazyload()
document.addEventListener('scroll', lazyload)
频繁触发重绘与回流,会导致UI 频繁渲染,最终导致js 变慢
将频繁重绘回流的 DOM 元素单独作为一个独立图层,那么这个 DOM 元素的重绘与回流的影响只会在这个图层中。
Chrome 创建图层的条件
<video>
节点避免使用触发重绘回流的 css 属性 将重绘、回流的影响范围限制在单独的图层之内
因为 HTTP 请求无状态,所以需要 cookie 去维持客户端状态。
cookie 的生成方式:
过期时间 expire
cdn 域名要和主站域名分开
在后台或者其他线程中进行相关的大规模的数据运算和获取,获取了之后将数据返回到主线程,避免主线程被巨大的逻辑阻塞。
with streaming support + component caching