我正在开发一个需要开始缓存内容的应用程序,这让我开始思考......
- 在应用程序的某些部分,我通过抓取纯 JSON 并通过诸如 Mustache、jquery.tmpl 等运行它来呈现表行(jqGrid、slickgrid 等)或花哨的 div 行(如在 New Twitter 中)。
- 在应用程序的其他部分,我只是在纯 HTML(服务器端 HAML 模板)中呈现信息,如果有搜索/分页,我只需转到一个新 URL 并加载一个新 HTML 页面。
现在问题在于缓存和可维护性。
一方面我在想,如果一切都是使用 Javascript HTML 模板构建的,那么我的应用程序将只提供一个 HTML 布局/shell 和一堆 JSON。如果您查看 Facebook 和 Twitter HTML 源代码,那基本上就是他们正在做的事情(95% json/javascript,5% html)。这将使我的应用程序只需要缓存 JSON(页面、操作和/或记录)。这意味着无论您是访问 JSON api 的远程 api 开发人员还是海峡网络应用程序,您都会访问缓存。也就是说,我不需要 2 个缓存,一个用于 JSON,一个用于 HTML。这似乎将我的缓存存储减少了一半,并简化了一些事情。
另一方面,我认为,从我所见/经历的情况来看,生成静态 HTML 服务器端并对其进行缓存似乎是跨浏览器性能更好的;您可以立即获得图形,而不必等待 JavaScript 渲染它的那一瞬间。StackOverflow 似乎用纯 HTML 做所有事情,谷歌也是如此,你可以说......一切都立即出现。请注意,尽管在twitter.com上,页面是空白的 0.5-1 秒,并且页面块在:javascript 必须呈现 json。这样做的缺点是,对于任何动态的东西(比如无限滚动或网格),无论如何我都必须创建 javascript 模板......所以现在我有服务器端 HAML 模板、客户端 javascript 模板等等更多缓存。
我的问题是,对于如何处理这个问题是否有任何共识?从您将两者混合而不是 100% 与另一种混合的经验中,有哪些优点和缺点?
更新:
我还没有决定使用 100% javascript 模板的一些原因是:
- 性能。尚未正式测试,但据我所见,原始 html 比 javascript 生成的 html 跨浏览器呈现更快、更流畅。另外,我不确定移动设备如何处理动态 html 性能。
- 测试。我有很多与静态 HTML 配合良好的集成测试,因此切换到仅 javascript 需要 1) 更专注的纯 javascript 测试 ( jasmine ),以及 2) 将 javascript 集成到 capybara 集成测试中。这只是时间和工作的问题,但它可能很重要。
- 维护。摆脱 HAML。我喜欢 HAML,它很容易编写,它打印出漂亮的 HTML……它使代码干净,它使维护变得容易。使用 javascript,没有什么比这更简洁了。
- 搜索引擎优化。我知道 google 处理 ajax
/#!/path
,但还没有掌握这将如何影响其他搜索引擎以及旧版浏览器如何处理它。似乎需要进行大量设置。