您现在的位置:首页 >> 低碳养生

前端效能优化实战

时间:2025-02-18 12:21:21

Frame

window.requestAnimationFrame() 告诉网页你希望拒绝执行一个OVA,并且决定网页在下次重绘早先绑定所称定的回调函数十分新OVA。

这里借到 MDN 的描述,顾名思义就是传入一个函数,让网页在下一次CGI早先展开绑定。那么基于这个特性,结合上面共享的 FPS 存量化下述编译器,我们可以发掘出,如果我们小规模对 requestAnimationFrame 展开绑定,那么每次绑定的间隔应在 16.7ms 据估计,即满足我们对于首页明快度 60 FPS 的决定,可以运用于如下编译器在控制台拒绝执行试试看:

let lastTime = 0;

const measure = () => {

console.log(`${Date.now() - lastTime}ms`);

lastTime = Date.now();

requestAnimationFrame(measure);

};

measure();

首屏耐用性

首屏耐用性作为我们最关心的两大测试方法之一,在耐用性建模的场景里面守住了相当多的经济测试方法,那么对于首屏的耐用性我们有哪些衡存量测试方法呢?

针对这个情况,Google 曾经明确指出过一系列的以使用者感官为其里面心的耐用性测试方法。

FP、FCP、FMP

FP(First Paint 音译为“首次绘图”)推选网页第一次向摄像头传输数据像素的粗时间,极少回应意味着早先开始绘图了,极少极少普遍性比极小。

FCP(First Contentful Paint 音译为“首次内容可绘图”)推选网页第一次向摄像头绘图 “内容可”(只有首次绘图文本、幻灯片(包含背景图)、非金色)。

相比之下,FCP 所称的是网页首次绘图来自 DOM 的内容可。例如:文本,幻灯片,SVG,canvas多种类型等,这个粗时间点叫 FCP。

FMP(First Meaningful Paint 音译为“首次有效绘图”)回应首页里面有普遍性的内容可开始出现在摄像头上的粗时间点。它也是我们来衡存量使用者查找感官的主要测试方法。

FMP 其本质上是一个表象认知测试方法,是通过一个插值来猜测某个粗时间点似乎是 FMP,但是存量化作法过于复杂而且不吻合,后来 Google 也放弃了 FMP 的观测插值,转而采用十分加明确的合理测试方法 - LCP。

CWV(Core Web Vitals)

两大 Web 测试方法是适用于所有网页的 Web 测试方法子集,每位网页所有者都应观测这些测试方法,并且这些测试方法还将辨识在所有 Google 辅助工具里面。可有两大 Web 测试方法推选使用者感官的一个并不相同不足之处,能够展开极少极少观测,并且反映出以使用者为其里面心的关键结果的普通人感官。

目前的 Web 两大测试方法由三个不足之处构成 — 首页查找耐用性、交互性、光影耐用性,包含如下三个测试方法及阈数值:

Largest Contentful Paint (LCP):最主要内容可绘图,观测查找耐用性。为了共享较佳的使用者感官,LCP 应在首页首次开始查找后的2.5 秒内遭遇。 First Input Delay (FID):首次读写延迟,观测交互性。为了共享较佳的使用者感官,首页的 FID 有误100 毫秒或十分粗。 Cumulative Layout Shift (CLS):累积结构设计对齐,观测光影耐用性。为了共享较佳的使用者感官,首页的 CLS 应保有在 0.1. 或十分少。

1)LCP

LCP 关注的是首屏里面最主要多种类型CGICGI的粗时间,和 FCP 并不相同的是,FCP 十分关注网页什么时候开始绘图内容可,比如一个 loading 首页或者骨架屏,并很难极少极少价数值,所以 LCP 比起于 FCP 十分适合作为首屏测试方法。

拿 Detail 页比如说,在 FCP 时,商品幻灯片并未查找,此时对于使用者而言,一个近乎白屏的首页是才有可交互价数值的,在 LCP 时,幻灯片早先完成了查找,首屏主要多种类型也完全查找完毕,此时的粗时间作为首屏粗时间,才是比较近似于使用者体感的。

