当前位置: 首页 > news >正文

Nuxt3之使用lighthouse性能测试及性能优化实操

lighthouse性能测试工具

什么是 LightHouse 呢

Lighthouse 是一个开源的自动化工具,用于提高网页的质量。可以通过浏览器的开发者工具运行,也可以作为命令行工具或 Node.js 模块集成到持续集成系统中。Lighthouse 可以帮助开发者:

  • 性能优化:评估网页加载速度和响应时间,提供改进建议。
  • 可访问性:检查网页是否符合无障碍标准,确保所有用户都能轻松访问。
  • 最佳实践:检测网页是否存在常见的开发错误,如未压缩的资源、不安全的内容等。
  • SEO 优化:分析网页的搜索引擎优化情况,提供提升排名的建议。
  • PWA 兼容性:评估网页是否符合渐进式 Web 应用(PWA)的标准。

如何使用 LightHouse 呢

使用 Lighthouse 非常简单,只需在 浏览器开发者工具中选择 Lighthouse 面板,设置需要的审计选项,然后点击“Generate report”即可生成详细的报告。报告中不仅包含评分,还提供了具体的优化建议和改进方法。
快捷入口:本文以Edge浏览器窗口为例,(Chrome同理) 点击键盘 F12 根据下图操作即可
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

性能优化归纳

  1. 静态资源优化:
    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 文档关于静态资源存放说明

  2. 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',},},

代码可以直接使用。无需安装插件。开启资源分析配置,可以让你清晰明了的知道构建后的依赖文件大小,能够为分包优化提供指引

  1. 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 关于分包文档

  1. 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 的页面和组件无缝集成,提供统一的开发体验。
  1. 页面代码主体分割
    若SSR页面初始化阶段执行的每个函数代码超过50行,除 API接口 部分,涉及赋值,复杂运算,动画效果,pinia插件缓存的代码,要提取出来另外包装,否则JS运算阶段会造成阻塞,不利于浏览器渲染速度。
    不要套娃!!!不要套娃!!!不要套娃!!!
    JS 是顺序渐进单线程语言,函数套娃在服务端渲染阶段会严重阻塞进程!导致服务端渲染不全面或水合不匹配。

  2. 网络图片优化

    • Nuxt 虽然提供了 Nuxt/Image 组件, 但是使用此组件构建后会平白增加近乎50M的体量,我认为不值得。原生Img 的属性配置足矣。
    • 特大超大图片,可使用 图像切片 方法,具体可查阅网络做法。
    • 百K图片,可将图片格式下载为 .svg.webp 格式,存为网络图片,在本地使用 <img loading=“eager”(全速加载-与js加载同步执行,会阻塞进程) 或 loading=“lazy”(懒加载-服务端渲染结束执行,提高首屏渲染速度)
    • 小图片,直接存放在assets目录下
    • 注意:每个图片<img 都需要给图片指定宽高属性,alt属性,利于SEO以及性能加分
  3. 善用 Try…Catch…
    在服务端渲染阶段,对API接口函数使用 try…catch… 进行兜底,防止函数error导致整个页面出不来,这样的体验对用户来说是毁灭性打击。

  4. 封装一个良好的 request 函数
    Nuxt3 提供了 fetch 的语法糖函数,useFetch、useAsyncData,在性能上,fetch 是远胜于 axios 的。不必再安装个 axios 增加体积又不能在性能上有提升。
    也无需在业务中嵌套各种 Promise ,使用 async … await 更快更简单,同是异步操作,不要重复套娃。
    在服务端渲染阶段,使用 try…catch 对 API 进行 await 操作,可保证服务端完整渲染且不阻塞。

  5. 使用浏览器缓存策略
    浏览器缓存可 减少资源反复网络请求消耗,静态资源反复加载的优化效果显著,提高应用页面的访问速度,是前端性能
    优化必不可少的一环。
    做法很简单,对 Http 请求的请求头 header 添加 cache-control 属性

headers: {'Content-Type': 'application/json','cache-control': 's-maxage=7200', // 缓存2小时},

关于浏览器缓存明细讲解,参考文章 浏览器缓存机制介绍与缓存策略剖析

  1. 删除代码中多余CSS,JS,无用代码,减轻体量,提高速度。

相关文章:

Nuxt3之使用lighthouse性能测试及性能优化实操

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

‌webdriver.Chrome()参数简介

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

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函数&#xff0c;使用方法&#xff1a; s Hello,Python123#大写转小写 s.lower() -->hello,python123#小写转大写 s.upper() -->HELLO,PYTHON123但是如果想把字符串中的大写字母转成小写&#xff0c;小写字母转成大写&a…...

前端学习之ES6+

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

yolov10的几种权重文件

1.官方提供的几种模型权重文件 YOLOv10官网提供的权重文件是训练好的网络各层的权值&#xff0c;这些权值是通过训练集训练出来的。‌一旦网络训练完成&#xff0c;应用时只需加载这些权值&#xff0c;而不再需要原始的训练集。这意味着&#xff0c;如果你已经配置好了环境&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 是一款开源的电子书阅读器&#xff0c;专为现代操作系统设计&#xff0c;提供了优雅且实用的阅读体验。它支持多种电子书格式&#xff0c;包括 EPUB、Mobipocket、Kindle、FB2、CBZ 和 PDF&#xff0c;让用户能够以分页或滚动模式阅读。Foliate 允许用户自定义…...

【excel基本操作-sumif绝对引用和相对引用

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

word及Excel常见功能使用

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

网页中的某个元素高度突然无法设置

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

springboot给不同用户动态定制请求结果思路

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

【网络】HTTP(超文本传输协议)详解

目录 引言一、HTTP的基本概念1.1 什么是HTTP&#xff1f;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的集合框架中&#xff0c;poll()方法和remove()方法是两个常用于从队列&#xff08;Queue&#xff09;头部获取并移除元素的方法。尽管它们的作用相似&#xff0c;但在行为细节和适用场景上存在显著的区别。以下是对这两个方法区别的详细阐述&#xff0c;旨在帮助开发者更…...

小程序跳转另一个小程序

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

介绍一下数组(c基础)(详细版)

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

工业主板在汽车制造中的应用

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

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解

在我的上一篇博客&#xff1a;基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目&#xff0c;该项目展示了一个强大的框架&#xff0c;旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人&#xff0c;更是一个集…...