首页 > 其他分享 >前端性能优化1

前端性能优化1

时间:2023-07-01 14:02:09浏览次数:32  
标签:缓存 渲染 前端 worker js 加载 优化 性能 页面

1.Navigation Timing API

1. unloadEventStart / end

前一个页面的unload时间戳

=> 无前置页面时? => 值为0

=> 前置页面域不同 => 值为0

2. redirectStart / end

第一个http重定向发生的时间 / 最后一个http重定向完成的时间

=> 有跳转且是同域名 => 否则值为0

3. fetchStart

浏览器准备好使用HTTP请求抓取文档的事件

4. domainLookupStart / end

开始/重新建立连接的时间

=> 只是建立

=> 如果是长链接 => 值等于fetchStart

5. connectStart / end

TCP建立握手的开始 、 完成

=> 如果是长链接 => 值等于fetchStart

6. secureConnectionStart

HTTPS连接建立开始时间

7. requestStart / end

请求发起的真实时间

=> 包含了本地缓存的读取

8. responseStart / end

回包真实时间

=> 包含了本地缓存的读取

9. domLoading

开始解析渲染DOM树 => 抛出readystatechange事件

10. domInteractive

完成了DOM树的解析 => 抛出readystatechange事件

=> 这个时候并没有开始加载网页资源

11. domContentLoadedEventStart / end

DOM解析完成后,开始 / 结束加载网页内资源的时间

12. domComplete

整体DOM树解析完成 => 抛出readystatechange事件

13. loadEventStart / end

load事件发送给文档 / 回调执行完成的时间

网络请求的时间 从 domainLookupStart 到 responseEnd

静态页面渲染时间(不包含网络请求) 从 domLoading 到 domComplete

动态页面渲染时间 从 loadEventStart 到 loadEventEnd

静态页面+动态页面渲染时间 从 responseEnd 到 loadEventEnd

```js

<script>

javascript:(() => {

{/* 整个页面加载时间 */}

cosnt perfData = window.performance.timing;

const pageLoadTime = perfData.loadEventEnd - perfData.navigationStart;

window.trace('当前页面加载耗时:', pageLoadTime, 'ms');

})();

</script>

```

2. Core Web Vitals - 网页核心的性能指标

* Google提出 => 可衡量的、能够反应真实体验的:加载、交互、视觉稳定性

3. LCP - Largest Contentful Paint 衡量装载性能

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

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

- <img>元素

- <svg>元素

- <video>元素

- 通过url()函数加载背景图片的元素

- 包含文本整体节点的块级元素

b. LCP值低下的原因

- 服务器响应慢

- 阻断渲染的JS和css

- 资源加载慢

- 客户端渲染机器性能影响

c. 针对性改造呢

- 服务器优化

缓存HTML离线页面,缓存页面资源,减少浏览器对于资源的请求

=> 强缓存、协商缓存

尽量减少资源阻断渲染:CSS和JS做级联、内联、合并

=> 浏览器原理

对图片进行优化 JPG WEBP => 降低资源大小 => 加快请求速度

使用CDN加快请求速度 云资源管理

利用工程化做项目层级优化 => HTML进行重写优化、压缩空格、去除注释、去除打印、调整格式

提升首屏优化 => 懒加载、资源按需加载、service worker、服务端渲染

4.FID - First Input Delay

衡量交互性。

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

a. 减少JS执行时间

- 缩小并压缩JS文件

- 延迟执行不需要的JS

- 尽量减少用不到的polyfill

b. 分解耗时的任务

- 任何阻塞主线程超过50ms => 长任务

- 长任务拆分成较小的异步任务

c. worker

- web worker / service worker

```js

// 1. web worker

// main.js

const myWorker = new Worker('worker.js');

// 与mainthread之间通信

myWorker.postMessage('hello');

myWorker.onmessage = function(e) {

console.log(e.data);

}

// worker.js

self.onmessage = function(e) {

console.log(e.data);

self.postMessage(workerResult);

}

// 2. service worker

// main.js

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

// serveice-worker.js

self.addEventListener('install', event => {})

self.addEventListener('activate', event => {})

self.addEventListener('fetch', event => {

event.respindwith(

caches.match(event.request)

)

})

```

5. CLS - cumulative layout shift

衡量视觉稳定性 => CLS页面应当保持在小于0.1

* 布局的移动可能发生在可见元素从一帧到下一帧改变的位置

a. 不使用无尺寸元素

=> srcset & sizes

```js

<img srcset="yy-320w.jpg 320w,

yy-480w.jpg 480w

yy-800w.jpg 800w"

sizes="(max-width: 320px) 280px,

(max-width: 480px) 440px,

800px"

src="yy-800w.jpg" alt='yyimg'>

```

