前端知识1-4:性能优化进阶

性能优化进阶

  1. navigationStart / end

    表示从上一个文档卸载结束时 => 如果没有上一个文档,这个值和fetchStart相等

  2. unloadEventStart / end

    标识前一个网页unload的时间点

  3. redirectStart / end

    第一个http重定向发生和结束的时间

  4. fetchStart

    浏览器准备好使用请求获取文档的时间

(from cache)

  1. domainLookupStart / end

    HTTP开始建立连接的时间

  2. connectStart / end

    TCP开始建立连接的时间

  3. secureConnectionStart

    HTTPS连接开始的时间

  4. requestStart / end

  5. responseStart / end

  6. domLoading

    开始解析渲染DOM树的时间 => readyState变成loading => readystatechange

  7. domInteractive

    完成解析 => dom树解析完成时间

  8. domContentLoadedEventStart / end

    加载网页内资源的时间

  9. domComplete

    Dom完全解析完成

javascript 复制代码
    <script>
        javascript:(() => {
            var perfData = window.performance.timing;
            var pageLoadTime = perfData.domComplete - perfData.navigationStart;

            console.log("页面加载耗时:", pageLoadTime, 'ms');
        })();
    </script>
Core Web Vitals - 网页核心的性能指标
  • Google,每个CWV代表用户体验的一个不同方面 ------ 加载、交互、视觉稳定性
Largest Contentful Paint(LCP)

衡量装载性能:LCP应该再页面首次开始加载后2.5s内发生

  • 前2.5s进行最大内容的渲染

a. 最大内容包含了哪些?

  • img
  • svg
  • video
  • 通过url函数加载的背景图片元素
  • 包含了大块内嵌内容的块级元素

b. LCP值低下的原因

  • 服务器响应慢
  • 阻断渲染的Javascript | CSS
  • 资源的加载时间过长
  • 客户端渲染机器的影响

c. 针对性的改造

  • 服务器优化

    复制代码
    缓存HTML离线页面,缓存页面资源,减少浏览器直接对资源的请求
    => 缓存机制
    
    对图片的优化,进行图片合理化使用,降低图片大小,加快请求速度
    => 图片上传格式 | 云资源管理
    
    对图片的优化,进行图片合理化使用,降低图片大小,加快请求速度
    => 图片上传格式 | 云资源管理  
    
    重写、压缩、注释过滤......减少最终文件大小,加快加载速度
    => webpack vite 工程化打包
  • 渲染阻断优化

    复制代码
    CSS + JS => 延迟处理
    首屏优化 => 懒加载、异步加载
    CSS模块优化
    SSR服务端渲染
First Input Delay(FID)-- 执行阻塞

衡量交互性,页面的FID应该小于100ms

  • 页面首次输入延迟应该小于100ms

a. 减少JS的执行时间

  • 缩小压缩JS文件

  • 延迟加载不需要的JS

    复制代码
    => 模块懒加载 | tree shaking
  • 尽量减少未使用的polyfill

b. 分解耗时任务

  • 减少长逻辑
  • 异步化

c. worker

web worker | service worker

javascript 复制代码
// 1. web worker
// main.js
// 新增worker
const myWorker = new Worker('worker.js');

// 与main thread之间通信
myWorker.postMessage('hello');
myWorker.onmessage = function(e) {
    console.log(e.data);
}

// worker.js
// 接受消息
self.onmessage = function(e) {
    console.log(e.data);
    // 回调逻辑
    let workResult = '';
    self.postMessage(workResult);
}

// 2. service worker
// main.js
navigator.serviceWorker.register('./service-worker.js');

// service-worker.js
self.addEventListener('install', function(event) {
    //...
})
self.addEventListener('fetch', function(event) {
    //...
})
Cumulative Layout Shift (CLS)

测量视觉稳定性 - 页面稳定性在加载过程中以及渲染后CLS小于0.1

  • 整体布局的移动可能发生在可见元素从一帧到下一帧改变位置的任何阶段

会带来偏移的因素:图片、内容插入、字体

a. 不使用无尺寸元素

=> srcset & sizes

html 复制代码
    <img srcset="yy-320w.jpg 320w,
                yy-480w.jpg 480w
                yy-800w.jpg 800w"
        sizes="(max-width: 320p) 280px
                (max-width: 480p) 440px
                800px"
        src="yy.jpg" alt="yy pic">

b. 整体化内容插入 => 影响整体布局 => 重排 => 重绘

c. 动态字体控制

html 复制代码
    // 加载完默认字体再显示 => 先用默认字体渲染,下载完成之后,再替换成后续字体
    @font-face {
        src: local('xxx Regular'), url(http:// fonts.xxxx.com/xxx.woff2)
    }
相关推荐
Helix2507 小时前
Chrome 性能优化实战:内存节省、硬件加速与 Flags 设置,让浏览器更流畅
chrome·google·性能优化·内存占用·硬件加速·设置技巧·浏览器优化
Data analyse4568 小时前
Cookie过期引发UV上涨的复核方法
服务器·前端·数据分析·uv
Highcharts.js8 小时前
图表开发实战总结| 7 条“黄金法则”与“性能铁律”
前端·javascript·vue.js·编辑器·时序数据库·highcharts
Helix2508 小时前
Electron、WebView 框架与 HTA 对比:桌面应用选型、安全性与现代替代方案
前端·javascript·electron·webview·vbscript·hta·本地html应用
事圆则缓8 小时前
Android 性能优化常见工具与使用场景:从症状到证据的排查指南
android·性能优化
开开心心就好9 小时前
办公软件卸载不干净?专用工具一键清残留
java·前端·人工智能·智能手机·kafka·excel·memcache
静默回滚9 小时前
图片能显示,画进canvas却空白:像素面积上限
前端
补码缩写9 小时前
canvas大图内存怎么算:宽×高×4只是第一份
前端
coding漫漫长路9 小时前
img.decode()报错的图能画,load成功的却是空的
前端
不可能片场9 小时前
AI视频首尾帧控制 用参考图定住镜头
前端·electron