2024年1月18日

1 vue3相较于vue2的优点

  1. 性能提升:Vue3通过优化虚拟DOM和渲染过程,提高了性能。它的虚拟DOM更轻量级,渲染过程更快,并且引入了编译时优化,使得代码体积更小,加载更快。例如,初次渲染快55%,更新快133%,内存使用减少54%。

  2. Composition API:Vue3引入了Composition API,这是一种新的组件API。它将组件逻辑分离并组合在一起,使得组件更容易维护和测试。与Vue2的Options API相比,Composition API在功能逻辑复杂繁多情况下,代码组织和复用更加方便。

  3. 支持碎片化:Vue3支持碎片化,即组件中可以有多个根节点。这减少了标签层级,减少了内存占用。

  4. 数据和方法定义的改进:Vue3通过使用Proxy API实现数据的双向绑定,代替了Vue2中的Object.defineProperty。这意味着Vue3可以直接监听对象而非属性,可以直接监听数组的变化,并且具有更多的拦截方法。

  5. 生命周期函数的改进:Vue3对生命周期钩子进行了重命名和调整,使得生命周期函数更加清晰和合理。

  6. 父子传参的改进:Vue3中,父传子使用props,子传父使用事件Emitting Events。Vue3还简化了setup()方法中使用emit的方式。

  7. 新的特性和工具:Vue3新增了如teleport(瞬移)等特性,并改进了指令与插槽的使用。

  8. API重构:Vue3对许多API进行了重构,使得它们更一致、易于使用。例如,createApp()用于创建Vue实例,提供更好的TypeScript支持。

  9. TypeScript支持:Vue3对TypeScript的支持更加友好,因为它的源码使用TypeScript重写。这使得对于规模较大的项目,类型检查和代码阅读更加方便。

  10. 更好的生态系统和工具支持:随着Vue3的发布,许多现有的Vue工具和库都进行了更新以支持Vue3,提供了更好的生态系统和工具支持。 总的来说,Vue3在性能、功能和易用性方面都有显著的提升,使得开发者能够更高效地构建高质量的应用程序。

2 vue3中hooks应用

Vue3的Hooks是一种基于组合式API(Composition API)的编程范式,它允许开发者将组件的逻辑提取到可重用的函数中。这些函数,被称为Hooks,可以理解为Vue组件的“函数式”部分,它们使得逻辑复用和组件组织更加清晰和方便。以下是Vue3 Hooks的一些应用场景和优势:

应用场景

  1. 复用逻辑:将组件中的通用逻辑(如数据获取、处理用户输入、状态管理等)提取到Hooks中,可以在不同的组件中复用这些逻辑。

  2. 逻辑分离:通过Hooks,可以将组件的响应式逻辑与模板分离,使得组件的模板更加简洁,逻辑更加清晰。

  3. 测试:由于Hooks中的逻辑是可以独立于组件的,因此它们可以更容易地进行单元测试。

  4. 高阶组件:Hooks可以用来创建高阶组件,这些组件可以接收其他组件作为参数,并利用Hooks来增强或修改它们的行为。

  5. 插件开发:Hooks可以作为插件的一部分,为Vue应用提供可配置的逻辑。

优势

  1. 代码解耦:Hooks有助于减少组件间的耦合,使得每个组件的责任更加单一。

  2. 可读性增强:逻辑的抽取使得组件的模板部分更加直观,因为它们不包含业务逻辑。

  3. 维护性提高:抽取的逻辑更容易维护,更改一个功能点时,只需更新对应的Hook函数。

  4. 类型推导:在使用TypeScript时,Hooks可以提供更好的类型推导,使得代码更加健壮。

示例

下面是一个简单的Hook示例,它封装了一个数据获取的逻辑:

import { ref, onMounted } from 'vue';
export default function useData() {const data = ref(null);const fetchData = async () => {// 假设这是一个异步数据获取函数data.value = await someApiCall();};onMounted(fetchData);return { data };
}

在组件中使用这个Hook:

<template><div><p>Data: {{ data }}</p></div>
</template>
<script>
import { useData } from './hooks/useData';
export default {setup() {const { data } = useData();return { data };},
};
</script>

在这个例子中,useData 是一个Hook,它定义了一个data响应式变量和一个fetchData函数。在组件的setup函数中,我们调用了这个Hook,并得到了data变量。这样,数据获取的逻辑就被封装并复用了。

3 vue中虚拟dom的优点

Vue.js中的虚拟DOM(Virtual DOM)是一个重要的概念,它是在Vue框架中用于优化DOM操作的一种技术。虚拟DOM的核心思想是在JavaScript层面上模拟DOM结构,然后在实际DOM更新之前,在内存中比较新旧虚拟DOM的变化,只更新实际变化的部分,从而减少DOM操作的次数,提高性能。以下是虚拟DOM在Vue中的优点:

  1. 性能优化:虚拟DOM最大的优点是它能够保证性能的下限。在框架内部,虚拟DOM的实现会适配任何上层API可能产生的操作,因此它的某些DOM操作的实现必须是普通的。这样,虚拟DOM至少可以保证在不进行手动优化的情况下,依然可以提供还不错的性能。

  2. 避免直接操作DOM:虚拟DOM允许我们不再直接操作DOM,而是通过编写View-Model的代码逻辑,由框架根据虚拟DOM和数据双向绑定,帮助我们以可预期的方式更新视图。这极大地提高了开发效率,并且使得代码更容易维护。

  3. 跨平台:虚拟DOM本质上是JavaScript对象,与平台无关。因此,它可以更方便地进行跨平台操作,例如服务器渲染、Weex开发等等。

  4. 尺寸和内存优化:虚拟DOM需要在内存中维护一份DOM的副本。这样,在DOM更新速度和使用内存空间之间可以取得平衡。对于尺寸较小的页面,使用虚拟DOM可能会更慢,但对于大多数单页面应用,这应该都会更快。

  5. 更好的开发体验:由于虚拟DOM的存在,Vue的模板编写更加简单直观,开发者可以更加专注于业务逻辑的实现,而不是DOM操作。

  6. 动态UI的创建:虚拟DOM的动态性使得创建动态UI变得非常灵活和方便。开发者可以基于条件或数据动态生成UI元素,而无需关心底层DOM结构的复杂性。

  7. 性能监控和优化:虚拟DOM提供了监控和优化性能的可能性。开发者可以通过分析虚拟DOM的变化来识别性能瓶颈,并采取措施进行优化。 虚拟DOM在Vue.js中的应用,极大地提升了开发效率,优化了性能,并且使得Vue应用的维护变得更加简单和直观。

4 打包时vite对图片进行的优化

Vite 提供了对图片资源的内置支持,包括优化和转换。在 Vite 项目中,你可以直接导入图片,Vite 会处理这些资源并提供相应的 URL。以下是在 Vite 中处理图片的一些方法:

  1. 静态导入

    • 你可以直接在 JavaScript 或 CSS 文件中导入图片,Vite 会处理这些导入,并将图片视为模块。例如:

      import avatar from './avatar.png';
    • 在生产构建中,Vite 会为这些图片生成哈希并放置在 assets 目录下,同时更新引用的 URL。

  2. 资源引用

    • Vite 支持使用新的原生 <img src="image.png" /> 标签导入方式,无需 JavaScript 或 CSS 导入。

  3. 内联

    • 小于 4KB 的图片可以作为 Base64 数据 URI 内联到 JavaScript 或 CSS 中,以减少 HTTP 请求。

  4. 优化和转换

    • Vite 支持使用 ?url 后缀来指示 Vite 应该将图片转换为 URL,而不是内联。

    • 使用 ?webp 后缀可以指示 Vite 将图片转换为 WebP 格式,如果浏览器支持的话,这可以减小图片大小。

    • Vite 还可以集成其他工具(如 ImageMin)来进行更高级的图片压缩和优化。

  5. 自定义转换

    • 你可以通过 Vite 配置文件中的 assetsInclude 选项来扩展 Vite 处理的资源类型。

    • 使用 transformAssetUrls 配置选项,可以自定义如何转换导入的图片资源。

  6. 动态导入

    • 你可以使用动态导入来按需加载图片,这有助于分割代码和提高性能。

  7. 使用 Vite 插件

    • Vite 有一个丰富的插件生态系统,你可以使用现有的插件或创建自己的插件来进一步处理图片资源。

  8. 使用第三方工具

    • 除了 Vite 内置的功能外,你还可以集成第三方工具和库,如 svgo(用于优化 SVG 文件)或 sharp(用于高级图片处理)。 为了充分利用 Vite 的图片处理能力,建议查看 Vite 的官方文档,特别是关于静态资源处理的部分,以及如何配置 Vite 来满足你的项目需求。

5 SPA单页面应用首屏优化处理方案

单页面应用(SPA)的首屏加载时间是用户体验的关键因素之一。以下是一些优化首屏加载时间的策略:

  1. 代码分割(Code Splitting)

    • 使用动态 import() 语法来分割代码,这样浏览器可以按需加载模块,而不是一次性加载所有代码。

  2. 懒加载(Lazy Loading)

    • 对于一些不是立即需要的资源(如图片、视频、某些模块),可以延迟加载,直到它们真正需要显示的时候。

  3. 资源压缩

    • 使用工具(如 Terser)压缩 JavaScript 代码,使用 CSS 压缩工具(如 CSSNano)压缩 CSS,以及使用图片压缩工具(如 ImageMin)压缩图片资源。

  4. 预加载和预取

    • 使用 <link rel="preload"><link rel="prefetch"> 来告知浏览器哪些资源是重要的,以及哪些资源可以在空闲时预先加载。

  5. 服务端渲染(SSR)或静态站点生成(SSG)

    • 通过服务端渲染或静态站点生成,可以在服务器端渲染好首屏内容,减少浏览器渲染工作,加快首屏展示。

  6. 利用缓存

    • 使用浏览器缓存策略,如 HTTP 缓存(Cache-Control, ETag 等),来缓存不会经常变更的资源。

  7. 使用 HTTP/2

    • HTTP/2 提供了多路复用、服务器推送等特性,可以加快资源的加载速度。

  8. 优化 CSS 和 JavaScript

    • 将关键 CSS(Critical CSS)内联到 HTML 中,确保首屏内容快速展示。

    • 避免使用复杂的 CSS 选择器,减少 CSS 文件的大小。

    • 延迟加载非关键 JavaScript,使用异步或延迟脚本来避免阻塞渲染。

  9. 优化图片和媒体文件

    • 使用适当的图片格式,如 WebP,它通常比 JPEG 或 PNG 格式更小。

    • 使用响应式图片和图片源设置(<picture>srcset)来根据设备尺寸和分辨率提供最合适的图片。

  10. 减少第三方库的依赖

    • 只引入必要的库,并考虑使用较小的替代品。

  11. 使用 Web Workers

    • 将一些计算密集型任务放到 Web Workers 中执行,避免阻塞主线程。

  12. 性能监控和分析

    • 使用工具(如 Lighthouse, WebPageTest)来分析和监控应用性能,找出瓶颈并进行优化。

  13. 优化网络请求

    • 减少请求次数,合并小文件,使用 CDN 分发内容。

  14. 使用骨架屏(Skeleton Screens)

    • 在内容加载时显示占位符,提供更好的用户体验。 通过上述策略的组合使用,可以显著提高单页面应用的首屏加载速度,从而提升用户体验。记住,性能优化是一个持续的过程,需要不断地监控、测试和调整。

6 vuex和pinia的区别

Vuex 和 Pinia 都是 Vue.js 应用中用于状态管理的库,但它们之间存在一些关键的区别:

  1. 版本兼容性

    • Vuex 是 Vue 2 的官方状态管理库,而 Pinia 是为 Vue 3 设计的。不过,Vuex 也提供了一个适用于 Vue 3 的版本,即 Vuex 4。

    • Pinia 同时支持 Vue 2 和 Vue 3,这意味着你可以无缝地在两个版本的 Vue 中使用 Pinia。

  2. API 设计

    • Vuex 的 API 设计较为复杂,包含多个概念,如 state、getters、mutations、actions 和 modules。

    • Pinia 的 API 设计更为简洁,去掉了 mutations,只有 state、getters 和 actions。这使得状态管理更加直观和易于理解。

  3. 类型支持

    • Vuex 4 引入了类型支持,但在 Vuex 3 中并不支持 TypeScript。

    • Pinia 从一开始就是用 TypeScript 编写的,提供了出色的类型支持,使得在 Vue 应用中使用 TypeScript 更加容易。

  4. 模块热替换

    • 在 Vuex 中,模块热替换需要额外的配置。

    • Pinia 默认支持模块热替换,无需额外配置,这在使用 Vue CLI 或 Vite 时非常有用。

  5. 插件和中间件

    • Vuex 有一个插件系统,允许你通过插件扩展 Vuex 的功能。

    • Pinia 提供了一个更加简单的 API 来创建插件,同时支持中间件。

  6. 体积和性能

    • Pinia 通常比 Vuex 更轻量,因为它去掉了 Vuex 中的一些概念,如 mutations。

    • 在性能方面,Pinia 和 Vuex 都非常快,但 Pinia 的简化设计可能会在大型应用中提供微小的性能优势。

  7. 使用方式

    • Vuex 需要你定义 store,然后通过 Vue.use() 安装 Vuex 插件,并在 Vue 组件中通过 this.$store 访问。

    • Pinia 允许你直接创建 store,并在组件中通过导入的方式使用,无需安装插件。 Pinia 是 Vuex 的一个现代替代品,它提供了更简洁的 API,更好的类型支持,并且更容易上手。如果你正在使用 Vue 3,Pinia 可能是一个更好的选择。然而,如果你已经在一个大型项目中使用了 Vuex,并且不打算迁移,那么 Vuex 仍然是一个可靠的选择。

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

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

相关文章

Redis实现好友功能

好友功能是目前社交场景的必备功能之一&#xff0c;一般好友相关的功能包含有&#xff1a;关注/取关、我&#xff08;他&#xff09;的关注、我&#xff08;他&#xff09;的粉丝、共同关注等这样一些功能。 1.关注和取关 1.设计思路 总体思路我们采用MySQL Redis的方式结合…

【Ant Design of Vue】Modal.confirm无法关闭的bug

一、问题 在使用 Ant Design Vue 的 Modal.confirm 确认框时&#xff0c;出现了点击取消和确定后 Modal.confirm 确认框无法关闭的问题 二、代码 代码完全是 copy 的官网的代码&#xff0c;但是 copy 到本地后就会出现上述问题 <template><a-button click"sho…

48-DOM节点,innerHTML,innerText,outerHTML,outerText,静态获取,单机click,cssText

1.DOM基础 Document Object Module,文档对象模型,window对象,document文档,都可以获取和操作 1)文档节点 2)属性节点(标签内的属性href,src) 3)文本节点(标签内的文字) 4)注释节点 5)元素节点(标签) 2.获取元素节点 2.1通过标签名获取getElementsByTagName() …