b. 减少内容的插入 => 影响整体的布局

c. 动态字体控制

<!-- => <link rel="preload">预加载字体 -->

#### CWV 工具 - core web vitals annotations

#### 基石 => performance

#### 性能优化的另一种可能 - bigpipe —— 页面分解成若干的pagelet

1. 服务前端接收来自客户端HTTP请求

2. 存储层去获取数据 => 组装HTML => 响应给客户端

标签:缓存,渲染,前端,worker,js,加载,优化,性能,页面
From: https://blog.51cto.com/u_12207234/6599320

相关文章

  • 9.模型优化
    模型三角形数量增加增加模型三角形数量目的是使模型表面更加光滑调整三角形的位置路普细分LoopSubdivis一个三角形拆成4个loop不是循环细分如何调整细分后的三角形的位置?(为了让细分后的平面变平滑)新的细分点在路普细分中,假定两个相邻三角形中下图白色点为相邻......
  • 性能测试介绍
    1.简介1.1说明如未特殊说明,涉及工具的理论都是基于jemter来说的问题性能测试能不能模拟客户操作,发现服务器性能问题? 很难1.2什么是软件性能从相关角色的角度关注点来看用户:只关心操作快慢业务或产品:关注产品快慢,响应时间运维:关注快慢、响应时间、监控各种资源、确保......
  • Vue项目卡顿慢加载?这些优化技巧告诉你!
    前端开发是一个快速发展的领域,每天都会涌现出新的技术和工具。在实现功能的同时,开发人员面临着许多挑战如代码可维护性,加载时间,访问速度,构建速度等问题。这些挑战可能直接影响网站的性能和用户体验,需要采取一些优化措施来改善问题。在本文中,我们将探讨一些前端项目优化的具体措施......
  • 为什么面试官这么爱问性能优化?
     笔者是一个六年前端,没有大厂经历,也没有什么出彩的项目,所以今年以来,前端现在这种行情下并没有收到多少面试,但是为数不多的面试中,百分之九十都问到了性能优化的问题,而且问题都出奇的一致:平时的工作中你有做过什么性能优化?对于这个问题其实我的内心os是(各位轻喷~):你们怎么都这么爱问......
  • 前端Vue自定义勾选协议组件 可用于登录 注册等场景
    前端Vue自定义勾选协议组件,可用于登录注册等场景,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13299效果图如下:cc-protocolBox使用方法<!--agree:是否同意勾选 protocolArr:协议数组@click:勾选同意点击@protocolClick:协议点击--><......
  • 前端Vue自定义登录界面切换tabs 账号登录验证码登录模版 支持手机号校验邮箱校验验证
    前端Vue自定义登录界面切换tabs账号登录验证码登录模版支持手机号校验邮箱校验、验证码发送, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13298效果图如下:cc-loginTabs使用方法<!--selIndex:选中序列 tabs-arr:tabs数组 @tabClic......
  • aws 开源的微前端发现实现 frontend-discovery
    实际上此协议已经开放一段时间了(一年左右),里边一些实践还是很不错的,对于微前端实现的同学可以参考学习同时官方也提供了一个基于aws服务的参考实践,作者的一些演讲也是值得学习的参考格式如下图,可以看到包含了一些不错的设计,以及对于实际的部署维护,包含了元数据,多版本,fallback,......
  • 开源通用高性能的分布式id序列组件
    原文地址:https://ntopic.cn/p/2023062101/Gitee源代码仓库:https://gitee.com/obullxl/sequence-jdbcGitHub源代码仓库:https://github.com/obullxl/sequence-jdbc分布式id序列说明业务数据的存储,少不了数据记录的id序列。id序列(或称序列)的生成方式有很多种,比如当前时间戳、......
  • SAP HANA性能优化与分析(持续更新中)
    本文描述了可以用来识别和解决特定性能问题的措施,并向您展示了如何在以下方面提高SAPHANA数据库的性能:•主机资源(CPU、内存、磁盘)•数据结构的大小和增长•事务性问题•SQL语句性能•安全性、授权和许可•配置......
  • 双写一致性之定时更新、异步发送短信、异步秒杀逻辑前后端、课程页页面前端、课程相关
    目录一、双写一致性之定时更新任务逻辑二、异步发送短信视图函数任务三、异步秒杀逻辑前后端1.1前端Sckill.vue视图类路由任务四、课程相关表分析先创建一个course.app表数据迁移表六、课程表数据录入七、课程主页接口一、双写一致性之定时更新任务逻辑@app.taskdefupdate......