【Vue面试题系列】二

news2024/11/18 17:29:49

Vue3中的Treeshaking特性是什么?并举例说明。

是什么?
treeshaking是一种通过清除多余代码方式来优化项目打包体积的技术。
简单来讲,就是在保持代码运行结果不变的前提下,去掉无用的代码。
如果把代码打包比作制作蛋糕,传统的方法是把鸡蛋(带壳)全部丢进去搅拌,然后放入烤箱,最后把没有用的蛋壳全部挑选并剔除出去。
而treeshaking则是一开始就把有用的蛋白蛋黄放入搅拌,最后直接做出蛋糕。
也就是说,treeshaking其实就是找出使用的代码。
在vue2中,无论我们使用什么功能,他们最终都会出现在生产代码中。主要原因是vue实例在项目中是单例的,捆绑程序无法检测到该对象的哪些属性在代码中被使用到。
而vue3引入treeshaking属性,将全局API进行分块。如果您不使用某些功能,他们将不会包含在基础包中。
如何做?
treeshaking是基于es6模版语法 import与export,主要借助es6模块的静态编译思想,在编译时就能确定模块的依赖关系,以及收入和输出的变量。
treeshaking无非就是做了两件事:
编译阶段利用es6 module判断哪些模块已经加载
判断哪些模块和变量未被使用或者引用,进而删除对应代码

作用
减少程序体积(更小)
减少程序执行时间(更快)
便于将来对程序架构进行优化(更友好)

Vue组件通信方式有哪些?

组件间通信的概念
都知道组件是vue最强大的功能之一,vue中每一个.vue我们都可以视之为一个组件。
通信指的是发送者通过某种媒体以某种格式来传递信息到收信者以达到某个目的。
广义上,任何信息的交通都是通信。

组件间通信,即组件通过某种方式传递信息来达到某个目的。
举个例子,我们在使用ui框架中的table组件,可能会往table组件中传入某些数据,这个本质就形成了组件之间的通信。

组件之间通信解决了什么?
每个组件之间都有独自的作用域,组件间的数据是无法共享的但实际开发工作中我们常常需要让组件之间共享数据,这也是组件通信的目的要让他们互相之间能进行通讯,这样才能构成一个有机的完整系统。

组件间通信的分类
组件间通信的分类如下:
父子
兄弟
祖孙与后代
非关系组件
组件间通信的方案
整理vue中8中常规的通信方案:
通过props传递
通过$emit触发自定义时间
使用res
EventBut
$parent或 $root
attrs与listeners
Provide与Inject
Vuex

props传递数据
在这里插入图片描述

使用场景:父组件传递数据给子组件
子组件设置props属性,定义接受父组件传递过来的参数
父组件在使用子组件标签中通过字面量来传递值

$emit触发自定义时间
使用场景:子组件传递数据给父组件
子组件通过 $ emit触发自定义事件,第二个参数为传递的数值
父组件绑定监听器获取到子组件传递过来的参数

ref
父组件在使用子组件的时候设置ref
父组件通过设置子组件ref来获取数据

eventbus
使用场景:兄弟通信
创建一个中央时间总线eventbus
兄弟组件通过$emit触发自定义时间,第二个参数为传递的数值
另一个兄弟组件通过 $on监听自定义事件

$parent或 $ root
通过共同祖辈搭建通信侨联
兄弟组件
this. $parent. $on(‘add’,this.add)
另一个兄弟组件
this. $parent. $emit(‘add’)

$attrs与 $listeners
使用场景:祖先传递数据给子孙
设置批量向下传属性 $attrs和 $listeners
包含了父级作用域中不作为prop被识别的特性绑定
可以通过v-bind=“ $attrs”传入内部组件

provide与inject
在祖先组件定义provide属性,返回传递的值
在后代组件通过inject接受组件传递过来的值

vuex
使用场景:复杂关系的组件数据传递
vuex作用相当于一个用来存储共享变量的容器
在这里插入图片描述
state用来存放共享变量的地方
getter可以增加一个派生状态,用来获得共享变量的值
mutations用来存放修改state的方法
actions也是用来存放修改state的方法,不过action是在mutations的基础上进行。常用来做一些异步操作。

React和vue在技术层面的区别?

  • 组件化方式不同:react是基于组件实现的,组件包含了状态和行为,所以组件共享一个状态树。vue也是基于组件实现的,但是每个组件都有自己的状态,并且可以很容易地将数据和行为绑定在一起。
  • 数据驱动方式不同:react使用单向数据流来管理数据,即从父组件到子组件的传递,所以react中组件之间的数据交互相对更加复杂。vue则使用双向数据绑定来管理数据,使得组件之间的数据交互更加简洁。
  • 模版语法不同:react使用jsx语法,将html和JavaScript结合在一起,使得编写组件更加直观和灵活。vue则使用模版语法,并且支持模版内的表达式和指令,使得编写组件具有更高的可读性和可维护性。
  • 生命周期不同:react组件的生命周期分为三个阶段:初始化、更新和卸载。Vue组件的生命周期分为八个阶段:创建、挂载、更新和销毁等。
  • 状态管理方式不同:react使用redux或者mobx来管理应用程序的状态。vue则提供了自己的状态管理库vuex,可以更方便的管理组件之间的共享状态。
  • 性能优化方式不同:react使用虚拟dom技术来实现高效的渲染性能,可以减少每次渲染时候需要操作真实dom的次数。vue则使用模版编译和响应式系统来实现高效的渲染性能,并且还提供了一些优化技术,例如懒加载和缓存等。

