Nuxt3之使用lighthouse性能测试及性能优化实操
lighthouse性能测试工具
什么是 LightHouse 呢
Lighthouse 是一个开源的自动化工具,用于提高网页的质量。可以通过浏览器的开发者工具运行,也可以作为命令行工具或 Node.js 模块集成到持续集成系统中。Lighthouse 可以帮助开发者:
- 性能优化:评估网页加载速度和响应时间,提供改进建议。
- 可访问性:检查网页是否符合无障碍标准,确保所有用户都能轻松访问。
- 最佳实践:检测网页是否存在常见的开发错误,如未压缩的资源、不安全的内容等。
- SEO 优化:分析网页的搜索引擎优化情况,提供提升排名的建议。
- PWA 兼容性:评估网页是否符合渐进式 Web 应用(PWA)的标准。
如何使用 LightHouse 呢
使用 Lighthouse 非常简单,只需在 浏览器开发者工具中选择 Lighthouse 面板,设置需要的审计选项,然后点击“Generate report”即可生成详细的报告。报告中不仅包含评分,还提供了具体的优化建议和改进方法。
快捷入口:本文以Edge浏览器窗口为例,(Chrome同理) 点击键盘 F12 根据下图操作即可
性能优化归纳
-
静态资源优化:
Nuxt3 静态资源目录有:Public , Assets
① 共性:均是存放 css,js,img 等静态资源文件
② 编译区别:
public 在打包过程中,文件不会被编译或处理,直接原样复制到输出目录。
sssets 目录则是存放需要经过构建、编译处理的静态资源。
③ 引用区别:
public 资源在页面中引用:/img/avatar.png
assets 资源在页面中引用:~/assets/img/avatar.png
建议:将css,img,svg,txt,json,js 文件放在 assets 目录下,打包时经过 vite 构建生成哈希值的文件名可提高缓存效率,同时配置压缩工具,进一步压缩包体积,也可提高性能。
依据参考 Vite 文档关于静态资源存放说明 -
nuxt.config.ts 配置 资源包分析工具
// nuxt.config.ts -> build 属性
build: {analyze: {// 是否启用分析工具,默认为 falseenabled: true,// 分析报告的输出目录,默认为 '.nuxt/analyze'reportFilename: '.nuxt/analyze/report.html',// 是否在浏览器中自动打开分析报告,默认为 falseopen: true,// 分析器类型,可选值有 'webpack-bundle-analyzer' 和 'source-map-explorer'analyzerMode: 'server',// 分析服务器的端口号port: 8888,// 其他 webpack-bundle-analyzer 配置项generateStatsFile: false,statsFilename: '.nuxt/analyze/stats.json',statsOptions: null,logLevel: 'info',},},
代码可以直接使用。无需安装插件。开启资源分析配置,可以让你清晰明了的知道构建后的依赖文件大小,能够为分包优化提供指引
- nuxt.config.ts 中配置 vite 分包优化
// nuxt.config.ts -> vite 属性
vite: {build: {rollupOptions: {output: {// 针对 id 进行分包,减轻 node_modules 构建后的大小,提高运行速度// 具体 对哪些依赖包分包,可以按照依赖分析工具具体分包,也可以根据你package.json依赖进行分包manualChunks: (id) => {if (id.includes('vue-i18n')) {return 'i18n';} else if (id.includes('vant')) {return 'vantUI';} else if (id.includes('css')) {return 'styleCss';}else if (id.includes('pinyin')) {return 'pinyinPlugins';} else if (id.includes('pinia')) {return 'piniaPlugins';}},},},},},
代码分包类型需要根据项目实际进行分包,每个人安装及使用的依赖不同。
具体配置详情可查阅 Rollup 关于分包文档
- nuxt.config.ts 中开启构建压缩,这个不需要安装插件
// nuxt.config.ts -> nitro 属性nitro: {// 开启gzip压缩compressPublicAssets: true,},
传统需要安装 gzip 压缩工具 ,nitro 是Nuxt 的底层核心,为Nuxt 提供性能、框架,路由服务。
如果启用,Nitro 将生成支持的公共资产类型和预渲染路由的预压缩(gzip 和/或 brotli)版本 大于 1024 字节的 public 目录。使用最佳压缩级别。默认使用gzip压缩
Nitro compressPublicAssets 配置链接
-
Nitro 与 Nuxt 3 的关系
- 底层框架:Nitro 是 Nuxt 3 的底层服务器框架,负责处理服务器端的逻辑。
它独立于 Nuxt 3,可以单独使用,但通常与 Nuxt 3 一起使用以提供完整的 SSR 和 SSG 功能。 - 性能优化:Nitro 通过优化服务器端的处理流程,提高了 Nuxt 3 应用的性能。
它支持多种部署环境,包括传统的服务器、无服务器函数(如 AWS Lambda、Vercel Functions 等)和静态托管服务。 - API 路由:Nitro 提供了强大的 API 路由功能,允许开发者在 Nuxt 3 应用中轻松创建和管理 API 端点。
这些 API 路由可以与 Nuxt 3 的页面和组件无缝集成,提供统一的开发体验。
-
页面代码主体分割
若SSR页面初始化阶段执行的每个函数代码超过50行,除 API接口 部分,涉及赋值,复杂运算,动画效果,pinia插件缓存的代码,要提取出来另外包装,否则JS运算阶段会造成阻塞,不利于浏览器渲染速度。
不要套娃!!!不要套娃!!!不要套娃!!!
JS 是顺序渐进单线程语言,函数套娃在服务端渲染阶段会严重阻塞进程!导致服务端渲染不全面或水合不匹配。 -
网络图片优化
- Nuxt 虽然提供了 Nuxt/Image 组件, 但是使用此组件构建后会平白增加近乎50M的体量,我认为不值得。原生Img 的属性配置足矣。
- 特大超大图片,可使用 图像切片 方法,具体可查阅网络做法。
- 百K图片,可将图片格式下载为 .svg 或 .webp 格式,存为网络图片,在本地使用 <img loading=“eager”(全速加载-与js加载同步执行,会阻塞进程) 或 loading=“lazy”(懒加载-服务端渲染结束执行,提高首屏渲染速度)
- 小图片,直接存放在assets目录下
- 注意:每个图片<img 都需要给图片指定宽高属性,alt属性,利于SEO以及性能加分
-
善用 Try…Catch…
在服务端渲染阶段,对API接口函数使用 try…catch… 进行兜底,防止函数error导致整个页面出不来,这样的体验对用户来说是毁灭性打击。 -
封装一个良好的 request 函数
Nuxt3 提供了 fetch 的语法糖函数,useFetch、useAsyncData,在性能上,fetch 是远胜于 axios 的。不必再安装个 axios 增加体积又不能在性能上有提升。
也无需在业务中嵌套各种 Promise ,使用 async … await 更快更简单,同是异步操作,不要重复套娃。
在服务端渲染阶段,使用 try…catch 对 API 进行 await 操作,可保证服务端完整渲染且不阻塞。 -
使用浏览器缓存策略
浏览器缓存可 减少资源反复网络请求消耗,静态资源反复加载的优化效果显著,提高应用页面的访问速度,是前端性能
优化必不可少的一环。
做法很简单,对 Http 请求的请求头 header 添加 cache-control 属性
headers: {'Content-Type': 'application/json','cache-control': 's-maxage=7200', // 缓存2小时},
关于浏览器缓存明细讲解,参考文章 浏览器缓存机制介绍与缓存策略剖析
- 删除代码中多余CSS,JS,无用代码,减轻体量,提高速度。
相关文章:

Nuxt3之使用lighthouse性能测试及性能优化实操
lighthouse性能测试工具 什么是 LightHouse 呢 Lighthouse 是一个开源的自动化工具,用于提高网页的质量。可以通过浏览器的开发者工具运行,也可以作为命令行工具或 Node.js 模块集成到持续集成系统中。Lighthouse 可以帮助开发者: 性能优化…...

webdriver.Chrome()参数简介
webdriver.Chrome()参数如下: executable_path:指定ChromeDriver的路径,若未设置且系统环境变量中已配置,则会自动寻找。options:通过webdriver.ChromeOptions()创建,用于设定浏览器的启动选项&…...

Ubuntu如何更换环境中的Python版本
Ubuntu Python 版本迁移指南 卸载 Python 3.8 # 移除 Python 3.8 sudo apt remove python3.8# 清理依赖 sudo apt autoremove# 清理缓存 sudo apt clean安装 Python 3.10 # 更新软件包列表 sudo apt update# 安装软件源管理工具 sudo apt install software-properties-commo…...

python-字符串中大写字母转小写,小写字母转大写
平时我们进行大小写转换基本都是使用upper和lower函数,使用方法: s Hello,Python123#大写转小写 s.lower() -->hello,python123#小写转大写 s.upper() -->HELLO,PYTHON123但是如果想把字符串中的大写字母转成小写,小写字母转成大写&a…...

前端学习之ES6+
1.ES6是什么 ES6,全称是ECMAScript 6,是JavaScript语言的下一代标准,由ECMA国际组织在2015年6月正式发布。ES6也被称作ECMAScript 2015,从这个版本开始,ECMA组织决定每年发布一个新的ECMAScript版本,以使J…...

yolov10的几种权重文件
1.官方提供的几种模型权重文件 YOLOv10官网提供的权重文件是训练好的网络各层的权值,这些权值是通过训练集训练出来的。一旦网络训练完成,应用时只需加载这些权值,而不再需要原始的训练集。这意味着,如果你已经配置好了环境&am…...

FPGA视频GTH 8b/10b编解码转PCIE3.0传输,基于XDMA中断架构,提供工程源码和技术支持
目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案我已有的 GT 高速接口解决方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图输入Sensor之-->芯片解码的HDMI视频数据组包基于GTH高速接口的视频传输架构GTH IP 简介GTH 基本结构GTH 发送和接收处理…...

C++类和对象 (下)
文章目录 前言一. 再探构造函数初始化列表特性总结练习 二. 类型转换2.1 隐式类型转换2.2 临时对象具有常性2.3 explicit关键字2.4 多参数类型转化 三. static成员概念特性练习 四. 友元概念特性 五. 内部类概念特性 六. 匿名对象概念特性 七. 对象拷贝时的编译器优化END 前言 …...

网络层5——IPV6
目录 一、IPv6 vs IPv4 1、对IPv6主要变化 2、IPv4 vs IPv6 二、IPv6基本首部 1、版本——4位 2、通信量类——8位 3、流标号——20位 4、有效载荷长度——16位 5、下一个首部——8位 6、跳数限制——8位 7、源 、 目的地址——128位 8、扩展首部 三、IPv6地址 1…...

【wpf】ResourceDictionary 字典资源的用法
如果你的字典资源是写在启动项目的App.xaml里 <Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source"pack://application:,,,/YourNonStartupProject;component/Resources/SharedResour…...

Foliate:沉浸式阅读!!!
项目简介 Foliate 是一款开源的电子书阅读器,专为现代操作系统设计,提供了优雅且实用的阅读体验。它支持多种电子书格式,包括 EPUB、Mobipocket、Kindle、FB2、CBZ 和 PDF,让用户能够以分页或滚动模式阅读。Foliate 允许用户自定义…...

【excel基本操作-sumif绝对引用和相对引用
低量级数据的存储 复杂且无法优化的数据报表 怎么学excel? 一、输入与输出 二、计算与处理 三、可视化 四、连接匹配与自动化 excel操作笔记 打开表格第一步筛选 所以筛选的快捷键:shiftctrll 排序:多列排序 开始-排序与筛选-自定义排序-设置关键字添…...

word及Excel常见功能使用
最近一直在整理需规文档及表格,Word及Excel需要熟练使用。 Word文档 清除复制过来的样式 当复制文字时,一般会带着字体样式,此时可选中该文字 并使用 ctrlshiftN 快捷键进行清除。 批注 插入->批注,选中文本 点击“批注”…...

网页中的某个元素高度突然无法设置
做网页时本来一个div的高度好好的,结果代码打着打着突然发现有个div的高度变的很小,把我很多在这个div里的元素给搞的看不见了。 找了好久的原因最后发现是这个div的结束标签</div>不小心被我删了,之后把这个</div>给补上就好了。...

springboot给不同用户动态定制请求结果思路
我有个朋友在公司遇到一个需求:某个接口,面向不同的用户返回的字段数不一样字段数。 我举例两种场景并且都给一个方案他,同时也供大家参考。 场景1: 接口返回的是List 或者直接就是entity,且entity对应某张数据表&…...

【网络】HTTP(超文本传输协议)详解
目录 引言一、HTTP的基本概念1.1 什么是HTTP?1.2 HTTP的工作流程1.3 HTTP工作流程图 二、HTTP请求与响应2.1 HTTP请求格式2.2 HTTP响应格式 三、常见的HTTP状态码3.1 其他状态码示例 四、HTTP版本的演变4.1 HTTP/1.04.2 HTTP/1.14.3 HTTP/24.4 HTTP/3 五、HTTP的安全…...

poll()方法和remove()方法的区别是什么?
在Java的集合框架中,poll()方法和remove()方法是两个常用于从队列(Queue)头部获取并移除元素的方法。尽管它们的作用相似,但在行为细节和适用场景上存在显著的区别。以下是对这两个方法区别的详细阐述,旨在帮助开发者更…...

小程序跳转另一个小程序
1.配置要跳转的appid和小程序页面路径 wx.navigateToMiniProgram({appId: 目标小程序appid,path: 目标小程序页面路径,//develop开发版;trial体验版;release正式版envVersion: release, success(res) {// 打开成功console.log("跳转小程序成功&…...

介绍一下数组(c基础)(详细版)
c初期,记住规则,用规则。 我只是介绍规则。(有smart版) 数组 arr 看成一个集合但元素有次序了。 如何计算数组的大小-CSDN博客 简单讲解一下strlen与sizeof(c基础)-CSDN博客 arr[n] { }; [ ] 下标引…...

工业主板在汽车制造中的应用
工业主板在汽车制造中的应用非常广泛,主要得益于其高稳定性、高集成性、以及强大的计算和处理能力。以下是对工业主板在汽车制造中应用的详细分析: 一、应用场景 自动驾驶车辆: 工业主板作为自动驾驶车辆的核心计算平台,负责处…...

博弈论(所有情况最优解)——课堂笔记
博弈论(所有情况最优解)——课堂笔记|【博弈论】分割数游戏-CSDN博客https://blog.csdn.net/back_room/article/details/143464453?spm=1001.2014.3001.5501【博弈论】拍卖土地-CSDN博客...

深入提升Python编程能力的全方位指南
Python作为一种强大且灵活的编程语言,广泛应用于数据科学、机器学习、网络开发、自动化等领域。提升Python编程技术需要结合多方面的知识和技能。本文将详细介绍通过掌握核心技术、项目实践和代码示例来系统提升Python编程技能的方法。 一、掌握基础和高级Python特…...

如何使用 Python 语言的正则表达式进行网页数据的爬取?
以下是使用 Python 语言的正则表达式进行网页数据爬取的一般步骤: 一、安装必要的库: requests:用于发送 HTTP 请求获取网页内容。可以使用 pip install requests 命令进行安装。re:Python 的内置正则表达式库,用于对…...

剑指offer第七、八天
1.矩阵中的路径 class Solution {int n, m;int dx[4]{ 1,-1,0,0 };int dy[4]{ 0,0,1,-1 };bool dfs(int i, int j, vector<vector<char> >mat,vector<vector<bool> >vis, int u, const char* str){if (u strlen(str)-1){//刚开始这里我用的是strlen(…...

有哪些常见的方法可以评估中断处理能力?
以下是一些常见的评估中断处理能力的方法: 基准测试(Benchmarking) 定义和原理:基准测试是通过运行一系列标准化的测试程序来衡量系统性能的方法。对于中断处理能力评估,可以使用专门设计的中断基准测试软件。这些软件会模拟各种中断场景,如不同频率、不同优先级的中断请…...

Android GPU纹理数据拷贝
在 Android 开发中读取纹理数据有以下几种方法: glReadPixelsImageReaderPBO(Pixel BufferObject) HardwareBuffer 1. glReadPixels glReadPixels 是 OpenGL ES 的 API,通常用于从帧缓冲区中读取像素数据,OpenGL ES…...

浏览器端直播推流实现——系统篇
浏览器端用vue3.5.12写,服务器端用php8.2+swoole5.1.4+thinkphp8写,流媒体服务器使用nginx-rtmp模块,拉流App端用uniapp(其他端各自实现吧,这里以App端为例) 操作系统基于opencloudos8,还用到了ffmpeg,该安装就安装,这里不啰嗦安装步骤 以下是vue的代码,比较简陋,各…...

HDFS和HBase跨集群数据迁移 源码
HDFS集群间数据迁移(hadoop distcp) hadoop distcp \ -pb \ hdfs://XX.14.36.205:8020/user/hive/warehouse/dp_fk_tmp.db/ph_cash_order \ hdfs://XX.18.32.21:8020/user/hive/warehouse/dp_fksx_mart.db/HBase集群间数据(hbase ExportSnap…...

opencv实时弯道检测
项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…...

计算机网络综合题
IP数据报的划分 CRC差错检测 冗余码的计算 因此,余数是1110,传输的数为11010110111110。在传输过程中最后两位变成o,接收端能够发现,因为11010110111110除以10011余数不为0。 子网划分 暴力求解法 (定长子网划分大量…...