Vue面试题

Vue的双向绑定通过object.defineProperty()实现,Vue2使用此方法结合发布订阅者模式,而Vue3则使用Proxy进行数据代理。Vue3允许多个根节点,优化了虚拟DOM的diff算法,使用静态标记提升性能。Vuex管理组件状态,解决通信问题,有state、mutations、actions等属性。文章还讨论了浏览器缓存、HTTP与HTTPS的区别、跨域解决方案及CSS预处理器Sass和Less等。
摘要由CSDN通过智能技术生成

vue的双向绑定原理是什么?里面的关键点在哪里?

①采用数据劫持结合发布者-订阅模式来实现的,其原理就是利用了 object.defineProperty()这个方法重新定义了对象获取属性值 get 和 设置属性set来操作实现

②关键点:object.defineProperty()

vue2和vue3双向数据绑定的原理(区别)

1.vue2通过 Object.defineProperty()一个数据绑定对数据并结合发布订阅者模式的方式实现的

vue3使用ES6中的Proxy对数据进行代理

v2只能有一个根节点,v3可以有很多个根节点,v3对v2来说相当于进行了一个diff方法的优化,

因为v2的虚拟DOM我们是进行全量的一个对比,v3增加了一个静态标记,这样的话比对带有Pf节点,能通过flag信息得知,当前节点要比的具体内容,做到在一定程度上,对diff方法进行一个优化,静态提升方面,v2无论元素它是否参与更新,每次都会被重新创建然后再渲染,v2中它就会对不参与更新元素,做一个静态的提升,只会被创建一次,并且在渲染的时候,我们直接服用就可以了,第二它是一个选项式的API,比如我们把所有的像Methods,data,watch都放在vue实例下面,v3是一个组合式API,把所有东西都放在set up当中,这个set up相当于是beforeCreate和created这两个生命周期

2.vue2默认进行懒观察

3.重写了虚拟 DOM

4.项目目录结构

5.vue3性能的提升

vue 组件通信

父传子: props,子传父:通过$emit ,兄弟传值BUS,vuex

vuex有五种状态和属性

state存放数据

mulations同步修改state里的数据

actions异步修改数据,但需要调用mutations里面的方法修改,

getters数据过滤器相当于vue里的computed

modules模块化

vuex的优势

优点:解决了非父子组件的通信,减少了ajax请求次数,有些可以直接从state中获取

缺点:刷新浏览器,数据丢失

V-for为什么加key?

保证了唯一性,避免dom元素重复渲染

vue中nextTick作用

nextTick 是在下次DOM更新循环结束之后执行延迟回调,

在修改数据之后使用nextTick,就可以在回调中获取更新后的 DOM.

浏览器缓存?

它的一个基本原理就是浏览器在加载资源的时候,他会根据这个请求头的express和

开始Ctrl这两个参数判断是否能命中,是否命中了抢缓存,如果命中了,就是直接从缓存中夺取资源,然后他不会发送请求到服务器,如果没有命中抢缓存的话,浏览器一定会发送一个请求到

服务器,然后通过,lost mode ,model,fund这个属性跟仪态,来验证这个资源是否命中协商缓存,如果命中的话,服务器就将这个请求返回,但是不会返回这个资源的数据,依然是从这个缓存中读取资源,如果强缓存跟协商缓存都没有命中,就直接从服务器加载资源,

不同点:强缓存不会发送请求到服务器,协商缓存会发送请求到服务器

相同点:都是从客户端缓存中来加载资源,而不是从服务器加载资源数据

命中缓存返回状态码:http是304,https是80

Http与Https协议有什么区别?

HTTPS需要到CN来申请证书,因为HTTPS协议,一般免费的证书比较少,所以会花费一定的费用,Http是超文本传输协议,信息是明文传输的,而HTTPS它是具有安全性的,并且是ssl加密传输的一个协议,并且它俩连接的方式也不一样,http的端口是80 HTTPS端口是443,ATP它的连接很简单,是无状态的,但是HTTPS它是由SSL加HTTP协议构建的是加密传输的一个协议

地址栏输入一串网页地址,它这个背后发生了什么?

浏览器它会先查看浏览器缓存,系统缓存,路由缓存,如果存在缓存的话就直接显示。如果没有就进行下一步,域名解析,来获取对应的一个IP,然后就是浏览器向服务器发送TCP连接与这个浏览器建立TCP三次握手,最后一步就是解析CS的样式

cookie、localStorage、sessionStorage它们三者有什么区别?

localStorage和sessionStorage 不会把数据发给服务器,仅在本地存储

