如果您登录Facebook,Twitter或Gmail并查看来源,您会发现一些非常特殊的内容。您的所有推文和邮件都呈现为JSON。没有尖括号。我的猜测是,这些数据都是动态呈现给DOM的。如果检查页面上的任何元素,您将看到大量的div和其他HTML元素。其中没有一个在原始标记中提供。问题是:
答案 0 :(得分:13)
他们的设计有几个常见原因:
上面第2点中提到的API驱动架构和分离允许公司提供多个渠道交付而无需太多返工。考虑我们是否要构建适用于Android的Twitter应用程序:
正如您所看到的,此模型为Google / Twitter提供了一种在不必重写逻辑的情况下传递到多个频道的方法。这同样适用于Mobile WebView与普通Desktop WebView。我们需要更改的是UI层,而不是数据或控制器层。
这就是他们花时间考虑设计和架构的原因。数据和表示之间的紧密耦合将要求他们重新编写大量代码,以便在多个渠道中交付。它不是关于JSON与HTML或仅仅是网络,而是更多的架构决策,允许他们将内容传递到多渠道(iOS,Android,第三方应用程序,移动WebView,桌面视图,桌面应用程序等)。您在HTML源代码中看到的是他们在WebView频道中的策略的表现。
答案 1 :(得分:3)
此技术允许浏览器缓存HTML(和静态javascripts)并仅获取json字符串。它确实非常快,并且带宽友好。
答案 2 :(得分:2)
不,它不会更快。在服务器端生成JSON要比HTML更容易。据我所知,Twitter也使用Mustache在客户端上呈现这些数据。
因此,您只需提供静态模板(如果正确缓存,只需要加载一次)和您的JSON数据,然后让客户端完成所有渲染工作。一个优点是,客户端可以选择他们想要呈现数据的内容和方式,另一个优点是它可以从服务器中获取所有繁重的HTML生成开销。
答案 3 :(得分:0)
我的猜测:避免重复与UI相关的代码。
我刚刚看了一下Twitter的源代码,看起来他们想要将所有UI逻辑保留在JavaScript中。这是合理的,因为Twitter页面将继续获取新的推文,所以他们不得不用JavaScript编写UI相关的代码。因此,不是在后端重复相同的代码,而只是播放初始数据,以便在使用JavaScript加载页面时呈现推文。
缓存参数对我没有意义,因为它在任一种方法中都会以相同的方式工作,因为初始页面请求不可缓存。
答案 4 :(得分:0)
基本上,这是将演示文稿和数据分离到另一个级别。服务器端有一层只提供数据。通常,JSON是提供该数据的好方法。现在你如何呈现它可以单独处理。
此JSON可以通过Web服务提供给任何感兴趣的客户端(Web /桌面/移动/其他API)。然后客户端可以决定如何呈现它。在Web上,我们使用大量的javascripts来读取和解析这个JSON并操纵屏幕/ DOM。