预计算客户端Javascript执行

预计算客户端Javascript执行,javascript,ajax,phantomjs,Javascript,Ajax,Phantomjs,假设您要构建一个功能强大的单页客户端应用程序,该应用程序侦听URL更改,以便在应用程序中导航 然后假设,当用户或搜索引擎bot通过其url加载页面时,我们不希望像正常情况那样交付静态javascript文件并点击api,而是希望在服务器端预计算所有内容,并交付DOM和js状态 我想知道是否有现有的工具或技术可以将这种状态的执行持久化到客户端 我知道我可以在phantom JS中执行脚本并输出DOM元素,但随后事件处理程序、控制器和JS内存状态将无法正确连接。我可以嗅探我们的用户代理,只将预计算的

假设您要构建一个功能强大的单页客户端应用程序,该应用程序侦听URL更改,以便在应用程序中导航

然后假设,当用户或搜索引擎bot通过其url加载页面时,我们不希望像正常情况那样交付静态javascript文件并点击api,而是希望在服务器端预计算所有内容,并交付DOM和js状态

我想知道是否有现有的工具或技术可以将这种状态的执行持久化到客户端


我知道我可以在phantom JS中执行脚本并输出DOM元素,但随后事件处理程序、控制器和JS内存状态将无法正确连接。我可以嗅探我们的用户代理,只将预计算的内容发送给机器人,但我担心谷歌会因此受到惩罚,而且我们也失去了一开始发送所有预计算内容的速度优势。

那么你想编译、服务器端并将请求特定URL资源的结果发送给客户端?你的后端是用什么写的

我们有一个在Java中的GAE上运行的API。我们的应用程序是一个单页应用程序,我们使用HTML5历史对象,因此我们必须在前端对实际URL做出真实响应

为了处理这个问题,我们使用JSP在页面中预缓存从服务器加载并发送到客户机的数据

在前端,我们使用主干网,因此我们修改了Backbone.sync以在页面上查找它在本地查找的数据的副本,如果它不在页面上,则仅作为AJAX调用从服务器请求它

所以,是的,这几乎是在您使用ajax之前每个站点所做的。诀窍是编写应用程序,以便数据可以在页面或本地存储中本地,甚至如果不只是请求数据。然后确保页面构建在服务器端,这样我们就可以在服务器端的HTML元素中填充数据,这样页面就不需要在客户端使用JS

如果您转到其他地方,数据是动态的,页面不会重新加载