每日面试题 -- Vue 5

110 阅读3分钟

咱们接着聊Vue的面试题,今天要点包括:

  1. 说一下 Vue SSR 的实现原理
  2. Vue 组件的 data 为什么必须是函数
  3. 说一下 Vue 的 computed 的实现原理

Vue SSR 的实现原理

Vue SSR,也就是服务器端渲染,这事儿啊,主要是为了解决单页面应用(SPA)在SEO和首屏加载速度上的问题。实现原理嘛,简单来说,就是把原本在客户端生成的视图部分转移到服务器上完成。

首先,服务器接收到客户端的请求后,会立即使用Vue服务器端渲染器(vue-server-renderer)根据Vue应用创建一个渲染器。这个渲染器会创建一个Vue实例,然后执行与客户端相同的预加载、路由匹配等操作。

接下来,渲染器会将Vue实例渲染成HTML字符串,并将这个字符串发送给客户端。客户端拿到这个字符串后,就可以直接将其显示出来,而不需要等待所有的JavaScript都下载完成并执行。

这个过程中,最关键的就是服务器上的Vue实例和客户端的Vue实例需要同步状态,以保证客户端接管后能无缝继续应用的交互。

Vue 组件的 data 为什么必须是函数

在Vue组件中,data必须是一个函数,这事儿其实挺关键的。原因嘛,主要是为了保证每个实例可以维护一份被返回对象的独立的拷贝。如果data是一个对象的话,那所有的实例共享这个对象,一个实例对data的修改会影响到所有实例,这显然是不合适的。

将data设置为一个函数,每次创建一个新实例时,就会调用这个data函数,从而返回一份新的data对象的拷贝。这样每个实例都有自己的data对象,互不影响,保证了组件的独立和可复用性。

Vue 的 computed 的实现原理

Vue的computed属性,其实是基于Vue的响应式系统实现的一种缓存机制。computed属性会依赖其他属性值,并且只有当这些依赖属性值发生改变时,才会重新计算computed属性的值。

实现原理上,每个computed属性内部都有一个watcher,这个watcher会监听computed函数内所依赖的所有响应式属性。当任何一个依赖属性的值发生变化时,watcher就会通知computed属性重新计算。

但是,如果computed属性的值没有被用到(比如没有在模板或计算属性中被引用),则不会进行计算。这就是为什么computed属性可以提高性能的原因,因为它减少了不必要的计算,只有在依赖的数据变化时才会重新计算。

启发和启示

了解Vue SSR的实现原理,对于提升应用的首屏加载速度和SEO有重要作用。明白为什么Vue组件中的data必须是函数,有助于我们更好地理解Vue的设计理念,保证组件的独立性和可复用性。而掌握computed属性的实现原理,则可以让我们更高效地使用Vue的响应式系统,优化应用的性能。

对开发者来说,深入理解Vue的这些原理和设计思想,不仅能提高我们解决问题的能力,还能帮助我们写出更高效、更易维护的代码。继续探索Vue的奥秘,让我们成为更优

秀的Vue开发者。