Vue服务端渲染避免状态回传

发布于 2022-09-04 22:58:52 字数 1388 浏览 12 评论 0

vue2开始支持ssr(Server-Side-Rendering),我使用的版本如下:

{
    "vue": "^2.3.3",
    "vue-resource": "^1.3.1",
    "vue-router": "^2.5.3",
    "vue-server-renderer": "^2.3.3",
    "vuex": "^2.3.1",
    "vuex-router-sync": "^4.1.2"
}

我是按照vue-ssr官方教程 中提供的vue-hackernews-2.0的例子来写的,跑起来没毛病。你可以在这里看到这个示例。ssr中有个重要的步骤是前后端的状态需要同步,一般用个中央状态容器(vue使用vuex,react用redux或flux)来保持并且同步状态。现在通用的同步方法就是在服务端将状态JSON通过类似如下的方式插入渲染好的HTML中:

<script>
window.__INITIAL_STATE__= { "prop": "value" };
</script>

然后在浏览器端初始化状态容器(vue中是vuex),将这个状态传入状态容器中初始化容器,自此,完成了前后端状态的统一。

介绍完背景,问题来了。我们做了一个游戏玩家社区,类似:https://www.taptap.com/,这种网站的特点是既有交互性的操作,但也有大量的静态不变的内容。设想一个文章详情页面,假设文章很长,内容特别多,并且这个页面没有什么需要双向绑定带交互性的东西,这个时候我再回传这个状态,你可以想象这差不多将页面大小增加了几乎一倍,占用了用户过多的流量。比如,你去查看官方示例的渲染支出页面:view-source:https://vue-hn.now.sh/top图片描述

你就会明白我的担忧了。我试过很多方法,也问过百度一个专门做服务端渲染的资深工程师,得到的结果都是做服务端渲染,必须回传状态,因为vue在客户端会再做一次同步,如果状态不统一,你的页面会重新渲染一次。所以,就这个问题,看看社区是否碰到我类似的忧虑,有什么好的解决方案,谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文