前端性能优化

1 . 网页加载过程

NDS解析(域名-->IP地址) ==》根据浏览器 IP 地址向服务器发起 HTTP 请求 ==》服务器处理HTTP请求,返回给浏览器

2 . 性能优化(空间换时间)
让加载更快 方法:

(1)减少资源体积:压缩代码

(2)减少访问次数:

1. 资源合并 ;

1.png

2. SSR服务器端渲染,缓存。使用(hash)

1.png

(3)使用更快的网络:CDN


1.png

1.png
让加载更快 方法:

1. css放在头部请求 js文件防在底部请求
2. 尽早开始执行js文件,用DOMContentLoaded触发
window.onload速度慢,要在全部资源(包括图片视频)加载完成以后才开始加载。
DOMContentLoaded 页面渲染完成即可加载(此时视频图片可能还没加载完成)

 <img id='img' src="https://img.alicdn.com/imgextra/TB1KQxZGLb2gK0jSZK9XXaEgFXa-600-400.jpg" alt="">
<script>
    const img = document.getElementById('img');
    img.onload = function(){
        console.log('onload')
    }
    window.addEventListener('load',function(){
        console.log('window')
    })
    document.addEventListener('DOMContentLoaded',function(){
        console.log('DOMContentLoaded')
    })
    
1.png
1.png

3. 图片懒加载,上滑加载更多

1.png

4. 对Dom查询进行缓存

1.png

5. 不要频繁操作DOM,可以合并到一起插入DOM结构

1.png

6. 节流防抖(让渲染更加流畅)

1.png

手写防抖

 <input type="text" id='input1'>
const input1  = document.getElementById('input1');
 function debounce(fn,delay=500){
           let timer = null;
           return function(){
               if(timer){
                   clearTimeout(timer)
               }
               timer = setTimeout(()=>{
                   fn()
                   timer = null ;
               })
           }
       }
 input1.addEventListener('keyup',debounce(function(){
           console.log(input1.value)
  }),1000)

节流

1.png
 <div id="div1"  draggable="true"  style="width: 200px;height: 100px;background-color: salmon;">拖拽运动</div>
  const div1 = document.getElementById('div1')
function throttle(fn,delay = 100){
            let timer = null;
            return function(){
                if(timer){
                    return
                }
                timer = setTimeout(() =>{
                    fn.apply(this,arguments);
                    timer = null
                })
            }
        }
        //arguments 接收 e 这个参数
        div1.addEventListener('drag',throttle((e)=>{
            // console.log(e)
            console.log(e.offsetX, e.offsetY)
        }))
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。