我知道这个问题的标题可能有点误导; 我意识到JSON是一种格式化数据的方式,而AJAX是一种在没有刷新的情况下从/向服务器提取/推送更新的方法.我问,因为我合法地在这方面没有太多的经验.
鉴于我有一个CakePHP Web应用程序:如果我选择,它只是一个偏好的问题
我在两者之间看到的唯一区别是,JSON意味着服务器上的负载和带宽的使用量减少了,也许开发人员使用哪种语言更合适(JSON可能意味着更多的客户端脚本?).
有人可以为我解释这件事吗?
好问题。尤其是在像 Backbone.js 这样的东西变得越来越流行的时代。
让我们一步步来看。
首先,服务器上生成 JSON 的负载与生成 HTML 的负载可能大致相同。大多数资源不会将数据对象转换为 HTML 或 JSON,但它们会接受客户端请求、加载框架(在您的情况下为 CakePHP)、路由请求、加载更多组件、设置数据库连接,向它抛出查询,接受结果,将它们转换为数组/对象,然后您才会开始将该数据输出到视图的字符串(JSON 或 HTML)。问题是,虽然像 PHP 这样的服务器端语言对循环事物并将值输出到字符串中并没有真正印象深刻,但它们可以毫无困难地做到这一点。
实际上,当您开始输出 JSON 时,性能差异不会那么大。至少对于大多数事情来说还不够好。
当您想要使用 JSON 时,您需要拥有复杂的功能。例如,像 tweetdeck 的提要一样,其中有许多小组件和数据需要更新;单个推文、推文列表、关注者计数等。加载这些小信息比每次重新下载完整的 HTML 集更有意义。您可以使用 JSON 和客户端模板,因为有很多事情可能会发生变化。
然而,在更“正常”的应用程序中,例如博客、电子商务网站、维基百科等,您实际上并不需要像这样的细粒度的东西。在这种情况下,您将使用 AJAX(使用您的定义)。
有些人的原因是,构建 HTML 视图比首先构建返回 JSON 的视图,然后构建客户端模板来呈现这些视图更容易且对开发人员更友好。在服务器端模板中更容易检查某些条件、创建循环、在需要时获取额外数据等。无论如何,它不会对你的表现造成太大影响。
另一个原因是您也可以使用服务器端的静态 HTML 来呈现非 AJAX 页面,作为后备。因此,当客户端可以使用 AJAX 时,您可以通过 AJAX 加载内容,并将 '' 的内容替换为您获得的 HTML 中的 '' ,但是当没有任何 AJAX 可用时,您只需重定向到那个页面。现在您已经支持 javascript 和非 javascript 客户端。您也可以通过服务器端和客户端模板来实现此目的,但这需要双重工作或使用 Mustache 之类的东西。
除此之外,使用 JSON 在客户端中进行所有渲染的一个缺点是,渲染页面需要一些信息,但这些信息不应掌握在用户手中。我可以想象信用卡数据、社会安全号码、真实姓名等信息,在服务器端渲染之前,您需要在代码中运行某种检查。为了在客户端进行相同的检查,您必须将其全部发送给客户端,因此将其交给用户。当然,您无法执行此操作并首先在服务器端处理所有数据,然后再将其发送到客户端,但这意味着您已经在 HTML 模板中执行越来越多的操作。
总结:
对我来说,服务器端或客户端 html 渲染之间的性能在现实生活中并不那么明显。我使用了大量 JSON,但通常用于与视图无关的事物。就像通过 AJAX 调用保存某些内容,然后以 JSON 格式返回状态报告一样。所以我可以做类似的事情if data.status == 'awesome',等等。但是,如果我完全 AJAX 一个正常的网站,我会使用 pjax(如下)之类的东西从服务器加载 HTML 片段。在我看来,javascript 应该与现有的 HTML 一起做事,而不应该与它结合太多。在构建真正复杂的实时应用程序时,需要同时跟踪大量较小的数据,也有例外,因此客户端模板有其一席之地,但并非无处不在。
看看 pjax,它是一个 javascript 库,用于将 html 片段从服务器端动态加载到页面上的元素中。 http://pjax.heroku.com/
DHH 回复了 Hacker News 上关于他们与 Basecamp 的设置方式和内容的帖子;主要是服务器端脚本,很少有客户端 MVC。
https://news.ycombinator.com/item?id=3603898
另一个有趣的链接。LinkedIn 描述了他们如何出于性能原因使用客户端模板。 http://engineering.linkedin.com/frontend/leaving-jsps-dust-moving-linkedin-dustjs-client-side-templates
| 归档时间: |
|
| 查看次数: |
883 次 |
| 最近记录: |