既然 LCP 是根据首页上守住伸展面积最主要的多种类型CGI粗时间确定的,那么多种类型包含哪些呢?

幻灯片 内嵌在 svg 里面的 image 多种类型 摄像机的写真 通过 url() 查找的 background image 文句

在 webpagetest 上可以很直观的见到意味着 LCP 多种类型的详情文档

多种类型伸展面积的存量化游戏规则有如下几点:

在 viewport 内可见多种类型的体积,如果是超出可视七区外或者被裁减、遮住等,都毕竟入该多种类型体积 对于幻灯片多种类型来说,体积是取幻灯片极少极少体积和早期体积的极小数值,即Min(极少极少体积,早期体积) 对于文句多种类型,只取能够伸展文句的很小矩形伸展面积 对所有多种类型,margin、padding、border 等都毕竟

2)FID

FID 测试方法是所称使用者首次和网页展开交互到网页响应惨案的极少极少定时粗时间,可以希望象一下,如果在你点选了一个 button 后,首页很难任何变化,2-3s 后才开始响应,可希望而知感官是十分糟糕的。

FID 是否是的交互行为有:

点选、可让、按键等(不包含滚动和缩放) 有惨案绑定的行为,比如登记注册在某个 dom 上的 click 惨案

那么为什么时会产生交互延迟呢?比如我在 button 上登记注册了一个 click 惨案,例如:

btn.addEventListener('click', () => {

// do something

})

按照预计,使用者点选按钮的时候,回调函数时会被直接触发,但是如果意味着主线抱一被CGI、Long Tasks 占用,这个回调的拒绝执行就时会被推迟,就时会引发 FID 时长增加。

但是 FID 作为一个“非合理数值”,须要使用者展开交互才能搜集到,使用者的交互必定会,除此以外也时会对测试方法的搜集、统计导致阻碍。

3)CLS

CLS 是用来衡存量光影界面耐用性的一个测试方法,所称的是首页产生的近十年累计结构设计对齐分数。我们在日常业务里面常会时会用到懒查找、骨架屏等作法,用较低的成本再简介首页框架,再用动态CGI的作法,来对首页内容可展开装入,如果此时结构设计遭遇变化,比如动态查找的多种类型和原来这样一来的多种类型体积不相符,似乎就时会引发使用者误操作,阻碍使用者感官,CLS 就是为了度存量这类情况而实际上。

当我们在说结构设计对齐的时候,所称的是:首页里面一个可见多种类型的起始一段英哩遭遇彻底改变,而多种类型的增补则并不时会触发结构设计对齐。

那么如何下定义对齐的近十年累计呢?有如下几个内涵:

CLS 存量化的并非首页整个周期的对齐分数之和,而是累计数值略小于的近十年结构设计对齐 对齐相隔的粗时间少于 1s,且整个窗口的最主要小规模粗时间为 5s,则被不计近十年对齐 统计分析辅助工具

DevTools

DevTools 毕竟和前端老师打交道最多的辅助工具之一了,主要用来发送给日志、发送给互联网劝说、debug 首页等等,我们同时还可以借助于它对首页耐用性展开统计分析。

Network

如上图所示,这是我们很熟悉的 Network 界面,功能上我用红框大概好好了一下分界:

选项七区:Preverse Log 可以在平板里面存留互联网劝说,在首页重定向、当页跳转时可以存留早先首页的日志;Disable Cache可以难以访问网页的 http 线抱一机制;右侧的 No throtting 选择器可以对意味着互联网状态展开三维(Fast 3G、Slow 3G 等等) 劝说本表、劝说状态 劝说传输数据密度:配置文件简介 gzip/br 压缩后的体积 Waterfall:森林资源查找的时序和每一步的不间断

Performance

Performance 平板可以共享十分加专业的耐用性文档

WebPageTest

WebPageTest是一个线上耐用性统计分析和平台,除了近似于的 cwv 耐用性数据外,还有 performance、lighthouse 调查结果、首页对比等功能。

