最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 从源码来看Vue面试题

    正文概述 掘金(玛塔塔)   2020-12-16   544

    1、v-for和v-if同时出现,谁的优先级更高?

    • 从源码来看Vue面试题

    • 显然for的优先级高于if,因为genElement函数中,for比if更早判断

    • 每次执行都会先循环然后判断条件,会导致性能浪费

    • 解决方案:在for外嵌套一层if的判断,或者通过computed提前过滤好渲染列表

    2、组件的data选项为什么必须是个函数而Vue的根实例则没有此限制

    • 从源码来看Vue面试题

    • Vue组件会存在多个实例,使用对象定义data会导致其共用一个对象,会造成数据污染

    • 根实例只会被创建一次,因此无须限制

    • 源码上来看,组件实例会比根实例先定义,vm为undefined时,先判断了组件的data情况

    3、vue中key的作用和工作原理

    从源码来看Vue面试题

    • key的作用是为了高效的更新虚拟dom,原理是在patch过程中,可以快速判断是否是同一个节点,避免频繁更新DOM元素,提升性能
    • 动画过渡时如果不设置key,可能导致动画效果不触发的问题

    4、如何理解Vue的diff算法

    (源码太多了……暂时没想到有代表性的,具体可以看patch.js)

    • what:diff算法是虚拟DOM技术的必然产物,通过对比新旧的VDOM,更新真实DOM
    • why:每个组件对应一个watcher,通过diff才能找到变化的地方
    • when:组件实例执行更新函数时,对比上一次渲染后的VNode和新的VNode,也叫patch
    • how:深度优先,同层比较。首先假设首尾可能相同做4次同层对比,没有找到则循环遍历查找,可以借助key更高效的查找

    5、如何理解Vue组件化

    从源码来看Vue面试题

    从源码来看Vue面试题

    • what:组件是独立可复用的代码组织单元,可用来构建大型应用(官话)。Vue的组件是基于配置的,平时写的组件本质是组件的配置,通过vue-loader生成其构造函数,基于VueComponent,继承于Vue
    • why:提升开发效率,应用的测试性和复用性
    • how:组件的通信和拓展常用的有props,插槽,注册自定义方法。
    • 其他:组件应该是高内聚低耦合的,Vue组件遵循单项数据流

    6、Vue性能优化的方法

    1、路由懒加载:

    routes: [{ path: '/foo', component: () => import('./foo.vue') }]
    

    2、keep-alive 缓存页面

    3、对于渲染时间长的组件,使用v-show复用DOM(对比于v-if)

    4、v-for遍历的同时,避免使用v-if

    5、对于纯粹的数据展示,使用Object.freeze()阻止响应式

    6、使用虚拟滚动列表,每次只渲染少量的数据

    7、vue-lazyLoad对图片进行懒加载

    8、第三方库按需加载

    9、纯展示的无状态组件,可以标记为函数式组件

    <template functional>{{ foo }}</template>
    

    10、SSR

    7、Vuex的理解

    what:集中管理所有组件的状态,并保证状态以某种规则可预测的发生变化

    why:解决多组件的状态共享的问题,以全局的单例模式进行管理,代码结构更易维护

    should:如果没有大量的全局状态需要维护,其实并不需要用到

    how:通过store实例state访问这些状态,通过mutation或者action更改状态

    8、Vue-router中路由安全怎么实现

    通过路由守卫,设置导航钩子函数,其中判断用户的登录态和权限,来达到保护路由的目的

    具体实现:全局前置守卫(beforeEach、beforeResolve、afterEach)、路由独享守卫(beforeEnter)、组件内守卫(beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave)

    3种守卫区别:

    • 作用范围
    • 只有组件内守卫可以获取到组件实例
    • 触发顺序不同

    从源码来看Vue面试题

    9、nextTick的理解

    what:Vue.nextTick([callback, context]),在下次DOM更新后执行的延迟回调

    why:vue的异步更新策略使得对数据的修改不会立刻更新到视图上,如果想立刻获取到dom状态,则需要调用该方法

    how:Vue将开启一个队列(callbacks),缓冲同一事件循环中发生的事件改变,用异步的timerFunc方法(Promise、MutationObserver、setImmediate、setTimeout)去调用,如果同一个watcher被多次触发,则只执行最后一次,从而避免对DOM的重复操作

    从源码来看Vue面试题

    10、Vue响应式的理解

    what:可以检测到数据的变化,并且可以根据这个变化做出响应的机制

    why:mvvm架构中需要解决数据层和视图层的连接,通过数据驱动,数据变化,视图更新

    how:根据不同的类型做不同的处理,如果是对象则采用Object.defineProperty定义数据拦截,如果是数组,则通过覆盖数组原型的方法,扩展7个可以改变数组长度的方法,使得这些方法做额外的更新通知。可能存在的问题:递归初始化会导致性能损失;新增的属性需要$set特殊处理;对于Set、Map等新数据机构不支持

    ToDo:使用Proxy机制代理响应数据,提高初始化性能和减少内存。Vue3中将其抽出为reactivity包,不依赖于Vue

    从源码来看Vue面试题

    从源码来看Vue面试题


    起源地下载网 » 从源码来看Vue面试题

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元