我正在开发一个应用程序,在其中需要开始缓存一些东西,这让我深思...
- 在应用程序的某些部分中,我通过获取纯JSON并运行Mustache、jquery.tmpl等组件来生成表格行(jqGrid、slickgrid等)或新Twitter中的漂亮div行。
- 在应用程序的其他部分中,我只是以纯HTML方式呈现信息(服务器端HAML模板),如果有搜索/分页,我只需转到新的URL并加载新的HTML页面。
现在问题出现在缓存和可维护性上。
一方面,我认为,如果使用JavaScript HTML模板构建所有内容,那么我的应用程序将仅提供HTML布局/外壳和一堆JSON。如果查看Facebook和Twitter的HTML源代码,基本上就是他们做的事情(95% json/javascript,5% html)。这将使得我的应用程序只需要缓存JSON(页面、操作和/或记录)。这意味着无论你是远程API开发人员访问JSON API还是直接在Web应用程序中,你都会命中缓存。也就是说,我不需要两个缓存,一个用于JSON,另一个用于HTML。这似乎可以将我的缓存存储减少一半,并稍微简化一下事情。
另一方面,我认为,就跨浏览器性能而言,生成静态HTML服务器端并对其进行缓存似乎要好得多;你可以立即获得图形,无需等待JavaScript渲染它。StackOverflow似乎在纯HTML中执行所有操作,Google也是如此,您可以看到...所有内容都会一次性出现。请注意,在twitter.com上,页面空白了0.5-1秒钟,然后页面变成块状: JavaScript必须渲染JSON。这样做的缺点是,对于任何动态内容(如无限滚动或网格),我仍然需要创建JavaScript模板...因此现在我有服务器端HAML模板、客户端JavaScript模板和更多要缓存的内容。
我的问题是,是否有关于如何处理这个问题的共识?根据你的经验,混合使用两种方法与完全只使用其中一种方法相比,有哪些利弊?
更新:
以下是我还没有决定完全采用JavaScript模板化的原因:
- 性能。尽管我没有进行正式测试,但从我所见,原始HTML在跨浏览器上呈现速度更快、更流畅,而使用JavaScript生成的HTML则不确定移动设备在性能方面如何处理。
- 测试。我有很多集成测试可以很好地与静态HTML配合使用,因此仅使用JavaScript需要1)更加专注的纯JavaScript测试(jasmine),以及2)将JavaScript集成到capybara集成测试中。虽然这只是时间和工作量的问题,但它可能是显著的。
- 维护。摆脱HAML。我喜欢HAML,它很容易编写,打印出漂亮的HTML...它使代码变得干净,维护也很容易。使用JavaScript,没有任何一种方法能够如此精简。
- SEO。我知道Google处理ajax
/#!/path
,但还没有掌握其他搜索引擎如何处理它以及旧版浏览器如何处理它的问题。似乎需要进行重要的设置。