从客户端 JavaScript 生成的站点生成静态 HTML

Rob*_*ans 5 html javascript static generator client-side

我仅使用带有 JS 脚本的 index.html 生成整个网站。

JS 根据通过服务器端 API 接收到的 JSON 数据创建 HTML 内容。这在客户端效果很好,使网站加载速度和交互速度非常快,但有一个障碍......当爬虫来索引页面时,它会看到一个空白页面。

显而易见的解决方案是提供包含所有页面的静态版本的 XML 站点地图。问题是...当每个页面仅在客户端生成并且所有逻辑和模板都是客户端时,如何生成每个页面的静态版本?

这不是一个新问题...我确信任何在客户端动态生成页面的人都遇到过这个问题并解决了它,但我想在深入研究并尝试解决这个问题之前我应该​​询问开发社区。

Rob*_*ans 2

2019年更新

科技已取得重大进展。我鼓励任何想要在一个同构代码库中创建 SSR(服务器端渲染)客户端 Web 应用程序的人看看优秀的 Next.js。

Next.js 用 Node.js 内置的服务器端路由和渲染系统包装了 React,定义了一个标准接口来获取服务器和客户端页面的数据,并附带了一些开箱即用的功能,使其成为最好的功能之一SSR 和 CSR Web 应用程序的选择(恕我直言)。

哦...他们也有很棒的教程!

2013年答案

我已经成功地使用 PhantomJS 从客户端输出生成静态页面,并在页面和所有 JS 完成加载/执行后捕获 HTML 输出。这种方法比我想要的要慢,而且不太可能很好地扩展,但这是迄今为止我能想到的唯一选择。

该网站每天已经收到超过 10,000 次页面浏览量,拥有超过 8,000 名唯一访问者,因此随着新评论/帖子的创建,页面会定期更新,然后将这些更改添加到队列中,该队列在单独的服务器中进行处理,以使用 Phantom 生成静态页面。

我能想到的唯一其他方法是创建一个 Node.js 进程,该进程使用相同的 jsRender 库并根据一些数据从模板文件构建 HTML 输出,但这设置起来很耗时,并且不会生成与动态站点创建的输出完全相同。谷歌可能会对我向其提供静态页面感到不满,因为这些静态页面并不能真正代表“普通”访问者可以看到的动态版本。

这似乎是一个无解的问题。要么我完全在服务器端生成页面,要么爬虫无法索引页面。:(