台州网站优化排名,成都网站建设互联,网站优化 h几 更易被抓,小说网站怎么做原创面试题#xff1a;请你阐述一下对vue虚拟dom的理解 什么是虚拟dom#xff1f; 虚拟dom本质上就是一个普通的JS对象#xff0c;用于描述视图的界面结构 在vue中#xff0c;每个组件都有一个render函数#xff0c;每个render函数都会返回一个虚拟dom树#xff0c;这也就意味… 面试题请你阐述一下对vue虚拟dom的理解 什么是虚拟dom 虚拟dom本质上就是一个普通的JS对象用于描述视图的界面结构 在vue中每个组件都有一个render函数每个render函数都会返回一个虚拟dom树这也就意味着每个组件都对应一棵虚拟DOM树 为什么需要虚拟dom 在vue中渲染视图会调用render函数这种渲染不仅发生在组件创建时同时发生在视图依赖的数据更新时。如果在渲染时直接使用真实DOM由于真实DOM的创建、更新、插入等操作会带来大量的性能损耗从而就会极大的降低渲染效率。 因此vue在渲染时使用虚拟dom来替代真实dom主要为解决渲染效率的问题。 虚拟dom是如何转换为真实dom的 在一个组件实例首次被渲染时它先生成虚拟dom树然后根据虚拟dom树创建真实dom并把真实dom挂载到页面中合适的位置此时每个虚拟dom便会对应一个真实的dom。 如果一个组件受响应式数据变化的影响需要重新渲染时它仍然会重新调用render函数创建出一个新的虚拟dom树用新树和旧树对比通过对比vue会找到最小更新量然后更新必要的虚拟dom节点最后这些更新过的虚拟节点会去修改它们对应的真实dom 这样一来就保证了对真实dom达到最小的改动。 模板和虚拟dom的关系 vue框架中有一个compile模块它主要负责将模板转换为render函数而render函数调用后将得到虚拟dom。 编译的过程分两步 将模板字符串转换成为AST将AST转换为render函数 如果使用传统的引入方式则编译时间发生在组件第一次加载时这称之为运行时编译。 如果是在vue-cli的默认配置下编译发生在打包时这称之为模板预编译。 编译是一个极其耗费性能的操作预编译可以有效的提高运行时的性能而且由于运行的时候已不需要编译vue-cli在打包时会排除掉vue中的compile模块以减少打包体积 模板的存在仅仅是为了让开发人员更加方便的书写界面代码 vue最终运行的时候最终需要的是render函数而不是模板因此模板中的各种语法在虚拟dom中都是不存在的它们都会变成虚拟dom的配置