导航


HTML

CSS

JavaScript

浏览器 & 网络

版本管理

框架

构建工具

TypeScript

性能优化

软实力

算法

UI、组件库

Node

业务技能

针对性攻坚

AI


来源:https://xiaoman.blog.csdn.net/article/details/126811832

Chrome dev tools LightHouse 分析

我们可以使用谷歌浏览器自带的 DevTools 进行性能分析 LightHouse

Untitled

Untitled

参数介绍

从 Performance 页的表现结果来看,得分37分,并提供了很多的时间信息,我们来解释下这些选项代表的意思:

代码分析

由于我们使用的是 vite, vite 打包是基于 rollup 的我们可以使用 rollup 的插件

npm install rollup-plugin-visualizer

vite.config.ts 配置  记得设置 open 不然无效

import { visualizer } from 'rollup-plugin-visualizer';

plugins: [vue(), vueJsx(),visualizer({
      open:true
 })],

然后进行 npm run build 打包

Untitled

我在项目中使用了 Ant Design 发现 这个UI 库非常庞大 这时候 就可以使用 Ant Design 的按需引入减少 包大小

Vite 配置优化

build:{
       chunkSizeWarningLimit:2000,
       cssCodeSplit:true, //css 拆分
       sourcemap:false, //不生成sourcemap
       minify:false, //是否禁用最小化混淆,esbuild打包速度最快,terser打包体积最小。
       assetsInlineLimit:5000 //小于该值 图片将打包成Base64 
},

PWA离线存储技术

npm install vite-plugin-pwa -D
import { VitePWA } from 'vite-plugin-pwa' 
plugins: [vue(),VitePWA(), vueJsx(),visualizer({
      open:true
})],

PWA 技术的出现就是让 web 网页无限接近于 Native 应用

  1. 可以添加到主屏幕,利用 manifest 实现
  2. 可以实现离线缓存,利用 service worker 实现
  3. 可以发送通知,利用 service worker 实现
VitePWA({
  workbox:{
      cacheId:"XIaoman",//缓存名称
      runtimeCaching:[
        {
          urlPattern:/.*\\.js.*/, //缓存文件
          handler:"StaleWhileRevalidate", //重新验证时失效
          options:{
            cacheName:"XiaoMan-js", //缓存js,名称
            expiration:{
              maxEntries:30, //缓存文件数量 LRU算法
              maxAgeSeconds:30 * 24 * 60 * 60 //缓存有效期
            }
          }
        }
      ]
  },
})

进行 npm run build 打包会生成 sw.js

Untitled

Untitled

其他性能优化

图片懒加载

import lazyPlugin from 'vue3-lazy'
<img v-lazy="user.avatar" >

虚拟列表

Untitled

多线程 使用  new Worker 创建

worker 脚本与主进程的脚本必须遵守同源限制。他们所在的路径协议、域名、端口号三者需要相同

const myWorker1 = new Worker("./calcBox.js");

都使用 postMessage 发送消息

worker.postMessage(arrayBuffer, [arrayBuffer]);

都使用 onmessage 接收消息

self.onmessage = function (e) {
 // xxx这里是worker脚本的内容
};

关闭

worker.terminate();

VueUse 库已经集成了 webWorker

Untitled

防抖节流

同样 VueUse 也是集成了

Untitled