读写 URL 后我们可以简单的选择一个 simple configuration 展开测试,配置文件时会拒绝执行 3 测试。这里我们可以见到首页的一些两大测试方法,可以点开对应的测试方法项展开十分详细的统计分析,在 Waterfall 首页我们也可以很直观的见到意味着首页的劝说顺序、劝说不间断、关键数据流(FCP、LCP等等)

建模行为

互联网传输数据建模

这里我们注重看三个粗时间测试方法:

Total Connection Time:全面性的连通不间断 TTFB(Time to First Byte):首字节传输数据不间断 Content Download:内容可传输数据不间断

Total Connection Time

引发连通不间断长的状况时会有很多种:

机器英哩应用抱一式的物理英哩过长(新泽西州 - 里面国) 重复建联,在首页里面运用于了多个并不相同URL,每次都须要之后创建连通 应用抱一式互联网环境情况

那么为了解决这些情况我们可以采取哪些行为呢:

借助于 CDN 对主URL展开动态减慢,对森林资源URL展开线抱一,借助于破碎数据流的特性缩粗使用者劝说英哩 借助于 pre-connect 对URL展开预建联,同时对URL展开收拢,这样在 http2 的情况下可以减低建联不间断 充分借助于 http 线抱一和 servicesworker 劝说拦截的特性,对可线抱一的森林资源展开本地线抱一,减低筹划互联网劝说次数

TTFB + Content Download

TTFB 都从筹划劝说到收到服务器劝说第一个字节的粗时间,一般来说,如果首屏 html 劝说的 TTFB 能达到 100ms 少于,就早先具备不错的感官了,如果超过了 500ms,那么使用者就能明显的感受到白屏,精准的来说,TTFB 是在完成 DNS 查询、TCP 合影、SSL 合影后筹划 HTTP 劝说发送者到发送到到应用程序第一个响应发送者的粗时间差,据估计相等 一个RTT(Round-Trip Time 即往返时延)+ ServerRT。

那么当 TTFB 不间断很长时,如何展开建模呢?可以参考如下几种作法:

减低劝说传输数据存量,可避免无用文档 减低应用程序处理粗时间(增加线抱一、慢 SQL 治理等等) 对首屏 HTML 内容可好好因特网CGI,由于网页对 HTML 的解析并不依赖与下载完整的 HTML,而是解析一部分CGI一部分,所以应用程序可以再将部分准备好的内容可通过因特网CGI的作法赶回,而不是等全部内容可就绪后再赶回 懒查找:必需赶回应当内容可,例如超长首页,可以再赶回首屏见到的内容可,仅剩的通过异步查找的作法展开CGI,分多个接口展开劝说

那么,是 TTFB 越粗越高吗?

似乎也不尽然,我们须要准备好 TTFB 和 Content Download 的取舍,例如当我们开启 gzip/br 压缩的时候,TTFB 必然时会方形上涨趋势,但是相对应的森林资源密度变短,就时会减缓传输数据不间断,减低 Content Download 粗时间,所以我们应关注的使用者普通人的感官,而不是一味地盯着粗时间展开建模。

preload

preload 也就是预查找,关于预查找的作法有很多种,端内和端外也各自有并不相同的方案,比较罕见的有:

preload 表单: serviceworker 预查找:flasher、workbox-preload 等 zcache:在应用程序端内通过森林资源离线包的作法展开预查找 相关链接 Lighthouse Scoring Calculator:Lighthouse Scoring calculator WebPageTest:WebPageTest - Website Performance and Optimization Test Web Vitals:Web Vitals web-vitals - Github:GitHub - GoogleChrome/web-vitals: Essential metrics for a healthy site.

注解链接:

本文为阿里云原创内容可,未经并不需要不得发表文章。

髋骨关节炎如何治疗
济南癫痫医院地址
西安看白癜风去什么医院最好
杭州哪的妇科医院好
武汉男科专科医院哪好
艾得辛艾拉莫德片的主要作用和功效
类风湿关节炎疼痛如何缓解
全民健康网药品
眼睛疲劳过度怎么缓解恢复
类风湿性关节炎有哪些症状