Python中HTTP代理的配置和使用

在Python中&#xff0c;HTTP代理是一种常用的技术&#xff0c;用于控制和修改HTTP请求和响应。通过使用HTTP代理&#xff0c;我们可以更好地控制网络请求的行为&#xff0c;提高安全性、隐私性和效率。下面我们将详细介绍如何在Python中配置和使用HTTP代理。 一、配置HTTP代理…

Unity 编辑器篇|(十一)Gizmos (全面总结 | 建议收藏)

目录 1. 前言2 参数总览3 Gizmos绘制3.1 立方体&#xff1a;DrawCube3.2 视锥&#xff1a;DrawFrustum3.3 贴图&#xff1a;DrawGUITexture3.4 图标&#xff1a;DrawIcon3.5 线段&#xff1a;DrawLine3.6 网格&#xff1a;DrawMesh3.7 射线&#xff1a;DrawRay3.8 球体&#xf…

寒假刷题-递归与递推

寒假刷题 92. 递归实现指数型枚举 解法1递归 使用递归对每一个坑位进行选择&#xff0c;每个坑位有两种选择&#xff0c;填或者不填&#xff0c;使用st数组来记录每个坑位的状态&#xff0c;u来记录已经有多少坑位有了选择。 每个坑位有2钟选择&#xff0c;n个坑位的复杂度就…

