1.什么是 mvvm? mvvm 和 mvc 区别?

MVVM 是 Model-View-ViewModel 的缩写。mvvm 是一种设计思想。
Model 层代表数据模型,View 代表 UI 组件。

区别:主要就是 mvc 中 Controller 演变成 mvvm 中的 viewModel。mvvm 主要解决了 mvc 中大量的 DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验。和当 Model 频繁发生变化,开发者需要主动更新到 View

2.为什么vue中data是一个函数?

当data是一个函数的时候,每一个实例的data属性都是独立的,不会相互影响

3.双向绑定的原理是什么?

采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty()来劫持各个属性的 setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。

4.v-moudel原理是什么?

简单描述就是view层输入值影响data的属性值,data属性值发生改变会更新view层的数值变化。

5.nextTick的工作原理是什么?

在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM

6.computed 和 watch 的相同和不同之处 ?

相同点:
computed 和 watch 都是以vue的依赖追踪为基础的,
都是希望当依赖发生改变的时候,被依赖的数据根据预定好的函数发生改变。
不同点:
watch 监听,一般是监听一个数据,从而影响多个数据
computed 计算属性, 一般是计算一个属性,这个属性受多个数据影响

7.v-if和v-show的相同点和共同点,项目中如何选择性使用?

相同点:两个都是让元素不可见

不同点:v-show控制的时元素的display属性,无论初始条件是否成立,都会渲染标签。

v-if只有在条件成立时才渲染为真实的标签,条件为假,不会去渲染标签

频繁切换时,使用v-show
多路分支,选择v-if

8.vue router的原理是什么?

更新视图但不重新请求页面

9.vuex 原理

vuex 仅仅是作为 vue 的一个插件而存在, 只能使用在 vue 上,很大的程度是因为其高度依赖于 vue 的 computed 依赖检测系统以及其插件系统,vuex 中的 store 本质就是没有 template 的隐藏着的 vue 组件;

10.为什么V-for和v-if不能同时用?

v-for比v-if优先,如果每一次都需要遍历整个数组,将会影响速度,尤其是当之需要渲染很小一部分的时候。

如果连用的话会把 v-if 给每个元素都添加一下,会造成性能问题。

11.v-for中key的作用是什么?

vue中列表循环需加:key="唯一标识" ,因为vue组件高度复用增加Key可以标识组件的唯一性,为了更好地区别各个组件 key的作用主要是为了高效的更新虚拟DOM

12.谈谈你对keep-alive的了解?

keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,避免重新渲染

13.Vue怎么做性能优化?

一.编码优化

1. 将所有的数据都放在data中,data中的教据都会增加getter和setter,会收集对应的watcher
2. vue在v-for时给每项元素绑定事件需要用事件代理
3. spa页面采用keep-alive缓存组件
4. 拆分组件(提高复用性.增加代码的可维护性,减少不必要的渲染)
5. vif当值为false时内部指令不会执行,具有阻断功能,很多惆况下使用v-if代v.show
6. key保证唯一性(默认vue会采用就地复用策略}
7.object.freeze 冻结教据(就不会getter和setter)
8. 合理使用路由懒加载、异步组件
9. 尽量采用runtime运行时版本
10. 教据持久化的问题(防抖、节流)

2.Vue加载性能优化

1.使用第三方框架,按照按需加载导入
2.滚动可视化区域懒加载
3.图片懒加载

3.打包优化

1.使用 cdn 的方式加载第三方模块
2.多线程打包 happypack
3.splitChunks 抽离公共文件
4.sour ceMap 生成

4.缓存/压缩

1.客户端缓存 or 服务端缓存
2.服务端 gzip 压缩