单页面如何提高加载速度?

  • 使用代码分割:将代码拆分成小块并按需加载(懒加载),以避免不必要的网络请求和减少加载时间
  • 缓存资源:利用浏览器缓存来存储重复使用的文件,例如css和js文件、图片等
  • 预加载关键资源:在首次渲染之前,先提前加载关键资源,例如首页所需要的JS、css或者数据,以保证关键内容的快速呈现。
  • 使用合适的图片格式:根据需要进行压缩以减少文件大小。对于一些小图标,可以使用iconfont等字体文件来代替。
  • 启用Gzip压缩:使用服务器端的Gzip压缩算法对文件进行压缩,以减少传输时间和带宽消耗。
  • 使用CDN:使用内容分发网络来缓存和传递文件,以提高文件的下载速度和可靠性。
  • 使用API请求:尽可能减少API调用的数量,并使用缓存和延迟加载等技术来优化API请求的效率。
  • 使用服务器端渲染:使用服务器端渲染ssr来生产html,以减少客户端渲染所需要的时间和资源。但需要主要,ssr也可能增加了服务器的负担并使网站更复杂。

为什么v-if和v-for不建议一起使用?

作用
v-if指令用于条件性地渲染一块内容,只有在条件符合的时候才被渲染。
v-for基于一个数组来渲染一个列表。他需要使用item in items形式的特殊语法,其中items是源数据数组或者对象,而item是被迭代的数组元素的别名,
在v-for的时候,建议设置key值,并且保证每个key值都是独一无二的,这便于diff算法进行优化

优先级
在vue2中,v-for的优先级更高,vue3中相反
在vue3中,做了v-if的优化,去除了没必要的计算,但同时也会带来一个无法取到v-for当中遍历的item的问题,这就需要开发者们采取其他灵活的方式去解决这种问题。

注意事项
不要把v-if和v-for同时用在同一个元素上,带来性能方面的浪费(每次渲染都会先循环再进行条件判断)
如果避免出现这种情况,则在外层嵌套template(页面渲染不生产dom节点),在这一层进行v-if判断,然后在内部进行v-for循环

如果条件出现在循环内部,可以通过计算属性computed提前过滤掉那些不需要显示的项

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

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

相关文章

将xxl-job集成到自己的项目中,部署并测试

文章目录 1、添加依赖2、application.yml 配置3、 新建配置类4、创建任务5、将项目打包&#xff0c;在服务器上运行6、编辑执行器机器地址7、测试 1、添加依赖 <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId>…

常见排序算法—面试编程题2023

常见排序算法—面试编程题2023 最近在看一些面试题&#xff0c;发现很多面试过程中都会要求手写排序编程题&#xff0c;经过一番查找整理&#xff0c;可以快速学习和使用相关排序算法题&#xff0c;通俗易懂&#xff0c;手撕代码吊打面试官。 一、冒泡排序 冒泡排序 是一种简…

ETHERNET/IP 转ETHERCAT连接倍福和欧姆龙PLC的配置方法

ETHERNET/IP和ETHERCAT是两种不同的协议&#xff0c;它们在工业生产中都有广泛的应用。然而&#xff0c;由于协议不同&#xff0c;这两种设备之间无法通讯&#xff0c;这给工业生产带来了很大的麻烦。而远创智控YC-EIP-ECT网关应运而生&#xff0c;它能够连接到ETHERNET/IP总线…

路径规划算法:基于世界杯优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于世界杯优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于世界杯优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法…

合合信息AI图像内容安全新技术亮相WAIC2023,防范“生成式造假”

开年以来&#xff0c;多个图像生成软件在全球迅速蹿红&#xff0c;其作画逼真程度“技惊四座”。AI一路“狂飙”&#xff0c;让生成、篡改等多形式的图片伪造的门槛变得更低&#xff0c;由此引发的隐患也令人忧虑。 图像是信息的主要载体之一&#xff0c;利用AI进行图像造假的…

MachineLearningWu_4_GradientDescent

我们在上一个章节中学习了损失函数&#xff0c;我们的最终目的是要求得损失函数最小化的weight和bias&#xff0c;那么如何做到这一点呢&#xff0c;我们引入梯度下降算法&#xff0c; 请注意&#xff0c;对于Linear Regression MSE&#xff0c;你得到的J(w, b)和w, b的图必然…