Java根据二叉树的先序和后序得到二叉树

一般情况下&#xff0c;我们会根据先序和后序写出二叉树&#xff0c;但是用代码怎末写呢&#xff1f; 例如&#xff1a; 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二…

pdf怎么查看?6个不能错过的软件!

PDF&#xff0c;作为一种常用的文件格式&#xff0c;已经成为了我们工作、学习中的必备工具。然而&#xff0c;对于许多新手来说&#xff0c;如何查看和编辑PDF文件却是一个不小的挑战。今天&#xff0c;我们就来为大家详细介绍一下如何查看和编辑PDF文件&#xff0c;以及一些必…

01_泛型

文章目录 泛型泛型类泛型接口泛型方法泛型的通配泛型的擦除 泛型 参数化类型。 泛型的好处&#xff1a; 省去了类型强转的麻烦&#xff08;比如&#xff1a;Object类、interface接口等都需要类型强转&#xff09;将运行期遇到的问题转移到了编译期 泛型类 所谓泛型类, 就是…

R语言【cli】——ansi_columns():把字符向量格式化为多个列

Package cli version 3.6.0 Description 这个函数有助于ANSI样式字符串的多列输出。它可以很好地与boxx()一起工作。 Usage ansi_columns(text,width console_width(),sep " ",fill c("rows", "cols"),max_cols 4,align c("left&quo…

Android Dialog setCanceledOnTouchOutside失效,点击dialog外面不消失

前言&#xff1a;有一个需求需要点击dialog外面要消失&#xff0c;本来以为很简单结果设置了一直未生效 setCanceledOnTouchOutside(true); 问了半天chat-gpt4结果给的答案都不明显 查看代码发现设置了style&#xff0c;于是尝试去除这个style&#xff0c;结果点击setCancele…

Access2007数据库有没有版权问题?

正常部署&#xff0c;本地读写&#xff0c;涉不涉及版权问题&#xff1f;

【c++】——栈or队列or优先级队列

目录 &#x1f393;容器适配器 &#x1f393;Stack栈 &#x1f6a9;Stack的介绍 &#x1f6a9;Stack的基本使用 &#x1f6a9;Stack底层实现 &#x1f393;queue队列 &#x1f6a9;queue的介绍 &#x1f6a9;queue的基本使用 &#x1f6a9;queue的底层实现 &#x1…

【C++】C++的IO流

一、C语言的输入与输出 C 语言中我们用到的最频繁的输入输出方式就是 scanf () 与 printf()。 scanf()&#xff1a;从标准输入设备&#xff08;键盘&#xff09;读取数据&#xff0c;并将值存放在变量中。printf()&#xff1a;将指定的文字/字符串输出到标准输出设备&#xff…

李沐深度学习-线性回归从零开始

# 核心Tensor&#xff0c;autograd import torch from IPython import display import numpy as np import random from matplotlib import pyplot as pltimport syssys.path.append(路径) from d2lzh_pytorch import * backward()函数:一次小批量执行完在进行反向传播 线性回归…

Java如何做到无感知刷新token含示例代码(值得珍藏)

1. 前言 在系统页面进行业务操作时&#xff0c;有时会突然遇到应用闪退&#xff0c;并被重定向至登录页面&#xff0c;要求重新登录。此问题的出现&#xff0c;通常与系统中用于存储用户ID和token信息的Redis缓存有关。具体来说&#xff0c;这可能是由于token过期所导致的身份…

容器部署的nextcloud配置onlyoffice时开启密钥

容器部署的nextcloud配置onlyoffice时开启密钥 配置 进入onlyoffice容器 docker exec -it 容器id bash编辑配置vi /etc/onlyoffice/documentserver/local.json enable设置为true&#xff0c;并配置secret 重启容器&#xff0c;并将配置的密钥填入nextcloud密钥页面 docker r…

复杂字幕特效SDK,重塑视频字幕新体验

字幕特效已经成为了提升视频品质、增强观众体验的重要手段。美摄科技作为行业领先的技术提供商&#xff0c;近期推出的复杂字幕特效SDK&#xff0c;更是引领了这一领域的创新潮流。 美摄科技复杂字幕特效SDK&#xff0c;不仅具备了电影级别的字幕功能&#xff0c;更实现了众多…

系统学习Python——警告信息的控制模块warnings:常用函数-[warnings.warn]

分类目录&#xff1a;《系统学习Python》总目录 函数 warnings.warn(message, categoryNone, stacklevel1, sourceNone, \*, skip_file_prefixesNone) 常被用于引发警告、忽略或者触发异常。 参数 如果给出category参数&#xff0c;则必须是警告类别类 &#xff1b;默认为U…

【全网最全】2024华数杯国际赛B题成品论文50页+1-4问高质量代码+完整数据集+建模过程+保姆级教学

基于数据分析下的光伏发电 摘 要&#xff08;完整版在文末&#xff09; 根据最新数据&#xff0c;中国的总发电量超过20万亿千瓦时&#xff0c;总体排名世界第一&#xff0c;而光伏发电是一种重要的可再生能源&#xff0c;可以将太阳能转化为电能可以减少对传统能源的依赖&…