2013-05-09 144 views
3

我使用JS脚本只使用index.html生成整个站点。从客户端JavaScript生成的站点生成静态HTML

的JS基于经由服务器侧API接收JSON数据创建HTML内容。这非常适合客户端,并且使网站的加载速度和交互速度非常快,但是有一个障碍......当抓取工具来索引页面时,它会看到一个空白页面。

显而易见的解决方案是为所有页面的静态版本提供一个XML站点地图。问题是...如何生成每个页面的静态版本,当他们只生成客户端和所有的逻辑和模板是客户端?

这不是一个新问题。我敢肯定,任何人产生动态网页客户端已经打到这个问题,并解决它,但我认为我会问dev的社区潜水前,并试图解决这个问题。

+0

当你说它是工作的客户端你的意思是说,页面不在服务器,当你把相同的页面在服务器dosent工作吗?api服务器有另一个域名,服务器你在哪里主持页面? – 2013-05-09 20:34:52

+0

@Rolando网站上的HTML(除了index.html,它只是一个带有脚本标签以加载JavaScript应用的主体)都是通过JavaScript生成的。如果你没有使用任何JavaScript加载index.html文件,它将是一个空白 – 2013-05-09 20:38:05

+0

该网站的工作原理?但谷歌ajax爬虫不知道? – 2013-05-09 20:43:27

回答

1

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

该网站每天接收的页面浏览量超过10,000次,拥有超过8,000个唯一身份访问者,因此在创建新评论/帖子时定期更新页面,然后将这些更改添加到队列中,以便在单独的服务器中获取进程以生成静态与幻影的页面。

我能想到的唯一方法是创建一个Node.js进程,该进程使用相同的jsRender库并根据某些数据从模板文件构建HTML输出,但这样做会很耗时并且不会生成与动态网站创建的完全相同的输出。谷歌可能会对我服务的静态页面皱眉,这些页面并不真正代表“普通”访问者可以看到的动态版本。

这似乎是一个无法解决的问题。我可以在服务器端完全生成页面,或者爬网程序不能为页面建立索引。 :(