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/


相关文章
|
22天前
|
JavaScript 前端开发 IDE
[译] 用 Typescript + Composition API 重构 Vue 3 组件
[译] 用 Typescript + Composition API 重构 Vue 3 组件
[译] 用 Typescript + Composition API 重构 Vue 3 组件
|
1月前
|
JavaScript API
如何使用Vue 3和Type Script进行组件化设计
【8月更文挑战第16天】如何使用Vue 3和Type Script进行组件化设计
31 3
|
1月前
|
JavaScript API
如何使用Vue 3和Type Script进行组件化设计
【8月更文挑战第16天】如何使用Vue 3和Type Script进行组件化设计
36 1
|
21天前
|
JavaScript 前端开发 安全
【技术革新】Vue.js + TypeScript:如何让前端开发既高效又安心?
【8月更文挑战第30天】在使用Vue.js构建前端应用时,结合TypeScript能显著提升代码质量和开发效率。TypeScript作为JavaScript的超集,通过添加静态类型检查帮助早期发现错误,减少运行时问题。本文通过具体案例展示如何在Vue.js项目中集成TypeScript,并利用其类型系统提升代码质量。首先,使用Vue CLI创建支持TypeScript的新项目,然后构建一个简单的待办事项应用,通过定义接口描述数据结构并在组件中使用类型注解,确保代码符合预期并提供更好的编辑器支持。
45 0
|
22天前
|
JavaScript 前端开发 安全
立等可取的 Vue + Typescript 函数式组件实战
立等可取的 Vue + Typescript 函数式组件实战
|
1月前
|
资源调度 JavaScript 前端开发
Vue3+TypeScript前端项目新纪元:揭秘高效事件总线Mitt,轻松驾驭组件间通信的艺术!
【8月更文挑战第3天】Vue3结合TypeScript强化了类型安全与组件化开发。面对大型应用中复杂的组件通信挑战,可通过引入轻量级事件发射器Mitt实现事件总线模式。Mitt易于集成,通过简单几步即可完成安装与配置:安装Mitt、创建事件总线实例、并在组件中使用`emit`与`on`方法发送及监听事件。此外,利用TypeScript的强大类型系统确保事件处理器正确无误。这种方式有助于保持代码整洁、解耦组件,同时提高应用的可维护性和扩展性。不过,在大规模项目中需谨慎使用,以防事件流过于复杂难以管理。
61 1
|
1月前
|
JavaScript 前端开发 安全
解锁Vue3与TypeScript的完美搭档:getCurrentInstance带你高效打造未来前端
【8月更文挑战第21天】Vue3的getCurrentInstance方法作为Composition API的一部分,让开发者能在组件内访问实例。结合TypeScript,可通过定义组件实例类型实现更好的代码提示与类型检查,提升开发效率与代码质量。例如,定义一个带有特定属性(如myData)的组件实例类型,可以在setup中获取并安全地修改这些属性。这种方式确保了一致性和减少了运行时错误,使开发更加高效和安全。
25 0
|
1月前
|
JavaScript 测试技术 API
Vue 3 与 TypeScript:最佳实践详解
Vue 3 与 TypeScript:最佳实践详解
|
2月前
|
前端开发 JavaScript 安全
TypeScript在React Hooks中的应用:提升React开发的类型安全与可维护性
【7月更文挑战第17天】TypeScript在React Hooks中的应用极大地提升了React应用的类型安全性和可维护性。通过为状态、依赖项和自定义Hooks指定明确的类型,开发者可以编写更加健壮、易于理解和维护的代码。随着React和TypeScript的不断发展,结合两者的优势将成为构建现代Web应用的标准做法。
|
1月前
|
JavaScript
TypeScript——不能将类型“HTMLElement | null”分配给类型“HTMLElement”
TypeScript——不能将类型“HTMLElement | null”分配给类型“HTMLElement”
28 4