AIGC - Stable Diffusion 多重控制网络 ControlNet (OpenPose + Depth) 配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131603523 Multi-ControlNet 是 Stable Diffusion 的一个功能&#xff0c;让用户用不同的空间条件来控制图像生成的过程。例如&#xff0c;可以用…

【高并发网络通信架构】2.引入多线程实现多客户端连接的tcp服务端

目录 一&#xff0c;往期文章 二&#xff0c;代码实现 一&#xff0c;往期文章 【高并发网络通信架构】1.Linux下实现单客户连接的tcp服务端 二&#xff0c;代码实现 关键代码 因为accept是阻塞等待客户端连接&#xff0c;当客户端连接成功后才会执行accept后面的代码&…

简介Maven结构与配置方法

一、Maven是什么 Maven是apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 它有什么用呢&#xff1f; 比如我以前要IOUtils这个包&#xff0c;那要到网站下去下载下来&#xff0c;再导入。 当jar包多的时候&#xff0c;一个一个导出&#xff0c;…

开源Cillium项目为容器提供强大的网络功能

试验性的开源Cillium项目使用Linux内核的一项现有特性&#xff0c;为容器提供高速、强大的网络功能。一项名为Cilium的开源项目试图基于Linux内核中所用的技术&#xff0c;为容器提供一种新的网络方法。 试验性的开源Cillium项目使用Linux内核的一项现有特性&#xff0c;为容器…

ARM中断实验

#ifndef __KEY_H__ #define __KEY_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_gic.h"//对RCC/GPIO/EXTI章节的初始化 void hal_key1_exti_init();//对GIC的初始…

算法笔记(Java)——链表篇

链表类问题通常比较简单&#xff0c;面试中应该不会出现这么简单的题型&#xff0c;需要注意的地方只有两个&#xff1a; 使用虚拟头节点增加便捷性判断链表是否有环 使用虚拟头节点 力扣题目链接&#xff1a; 203. 移除链表元素 这道题目比较简单&#xff0c;但是使用虚拟…

使用pyhton将文件夹内多个excel表格合并成总表

前言&#xff1a; 本文讲述使用python将需要处理的文件夹内多个excel文件内容进行合并&#xff0c;并输出为xlsx格式的总表。就比如一个文件夹里又有许多子文件夹&#xff0c;这些子文件夹里分布有excel文件&#xff0c;这里的python文件就能将这个文件夹内的所有excel文件进行…

【SpringMVC】| SpringMVC执行流程(含源码分析)

目录 SpringMVC执行流程 1. SpringMVC常用组件 2. DispatcherServlet初始化过程&#xff08;源码分析&#xff09; 3. DispatcherServlet调用组件处理请求 4. SpringMVC的完整执行流程 图书推荐&#xff1a;Spring Cloud Alibaba核心技术与实战案例 SpringMVC执行流程 1…

2.3.cuda驱动API-上下文管理设置及其作用

目录 前言1. CUcontext总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记 本次课程学习精简 CUDA 教程-Driver API 上下文管理设置及其作用 课…

css 中的几种颜色格式

css 中的几种颜色格式 css有一系列不同的颜色格式: 十六进制代码、RGB()、HSL()、lch()等等。 我们在使用的时候可能并不太注重这些。但是它们之前存在非常重要区别。本文会介绍不同的颜色格式及区别。 命名颜色 这并不是一种真正的颜色格式&#xff0c;但是对于初学者还是…

kube-proxy代理模式详解

kube-proxy代理模式详解 kube-proxy当前支持以下几种代理模式&#xff1a; 1、userspace&#xff1a;最早的负载均衡方案&#xff0c;它在用户空间监听一个端口&#xff0c;所有服务通过iptables转发到这个端口&#xff0c;然后在其内部负载均衡到实际的Pod。该方式最主要的问…

如何让大型语言模型(LLMs)遵守道德原则?

我们知道像ChatGPT那样的大型语言模型提供了内容审查机制&#xff0c;我们从openai的官方文档中可以看到open提供了Moderation的内容审查机制,主要包含以下11个方面&#xff1a; 从官方文档上看这11方面的审核机制似乎只停留在严格的法律层面的审查&#xff0c;但是对于那些没…

Java web开发--springboot

Java web开发--springboot Java有很多web框架 但是有的框架不是很好用:比如Java Servlets(个人感觉)不好调试,WEB-INF文件关联来关联去很烦躁,启动后 crtlc还关闭不了(我一般习惯用ctrlc命令来关闭服务).导致后面我调试springboot时一直报错,原来是Java Servlets的服务没关(我习…

Handshake failed due to invalid Upgrade header: null 解决方案以及连接60s,信息不交互,连接断开

Handshake failed due to invalid Upgrade header: null 解决方案以及连接60s&#xff0c;信息不交互&#xff0c;连接断开 1. 问题背景&#xff1a;因为后端用了nginx代理&#xff0c;所以websocket连接的过程中报错&#xff1a;Handshake failed due to invalid Upgrade hea…