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 输出,但这会很耗时并且不会生成与动态站点创建的完全相同的输出。谷歌可能不赞成我为它提供静态页面,这些页面并不能真正代表“普通”访问者可以看到的动态版本。
这似乎是一个无法解决的问题。要么我完全在服务器端生成页面,要么爬虫无法索引页面。:(