1. Vue2,vue3区别
- Vue3使用了Proxy代替了Object.defineProperty来实现响应式;
- Vue3使用了Tree-shaking技术来减小打包体积;
- Vue3的编译器性能得到了大幅提升;
- Vue3的API设计更加简单易用;
- Vue3支持Composition API,使得代码结构更加清晰;
- Vue3移除了一些不常用的API,如inline-template、filters等。
2. Vue,vue3 diff算法的认识
- Vue2的diff算法是采用双向比较的方式,即从父节点开始,同时递归向下比较新旧子节点,找到相同的节点进行复用,找到不同的节点进行更新。这种算法的效率并不高,尤其是在大型列表渲染时。
- Vue3的diff算法采用了优化的单向比较,即从父节点开始,递归向下比较新旧子节点,找到相同的节点进行复用,找到不同的节点进行更新。同时,Vue3还使用了一些优化技术,如静态提升、Block Tree等,使得渲染性能得到了大幅提升。
3. Vue2,vue3 v-if v-for优先级和源码
- 在Vue2中,v-for的优先级高于v-if,即先循环再判断条件。在源码中,v-for的编译优先级在v-if之前。
- 在Vue3中,v-if的优先级高于v-for,即先判断条件再循环。在源码中,v-if的编译优先级在v-for之前。
4. Vue2 vue3 组件挂载流程及vue3访问数据的优先级
- 在Vue2中,组件挂载的过程是先实例化组件对象,然后进行模板编译,最后挂载到DOM上。访问数据的优先级是props > data > computed > methods。
- 在Vue3中,组件挂载的过程是先进行模板编译,然后实例化组件对象,最后挂载到DOM上。访问数据的优先级是props > setup > data > computed > methods。
5. vuex源码,$stroe
- Vuex是Vue的状态管理库,它的源码实现主要包括State、Getter、Mutation、Action、Module等模块。$store是Vuex中的一个全局对象,用于存储和管理状态。
- 在Vuex源码中,State模块负责存储状态,Getter模块负责获取状态,Mutation模块负责修改状态,Action模块负责异步操作和提交Mutation,Module模块负责模块化管理状态。
- 通过store对象,可以访问和修改Vuex中的状态,例如store.state、store.getters、store.commit、$store.dispatch等。
6. 浏览器加载资源过程, script async defer 区别
- 浏览器加载资源的过程包括:DNS解析、建立TCP连接、发送HTTP请求、服务器响应、处理响应内容、解析HTML、解析CSS、解析JavaScript等步骤。
- script标签默认会阻塞页面的渲染,因此为了提高页面渲染速度,可以使用async和defer属性来异步加载脚本。async属性表示异步加载脚本,不会阻塞页面的渲染,但脚本加载完成后会立即执行。defer属性表示延迟加载脚本,不会阻塞页面的渲染,但脚本会在文档解析完成后按照顺序执行。
7. v8引擎, 事件循环, 垃圾回收
- v8引擎是一款开源的JavaScript引擎,由Google开发,用于在Chrome浏览器中执行JavaScript代码。v8引擎采用了即时编译技术,将JavaScript代码编译成机器码,使其执行速度得到大幅提升。
- 事件循环是JavaScript执行环境中的一种机制,用于处理异步任务。当异步任务完成后,事件循环会将其放入任务队列中,等待JavaScript引擎执行。JavaScript引擎会在当前任务执行完成后,从任务队列中取出下一个任务并执行,这样循环执行,直到任务队列为空。
- 垃圾回收是指JavaScript引擎自动删除不再使用的内存空间的过程。JavaScript中的变量和对象会占用内存空间,当其不再被引用时,JavaScript引擎会标记这些内存空间为可回收状态。随着程序的运行,JavaScript引擎会定期进行垃圾回收,将这些不再使用的内存空间释放,以便其他程序使用。v8引擎采用了垃圾回收算法,如标记-清除、增量标记等,使内存管理更加高效。