【问题标题】:Vue server side rendering performance issueVue服务器端渲染性能问题
【发布时间】:2020-04-22 02:26:21
【问题描述】:
我遇到了一个奇怪的问题。这是我渲染 vue 页面的代码。在我的本地机器上,这个页面的渲染时间大约是 50~80ms,但是,如果我并行访问页面,有时可能是 120ms 左右(可能是 200 个请求中的 5 次),但大多数时候,它仍然是50~80 毫秒。
但是,当我将代码部署到我们的生产 docker 时,这些 peek 时间越来越差,有时可以达到 1 秒,而且很多时候达到 500ms,性能很差。没有意义,请求负载不重,我们也有负载均衡。对于我们使用 EJS 渲染的类似页面,我们看不到这种窥视。 EJS和Vue使用的后端逻辑和服务都是一样的。
客户端渲染也是一样,症状类似。
有没有人知道什么样的原因会导致这个问题?
【问题讨论】:
标签:
vue.js
rendering
server-side-rendering
【解决方案1】:
首先做两件事:
1- 如果可能,请使用灯塔进行快速测试,这将有助于确定问题所在。
2- 检查控制台是否有任何错误和警告。
如果没有有关您的代码的更多信息,我认为无法说出问题的确切原因。
然而,在搜索了一段时间后,我发现了一个article,作者遇到了同样的性能问题。
This 是他的灯塔检查的结果。如您所见,他的网站在索引和内容全画方面存在缺陷;长话短说,他有一个无限循环和没有键的 v-for 循环。
以下是一些关于如何更好地优化 vue 应用的提示:
- 应用 Vue 样式指南和 ESLint
Vue 文档中有一个风格指南:https://vuejs.org/v2/style-guide/。
您可以找到四个规则类别。我们非常关心其中三个:
Essential 规则防止我们出错,
Recommended 和 strongly recommended 保持最佳实践的规则——以提高代码的质量和可读性。
你可以使用 ESLint 来为你处理这些规则。您只需在 ESLint 配置文件中正确设置所有内容。
-
不要使用多个 v-if
-
不要在组件中编写 api 调用处理程序
只需在组件逻辑中执行本地所需的操作。每个可能是外部的方法都应该分开,并且只在组件中调用,例如业务逻辑。
- 使用插槽而不是大量道具
5.延迟加载路由
- 将 watcher 与 immediate 选项一起使用,而不是同时使用创建的 hook 和 watcher。
在这里another article 了解如何改进您的 vue 应用程序。
祝你好运!