Vue3+TypeScript学习笔记(三十四)

简介: 本节记录Vue3相关高级性能优化技巧
35~38暂时跳过,讲的是Electron和webpack构建相关的操作,后面回来学习

在浏览器端,可以使用Lighthouse来评估性能,其中的主要指标有:

FCP (First Contentful Paint) 首次内容绘制的时间,浏览器第一次绘制 DOM 相关的内容,也是用户第一次看到页面内容的时间
Speed Index 页面各个可见部分的显示平均时间,当我们的页面上存在轮播图或者需要从后端获取内容加载时,这个数据会被影响到。
LCP (Largest Contentful Paint) 最大内容绘制时间,页面最大的元素绘制完成的时间
TTI(Time to Interactive) 从页面开始渲染到用户可以与页面进行交互的时间,内容必须渲染完毕,交互元素绑定的事件已经注册完成
TBT(Total Blocking Time) 记录了首次内容绘制到用户可交互之间的时间,这段时间内,主进程被阻塞,会阻碍用户的交互,页面点击无反应
CLS(Cumulative Layout Shift) 计算布局偏移值得分,会比较两次渲染帧的内容偏移情况,可能导致用户想点击 A 按钮,但下一帧中,A 按钮被挤到旁边,导致用户实际点击了 B 按钮
以上内容来自小余同学的笔记—— https://github.com/2002XiaoYu/Latest-front-end-Notes/blob/main/Vue3%E2%80%94%E2%80%94%E5%9F%BA%E7%A1%80%E5%86%85%E5%AE%B9%E9%83%A8%E5%88%86(%E5%B0%8F%E6%BB%A1%E7%89%88%E6%9C%AC).md.md)

生成组件分析的网页

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// import vueJsx from '@vitejs/plugin-vue-jsx'
import tsx from './src/Plugins/index'
// 自动引入插件:记得在下方配置
import AutoImport from 'unplugin-auto-import/vite'

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

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    tsx(),
    AutoImport({
      imports: ['vue'],
      dts: 'src/auto-import.d.ts', // 生成声明文件并存放到指定地址
    }),
    visualizer({ open: true }),
  ],
  // 在build中写入配置项
  build: {
    chunkSizeWarningLimit: 2000,
    cssCodeSplit: true, //css 拆分
    sourcemap: false, //不生成sourcemap
    minify: false, //是否禁用最小化混淆,esbuild打包速度最快,terser打包体积最小。
    assetsInlineLimit: 5000, //小于该值 图片将打包成Base64 ,Base64的就不会被打包加载到容器里
  },
  server: {
    proxy: {
      '/api': {
        target: 'http://localhost:8888',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api$/, ''),
      },
    },
  },
})

离线缓存PWA

安装:pnpm add vite-plugin-pwa -D

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

部分配置项:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// import vueJsx from '@vitejs/plugin-vue-jsx'
import tsx from './src/Plugins/index'
// 自动引入插件:记得在下方配置
import AutoImport from 'unplugin-auto-import/vite'
// 构建后显示项目数据的html文档
import { visualizer } from 'rollup-plugin-visualizer'
// 引入pwa离线缓存插件
import { VitePWA } from 'vite-plugin-pwa'

// https://vitejs.dev/config/
export default defineConfig({
    plugins: [
        vue(),
        tsx(),
        AutoImport({
            imports: ['vue'],
            dts: 'src/auto-import.d.ts', // 生成声明文件并存放到指定地址
        }),
        visualizer({ open: true }),
        // VitePWA的配置项在这里
        VitePWA({
            workbox: {
                cacheId: 'XIaoman', //缓存名称
                runtimeCaching: [
                    {
                        urlPattern: /.*\.js.*/, //缓存文件
                        handler: 'StaleWhileRevalidate', //重新验证时失效
                        options: {
                            cacheName: 'XiaoMan-js', //缓存js,名称
                            expiration: {
                                maxEntries: 30, //缓存文件数量 LRU算法(优先缓存活跃的)
                                maxAgeSeconds: 30 * 24 * 60 * 60, //缓存有效期
                            },
                        },
                    },
                ],
            },
        }),
    ],
    // 在build中写入配置项
    build: {
        chunkSizeWarningLimit: 2000,
        cssCodeSplit: true, //css 拆分
        sourcemap: false, //不生成sourcemap
        minify: false, //是否禁用最小化混淆,esbuild打包速度最快,terser打包体积最小。
        assetsInlineLimit: 5000, //小于该值 图片将打包成Base64 ,Base64的就不会被打包加载到容器里
    },
    server: {
        proxy: {
            '/api': {
                target: 'http://localhost:8888',
                changeOrigin: true,
                rewrite: (path) => path.replace(/^\/api$/, ''),
            },
        },
    },
})

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

  1. 可以添加到主屏幕,利用 manifest 实现
  2. 可以实现离线缓存,利用 service worker 实现
  3. 可以发送通知,利用 service worker 实现

