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

news2025/2/22 3:47:16

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: {
      // 是否启用分析工具,默认为 false
      enabled: true,
      // 分析报告的输出目录,默认为 '.nuxt/analyze'
      reportFilename: '.nuxt/analyze/report.html',
      // 是否在浏览器中自动打开分析报告,默认为 false
      open: 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,无用代码,减轻体量,提高速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2236694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于单片机的自动充电蓝牙智能台灯的设计

本设计以单片机为主要控制芯片&#xff0c;主要包括主控模块&#xff0c;显示模块&#xff0c;蓝牙模块&#xff0c;ADC转换信号模块&#xff0c;红外感应模块&#xff0c;光敏模块&#xff0c;充电模块等多功能设计。台灯分为自动模式与手动模式&#xff0c;自动模式开启时&am…

Linux操作系统:学习进程_对进程概念的深入了解

目录 前言 开篇 一、进程概念 二、进程的描述与管理 1、如何描述与管理 2、Linux中的PCB-task_struct 3、对进程组织的理解 三、进程的属性 1、系统创建进程 2、查看进程 3、进程的标识符 4、退出进程 1>ctrlc 2>kill命令杀死进程 5、用户进程的创建方式…

PointMamba: A Simple State Space Model for Point Cloud Analysis——点云论文阅读(10)

此内容是论文总结&#xff0c;重点看思路&#xff01;&#xff01; 文章概述 这篇文章提出了PointMamba&#xff0c;一种基于状态空间模型&#xff08;SSM&#xff09;的点云分析方法&#xff0c;通过引入线性复杂度算法来实现高效的全局建模。与传统基于Transformer的点云方…

【LLM】【LLaMA-Factory】:Qwen2.5-Coder-7B能力测评

1 前期准备工作 1.1 环境概述 大模型框架&#xff1a;LLaMA-Factory CG客户端镜像&#xff1a;hiyouga/LLaMA-Factory/LLaMA-Factory / v4 cpu 架构 核心数 线程数 频率 内存使用情况 操作系统 GPU&#xff1a;四张4090显卡 CUDA python 以及相关依赖包 pytorch 1.2 数据准…

OpenAI CEO阿尔特曼预测AGI可能在五年内出现 对社会的影响远小于预期

OpenAI 不断探索人工智能及其所蕴含的技术可能性的工作已经引起了相当大的反响&#xff0c;用户和科技界都对其新发布的模型及其所蕴含的先进性着迷。 在公司大力发展 AGI&#xff08;人工通用智能&#xff09;的同时&#xff0c;许多知名公司的关键员工也加入了 OpenAI&#x…

AI周报(11.3-11.9)

AI应用--商务会议旅游必备 AI同传翻译耳机 作为一个经常出差和旅游的人&#xff0c;我深知语言不通带来的困扰。每次在国外旅行&#xff0c;面对不同语言的环境&#xff0c;总是让人头疼不已。幸好&#xff0c;现在有了AI同传翻译耳机&#xff0c;出门在外也能轻松交流。 时空…

qt QCompleter详解

1、概述 QCompleter是Qt框架中的一个类&#xff0c;用于为文本输入提供自动完成功能。它可以与Qt的输入控件&#xff08;如QLineEdit、QTextEdit等&#xff09;结合使用&#xff0c;根据用户的输入实时过滤数据源&#xff0c;并在输入控件下方或内部显示补全建议列表。用户可以…

为什么分布式光伏规模是6MW为界点

安科瑞 华楠 近日&#xff0c;能源局发布定义分布式光伏6MW及以上的光伏电站必须自发自用&#xff0c;自行消纳。多省能源局规定大于6MW的电站必须按集中式管理&#xff0c;另外大于6MW&#xff08;包含&#xff09;要省级审批&#xff0c;小于则由市级审批&#xff0c;10kV线…

【青牛科技】GC8549替代LV8549/ONSEMI在摇头机、舞台灯、打印机和白色家电等产品上的应用分析

引言 在现代电子产品中&#xff0c;控制芯片的性能直接影响到设备的功能和用户体验。摇头机、舞台灯、打印机和白色家电等领域对控制精度、功耗和成本等方面的要求日益提高。LV8549/ONSEMI等国际品牌的芯片曾是这些产品的主要选择&#xff0c;但随着国内半导体技术的进步&…

分析报告、调研报告、工作方案等的提示词

什么是提示词&#xff1f; 提示词的英文是Prompt&#xff0c;是你与人工智能&#xff08;AI&#xff09;进行交流的方式。简单来说&#xff0c;提示词就是你给AI的一段文字或问题&#xff0c;AI根据这段文字或问题来生成回应或完成任务。 举个例子&#xff1a;假设你在使用一…

Embedding 技术在推荐系统中的应用

参考自《深度学习推荐系统》——王喆&#xff0c;用于学习和记录。 介绍 Embedding&#xff0c;中文直译为“嵌入”&#xff0c;常被翻译为“向量化”或者“向量映射”。它的主要作用是将稀疏向量转换成稠密向量&#xff0c;便于上层深度神经网络处理。事实上&#xff0c;Emb…

解决Postman一直在转圈加载无法打开问题的方法

在使用Postman这款强大的API测试工具时&#xff0c;有时可能会遇到程序长时间加载而无法正常使用的情况。面对这样的问题&#xff0c;可以尝试以下几种解决办法&#xff1a; 方法一&#xff1a;直接运行Postman可执行文件 定位到Postman的安装目录 如果您不确定Postman的具体安…

机器学习—训练细节

首先回忆如何训练一个逻辑回归模型&#xff0c;建立一个Logistic回归模型是&#xff1a;你将指定如何计算输出给定输入特征x和参数w和b&#xff0c;在逻辑回归函数预测f(x)g&#xff0c;它是应用于w*xb的Z状结肠函数&#xff0c;所以如果znp.dot(w,x)b&#xff0c;f_x1/(1np.ex…

bert-base-uncased处理文档

1.安装必要的库 确保安装 transformers 和 torch 库&#xff1a; pip install transformers torch 2.加载本地 BERT 模型和分词器 由于已将模型和分词器下载到本地&#xff0c;可以指定文件路径加载。确保路径与本地文件结构一致。 from transformers import BertTokenizer…

Python http打印(http打印body)flask demo(http调试demo、http demo、http printer)

文章目录 代码解释 代码 # flask_http_printer.pyfrom flask import Flask, request, jsonify import jsonapp Flask(__name__)app.route(/printinfo, methods[POST]) def print_info():# 分隔符separator "-" * 60# 获取请求头headers request.headers# 获取 JS…

HTB:Perfection[WriteUP]

目录 连接至HTB服务器并启动靶机 1.What version of OpenSSH is running? 使用nmap对靶机TCP端口进行开放扫描 2.What programming language is the web application written in? 使用浏览器访问靶机80端口页面&#xff0c;并通过Wappalyzer查看页面脚本语言 3.Which e…

cursor+QT5.12.12

一、QT相关 1、环境设置相关 2、安装插件&#xff1a; 在CURSOR中安装以下插件&#xff1a; C/C插件&#xff1a;这是必需的&#xff0c;用于支持C/C语言开发。 Qt Configure&#xff1a;用于配置Qt环境。 Qt Tools&#xff1a;提供Qt相关的工具支持。 CMake&#xff1a;如果…

【Python】pandas 和numpy版本不兼容怎么办?遇到numpy.dtype size change的解决方法(解决方法篇)

前情简要&#xff1a; 之前我在写程序的时候&#xff0c;因为运行了别人写的程序文件&#xff0c;不知道为啥&#xff0c;直接报出了这个问题&#xff1a; ValueError: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 f…

HTB:Devel[WriteUP]

目录 连接至HTB服务器并启动靶机 1.What is the name of the service is running on TCP port 21 on the target machine? 使用nmap对靶机TCP端口进行开放扫描 2.Which basic FTP command can be used to upload a single file onto the server? 尝试匿名连接至靶机FTP服…

【大数据学习 | kafka高级部分】kafka的kraft集群

首先我们分析一下zookeeper在kafka中的作用 zookeeper可以实现controller的选举&#xff0c;并且记录topic和partition的元数据信息&#xff0c;帮助多个broker同步数据信息。 在新版本中的kraft模式中可以这个管理和选举可以用kafka自己完成&#xff0c;而不再依赖zookeeper。…