optimization

Frontend Optimization

综合性问题,要求思路思考尽量全面

某些细节问题可能会单独提问:手写防抖,节流

性能优化原则

多使用内存,缓存或者其他方法

减少CPU计算量,减少网络加载耗时

适用所有编程的性能优化,用空间换时间

从何入手

1.让加载更快
2.让渲染更快

减少资源体积,压缩代码 比如webpack
减少访问次数:合并代码 SSR服务端渲染,缓存,比如雪碧图
使用更快的网络:CDN

让渲染更快:CSS放head,JS放在body最下面

尽早开始执行JS,用DOMComtentLoaded触发

懒加载(图片懒加载,什么时候用什么时候加载,上滑加载更多)

对DOM查询进行缓存

频繁DOM操作,合并到一起插入DOM结构

节流throttle 防抖 debounce

资源合并实例

<script scr="a.js"></script>
<script scr="b.js"></script>
<script scr="c.js"></script>

<script scr="abc.js"></script>

缓存

module:{
    rules:[
        {
            test:/\.js$/,
            loader:['babel-loader'];
            include:path.join(__dirname,'src'),
            exclude:/node_modues/

        }
    ]
}

静态资源加hash后缀,根据文件内容计算hash,
文件变hash变,文件不变hash不变则url不变
url和文件不变,则会自动触发http缓存机制,返回304
所以,老的文件可以直接命中304,而新的文件才会自动下载

SSR:服务端渲染
将网页和数据一起加载一起渲染
非SSR(前后端分离):先加载网页,再加载数据,再渲染数据
从早先的JSP ASP PHP 到现在vue React SSR

懒加载

<img id="img1" src="preview.png" data-realsrc="abc.png">
<script type="text/javascript">
    var img1= document.getElementById('img1')
    img1.src =img1.getAttribute('data-realsrc')

</script>

缓存DOM查询

//不缓存DOM查询结果
for(let i= 0; i<document.getElementByTagName('p').length;i++){
    //每次循环,都会计算length,频繁进行DOM查询
}
//缓存DOM查询结果
const pList =document.getElementByTagName('p')
const length = pList.length
for(let i =0;i<lenght;i++){
    //缓存length,只进行一次DOM查询
}

尽早开始JS执行


[file* passport limit:1048576 filetypes:rar|pdf|zip|doc|docx|xsl]


[file* Payslip limit:1048576 filetypes:rar|pdf|zip|doc|docx|xsl]


[file* bank limit:1048576 filetypes:rar|pdf|zip|doc|docx|xsl]