配置好PWA后执行构建操作,利用http-server起一个服务(安装http-server包,然后打开dist目录,执行http-server -p 端口号即可),在devTools中的“应用”里看到service workers即为已激活

图片懒加载

import lazyPlugin from 'vue3-lazy'

虚拟列表

自动删除可视区域意外的DOM,能承受住大量(上万条)数据

WebWorker

当需要大量计算时可以用WerWorker创建一个后台进程,该进程不会影响主进程但不能操作DOM

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


const myWorker1 = new Worker("./calcBox.js");//后台运行,不会影响主进程

  1. 都使用 postMessage 发送消息

worker.postMessage(arrayBuffer, [arrayBuffer]);

  1. 都使用 onmessage 接收消息

self.onmessage = function (e) {
// xxx这里是worker脚本的内容
};//这些都是不允许去操作DOM的

  1. 关闭

worker.terminate();
VueUse 库已经集成了 webWorker

VueUse

https://vueuse.org/


相关文章
|
5天前
|
JavaScript 前端开发 编译器
TypeScript 学习笔记
TypeScript 学习笔记
|
5天前
|
JavaScript 前端开发 数据可视化
前端开发使用 Vue 3 + TypeScript + Pinia + Element Plus + ECharts
前端开发使用 Vue 3 + TypeScript + Pinia + Element Plus + ECharts
44 0
|
5天前
|
JavaScript 前端开发
在Vue中使用TypeScript的常见问题有哪些?
在Vue中使用TypeScript的常见问题有哪些?
35 2
|
5天前
|
JavaScript 前端开发
在Vue中使用TypeScript的优缺点是什么?
在Vue中使用TypeScript的优缺点是什么?
18 0
|
5天前
|
JavaScript
在 Vue 中如何使用 TypeScript?
在 Vue 中如何使用 TypeScript?
16 0
|
5天前
|
JavaScript 安全 容器
Vue3 + setup + TypeScript: 构建现代、类型安全的Vue应用的关键技巧总结
当使用 setup 的时候,组件直接引入就可以了,不需要再自己手动注册
|
5天前
|
JavaScript Go 数据库
用Typescript 的方式封装Vue3的表单绑定,支持防抖等功能。
Vue3 的父子组件传值、绑定表单数据、UI库的二次封装、防抖等,想来大家都很熟悉了,本篇介绍一种使用 Typescript 的方式进行统一的封装的方法。
|
5天前
|
前端开发 JavaScript 测试技术
Vue3+Vite+TypeScript常用项目模块详解(下)
现在无论gitee还是github,越来越多的前端开源项目采用Vue3+Vite+TypeScript+Pinia+Elementplus+axios+Sass(css预编译语言等),其中还有各种项目配置比如eslint 校验代码工具配置等等,而我们想要进行前端项目的二次开发,就必须了解会使用这些东西,所以作者写了这篇文章进行简单的介绍。
|
5天前
|
JavaScript 前端开发 API
Vue3+Vite+TypeScript常用项目模块详解
现在无论gitee还是github,越来越多的前端开源项目采用Vue3+Vite+TypeScript+Pinia+Elementplus+axios+Sass(css预编译语言等),其中还有各种项目配置比如eslint 校验代码工具配置等等,而我们想要进行前端项目的二次开发,就必须了解会使用这些东西,所以作者写了这篇文章进行简单的介绍。
Vue3+Vite+TypeScript常用项目模块详解
|
5天前
|
监控 JavaScript 安全
TypeScript在员工上网行为监控中的类型安全实践
本文演示了如何使用TypeScript在员工上网行为监控系统中实现类型安全。通过定义`Website`类型和`MonitoringData`接口,确保数据准确性和可靠性。示例展示了从监控设备获取数据和提交到网站的函数,强调了类型定义在防止错误、提升代码可维护性方面的作用。
36 7