为什么我不直接用Javascript和Javascript HTML模板构建整个Web应用程序呢?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (133)

在一个需要开始缓存事物的应用程序上开始工作,这让我想到了......

  1. 在应用程序的某些部分,通过抓取纯JSON并通过类似Mustache,jquery.tmpl等来渲染表格行(jqGrid,slickgrid等)或花哨的div行(如在New Twitter中)。
  2. 在应用程序的其他部分,我只是在纯HTML(服务器端HAML模板)中呈现信息,如果搜索/分页,我只是去一个新的URL并加载一个新的HTML页面。

现在问题在于缓存和可维护性。

一方面,我想,如果所有东西都是使用Javascript HTML模板构建的,那么我的应用程序只能提供HTML布局/外壳和一堆JSON。如果你看Facebook和Twitter的HTML源代码,那基本上就是他们在做什么(95%json / javascript,5%html)。这将使得我的应用程序只需要缓存JSON(页面,操作和/或记录)。这意味着无论你是一些远程api开发者访问JSON api还是海峡网络应用程序,都会触发缓存。也就是说,我不需要2个缓存,一个用于JSON,一个用于HTML。这似乎将我的缓存存储减少了一半,简化了一些事情。

另一方面,我从我所见过/经历过的,生成静态HTML服务器端和缓存的角度思考,似乎是跨浏览器更好的性能明智的; 您可以即时获取图形,而无需等待JavaScript的时间以呈现它。StackOverflow似乎在纯HTML中做了所有事情,Google也是如此,你可以告诉......一切都立即出现。请注意,虽然在twitter.com上,页面在.5-1秒内是空白的,并且页面块在:javascript必须呈现json。这样做的缺点是,对于任何动态(如无尽的滚动,或网格),我必须创建JavaScript模板......所以现在我有服务器端HAML模板,客户端JavaScript模板和很多更多缓存。

我的问题是,关于如何解决这个问题,是否有共识?你们将两者混合的经历与去年的100%相比有什么好处和缺点?

造成我为什么还没有决定采用100%javascript模板的原因有以下几个原因:

  • 性能。没有经过正式测试,但从我看到的,原始html呈现得比JavaScript生成的html跨浏览器更快更流畅。另外,我不确定移动设备如何处理动态html性能。
  • 测试。我有很多集成测试可以很好地适用于静态HTML,所以切换到仅支持javascript的测试需要1)更加专注的纯JavaScript测试(茉莉花),以及2)将javascript集成到水豚集成测试中。这只是时间和工作的问题,但可能很重要。
  • 维护。摆脱HAML。我喜欢HAML,它很容易编写,它打印漂亮的HTML ...它使代码变得简洁,使维护变得简单。使用JavaScript,没有什么简洁。
  • SEO。我知道谷歌处理ajax /#!/path,但没有掌握这将如何影响其他搜索引擎以及旧版浏览器如何处理它。似乎它需要一个重要的设置。
提问于
用户回答回答于

持久的私人数据存储。

您需要一台服务器来存储各种级别的公共/私人访问数据。您还需要安全的封闭源信息的服务器。您需要一台服务器来完成您不想在客户端执行的繁重工作。复杂的数据查询最好留给您的数据库引擎。索引和搜索尚未针对JavaScript进行优化。

此外,您还有旧版浏览器的问题要慢得多。如果你没有运行FF4 / Chrome或IE9,那么在客户端和服务器上的数据操作和页面构建之间有很大的区别。

我自己将尝试构建完全使用MVC框架和模板制作的Web应用程序,但仍然使用服务器连接到安全和优化的数据库。

但一般来说,应用程序确实可以完全使用JavaScript和使用模板构建。各种结构和JavaScript引擎已经足够先进的做到这一点。有足够的流行框架来做到这一点。纯JavaScript Web应用程序不再是实验和原型。

如果是为此推荐框架,那么请看一下backbone.js

用户回答回答于

我曾经混合使用这两种方法,但之后完全切换到客户端渲染,因为在其他情况下很难正确处理繁重的JavaScript。作为一个完整的解决方案可以推荐JavaScriptMVC框架的方法。

它有一个称为EJS的视图渲染引擎,它可以将您的视图压缩为普通的JavaScript,以用于应用程序的生产版本。这使得它非常快速(所有的HTML都预先加载了单个压缩的JavaScript文件,因此只要收到模型JSON数据就会呈现该文件)。我个人无法注意到EJS渲染和传输纯HTML之间的性能差异。

然后,对于您的API,遵循REST原则,缓存是关键约束之一。因此,如果您的应用程序正确支持JSON数据的HTTP缓存并使用压缩的客户端模板,那么您甚至可能会看到性能改进。

扫码关注云+社区

领取腾讯云代金券