前端性能优化(面试用)

55 阅读1分钟
  1. 提高资源的请求速度
  2. 减少资源请求量
  3. 浏览器渲染的优化

www.nowcoder.com/discuss/463…

前端一次渲染多条数据的思路

juejin.cn/post/684490… 时间分片 虚拟列表

使用DocumentFragment分批渲染

适用于简单dom结构 如li的渲染

DocumentFragment:表示一个没有父级的最小文本对象,作为轻量的document使用,有dom结构但不属于真实dom树节点,DocumentFragment内部修改的时候不会引起回流重绘。

  • 写一个函数 递归调用 接受参数为currentTotal currentIndex 为当前渲染的总数和索引
  • 通过document.createDocumentFragment()创建一个新的DocumentFragment
  • 计算每页要渲染的数据量 通过for循环 创建新的li append到刚刚创建的DocumentFragment中
  • 循环结束后 将Fragmentappend到真实dom里
  • 递归调用下一轮loop(递归结束条件是currentTotal<=0)
//需要插入的容器
let ul = document.getElementById('container');
// 插入十万条数据
let total = 100000;
// 一次插入 20 条
let once = 20;
//总页数
let page = total/once
//每条记录的索引
let index = 0;
//循环加载数据
function loop(curTotal,curIndex){
    if(curTotal <= 0){
        return false;
    }
    //每页多少条
    let pageCount = Math.min(curTotal , once);
    window.requestAnimationFrame(function(){ 
        let fragment = document.createDocumentFragment();
        for(let i = 0; i < pageCount; i++){
            let li = document.createElement('li');
            li.innerText = curIndex + i + ' : ' + ~~(Math.random() * total)
            fragment.appendChild(li)
        }
        ul.appendChild(fragment)
        loop(curTotal - pageCount,curIndex + pageCount)
    })
}
loop(total,index);

虚拟列表

针对长列表 虚拟列表 只对可见区域的列表项进行渲染

虚拟列表容器 里面渲染的项数是固定的

懒加载 按需加载(针对网络请求)真实dom会越来越多

虚拟列表的实现:juejin.cn/post/684490…

首页白屏

单页页面初次加载很大的js文件 出现白屏

通过图片懒加载 /路由懒加载可以优化