vue的常见理论问题的更多相关文章

  1. Vue基础01vue的基本示例,vue的双向数据绑定,vue中常见的几种用法,vue相关常见指令

    自学vue框架,每天记录重要的知识点,与大家分享!有不足之处,希望大家指正. 本篇将讲述:vue的基本示例,vue的双向数据绑定,vue中常见的几种用法,vue相关常见指令 前期学习基础,使用vue. ...

  2. 前端面试:Vue.js常见的问题

    摘自今日头条用户:代码开发 原文链接: https://www.toutiao.com/a6683120112255369732/?tt_from=mobile_qq&utm_campaign ...

  3. vue.js常见的报错信息及其解决方法的记录

    1.Vue packages version mismatch 翻译:vue包版本匹配错误 报错样例: 报错原因:通常出现于一些依赖库的更新或者安装新的依赖库之后(可以认为npm update已经成为 ...

  4. [总结]vue开发常见知识点及问题资料整理(持续更新)

    package.json中的dependencies与devDependencies之间的区别 –save-dev 和 –save 的区别 我们在使用npm install 安装模块或插件的时候,有两 ...

  5. vue开发常见命令

    1.安装脚手架 安装脚手架命令:npm install -global vue-cli 2.升级脚手架 有时候需要把整个脚手架升级一下,这个用到命令npm install --global vue-c ...

  6. vue 不常见操作

     对 v-html 的扩展操作, 问题产生背景, 在vue 项目中,用v-html渲染 html字符串,这里面包括a 标签等内容,因为某种需求,a 的默认跳转不符合要求,要经过自己定义的方法跳转. 原 ...

  7. 【转】[总结]vue开发常见知识点及问题资料整理(持续更新)

    1.(webpack)vue-cli构建的项目如何设置每个页面的title 2.vue项目中使用axios上传图片等文件 3.qs.stringify() 和JSON.stringify()的区别以及 ...

  8. vue项目常见需求(项目实战笔记)

    一.起步 1.引入reset.css解决手机之间不同分辨率的问题(reset.css为别人封装的css文件) import './assets/styles/reset.css' 使用方式 1rem= ...

  9. 使用vue.js常见错误之一

    打包项目时,在vscode中输入如下命令 webpack .\src\main.js .\dist\bundle.js 出现如下错误: WARNING in configurationThe 'mod ...

随机推荐

  1. #使用C#winform编写渗透测试工具--子域名挖掘

    使用C#winform编写渗透测试工具--子域名挖掘 这篇文章主要介绍使用C#winform编写渗透测试工具--子域名挖掘.在渗透测试中,子域名的收集十分重要,通常一个网站的主站的防御能力特别强,而他 ...

  2. (论文笔记Arxiv2021)Walk in the Cloud: Learning Curves for Point Clouds Shape Analysis

    目录 摘要 1.引言 2.相关工作 3.方法 3.1局部特征聚合的再思考 3.2 曲线分组 3.3 曲线聚合和CurveNet 4.实验 4.1 应用细节 4.2 基准 4.3 消融研究 5.总结 W ...

  3. Spring源码解析之BeanFactoryPostProcessor(三)

    在上一章中笔者介绍了refresh()的<1>处是如何获取beanFactory对象,下面我们要来学习refresh()方法的<2>处是如何调用invokeBeanFactor ...

  4. AT指令集及其通信测试方式

    1 前言 AT即Attention,AT指令集是从终端设备(Terminal Equipment,TE)向终端适配器(Terminal Adapter, TA)发送的.通过TA,TE发送AT指令来控制 ...

  5. JAVAWEB的基本入门(JSP、Tomcat)>从零开始学JAVA系列

    目录 JAVAWEB的基本入门(JSP.Tomcat) 使用idea创建web项目的两种方式 1.直接创建一个web项目(这样创建好的项目可以直接运行) 2.创建一个普通的java项目并配置web模块 ...

  6. Spring Cloud Gateway自定义异常处理Exception Handler

    版本: Spring Cloud 2020.0.3 常见的方法有 实现自己的 DefaultErrorWebExceptionHandler 或 仅实现ErrorAttributes. 方法1: Er ...

  7. OpenFaaS实战之八:自制模板(maven+jdk8)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. 我所学的c语言

    c语言结构 #include <stdio.h> int main(){    /* 我的第一个 C 程序 */    printf("Hello, World! \n" ...

  9. 以TiDB热点问题来谈Region的调度流程

    什么是热点问题 说这个话题之前我们先回顾一下TiDB的主要结构和概念. TiDB的核心架构分为TiDB.TiKV.PD三个部分,其中TiKV是一个分布式数据存储引擎用来存储真实的数据,在TiKV中又对 ...

  10. 移动端 CPU 的深度学习模型推理性能优化——NCHW44 和 Record 原理方法详解

    用户实践系列,将收录 MegEngine 用户在框架实践过程中的心得体会文章,希望能够帮助有同样使用场景的小伙伴,更好地了解和使用 MegEngine ~ 作者:王雷 | 旷视科技 研发工程师 背景 ...