cookie:过期时间之前一直有效(数据不能超过4k)

sessionStorage :页面关闭就清理(内存:5M)

localStorage:除非被清理否则始终有效 (内存:5M)

indexDB;除非被清理否则始终有效 (内存:无限)

图片懒加载?

是什么?

图片懒加载是前端页面优化的一种方式,根据图片是否出现在可视区域的范围内进行相应图片的请求显示(结合滚动加载)。

为什么?

如果页面中需要显示很多图片的时候,当我们一味地使用控件直接加载图片的时候,这样会消耗许多时间去请求网络,而且很影响渲染速度,以至于影响用户体验。

如何使用?

首先在img里定义src的图片地址,src为“加载中”的动图,data-src为实际要展示的图片地址;业务代码中,首先全局获取文档中所有img控件的数量以及img控件集合,然后在lazyload中通过判断每张图片的offsetTop是否小于视口高度和滚动条scrolltop的和来判断是否进入可视区域,如果进入可视区域就进行显示。

什么是跨域,解决跨域方法?

1.协议,端口,域名不同

2.porxy代理 实现方法:通过nginx代理;

CORS,jsonp

vue-router 两种模式

默认是hash模式,路由上方的路径是用#表示,http://localhost:8080/#/news

可以将hash模式改为history模式,路由上方的路径就没有了

vue打包流程

将写好的vue项目 通过命令npm run build执行打包,最终在根目录下会生成dist文件夹,该文件就是我们打包后的文件。 但是打包之前我们需要将路由配置hash, 将vue.config.js里面的publicPath配置为./

然后将打包文件放到服务器上 ,放出连接地址就ok了。

CSS预处理器

使用CSS预处理器,提供 CSS 缺失的样式层复用机制、减少冗余代码,提高样式代码的可维护性。大大提高了我们的开发效率。

Sass和Less(Less用@,Sass用$)

Less环境,使用较Sass简单,sass的安装需要安装Ruby环境,Less基于JavaScript,是需要引入Less.js来处理代码输出css到浏览器,也可以在开发环节使用Less,然后编译成css文件,直接放在项目中,有less.app、SimpleLess、CodeKit.app这样的工具,也有在线编辑地址。

LESS并没有裁剪CSS原有的特性,而是在现有CSS语法的基础上,为CSS加入程序式语言的特性。

Less与Sass处理机制不一样

前者是通过客户端处理的,后者是通过服务端处理,相比较之下前者解析会比后者慢一点

keep-alive功能是什么?

是用来缓存组件的.==>提升性能

包裹动态组件缓慢执行,一般情况下组件进行切换的时候,默认会进行销毁,但它不销毁

0Xnk0WG+9eSlvrCF9JyXnZ+IRZk7QI5IisCSJCuw1l0MmsqT9YB+16ipbBOwaXSEsa3UFXzPXIzPiWndM3PobcgkxyECTABJsAEmAATYAJMgAkwASbgUATsrJlu6tncED7uZ4j2OousjV+iqRWxhGbaETZZM63VVjtCvhw1D3rNtKNmkPPFBJgAE2ACTIAJMAEmwASYABOwE4G2U4R2jYC8tPSJJgVpOz0XJ8MEmAATYAJMgAkwASbABJgAE2ACTKDVCLTcm7elWbtxGFvWHrY0NIdjAkyACTABJsAEmAATYAJMgAkwASbgsATaTjPtsAg4Y0yACTABJsAEmAATYAJMgAkwASbABKwj0Haaaevy5RChXTKfhKdD5IQzwQSYABNgAkyACTABJsAEmAATYAKORIA10470NjgvTIAJMAEmwASYABNgAkyACTABJtAuCLAw3S5eE2eSCTABJsAEmAATYAJMgAkwASbABByJAAvTjvQ2OC9MgAkwASbABJgAE2ACTIAJMAEm0C4ItOE60+2CB2eSCTABJsAEmAATYAJMgAkwASbABJhAswRYM90sIg7ABJgAE2ACTIAJMAEmwASYABNgAkxAS4CFaS0PPmICTIAJMAEmwASYABNgAkyACTABJtAsgf8PVohGcg7pKWYAAAAASUVORK5CYII=

V-if和v-show有什么区别?

 

v-if

v-show

不同点

会消除dom,耗性能

适合频繁使用

相同点

显示隐藏

Vue监听属性和计算属性有什么区别?

watch监听

computed 计算属性

没有缓存,

支持异步

在data中定义

有缓存

不支持异步

在compute中定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值