【问题标题】:General question about javascript (REST vs. SOAP)关于 javascript(REST 与 SOAP)的一般问题
【发布时间】:2011-06-28 21:14:45
【问题描述】:

我目前正在从后端调用网络服务。但是,页面需要一段时间才能加载,我开始怀疑,如果我使用 javascript 而不是后端加载数据,页面加载速度会更快(以感知方式)吗?

基本上使用 REST 服务在客户端加载数据会使页面加载看起来比使用 SOAP 调用在后端加载数据更快? page_load 是先触发还是 javascript 调用?

【问题讨论】:

  • 我建议您更改这一行:“基本上 REST 似乎会使页面加载速度比 SOAP 更快?” to:“基本上,使用 REST 服务在客户端加载数据会使页面加载看起来比使用 SOAP 调用在后端加载数据更快吗?”如果这就是你想要问的。
  • @Steve 是的,你摇滚。听起来合乎逻辑
  • @streetparade,哎呀...谢谢! :) 这让我很开心。

标签: javascript asp.net rest soap


【解决方案1】:

就在后端调用 SOAP 服务与在前端调用 REST/JSON 服务之间的区别而言 - 如果您让框架感知,您的页面加载时间可能会更快页面加载,并在您从 REST 服务加载数据时显示“微调器”。

您的问题有点模棱两可,因为不清楚您要问的是什么。


嗯,REST 与 SOAP 并不是任何人都可以在网站上的速度/性能方面进行的真正比较。 REST 指的是如何调用服务的概念语义模型。另一方面,SOAP 既指调用的语义,也指数据格式。相比之下,REST 对数据格式只字未提(尽管通常假设为 JSON ——但关于 REST 并没有排除 XML 或任何其他数据格式)。

然而,JSON 与 SOAP 是另一回事。

在客户端解析 JSON 响应将比 SOAP 消息更容易/更快(假设您使用的是跨平台工作的标准 javascript 东西,并且没有花哨的插件)。

加载时间? SOAP 比 JSON 更冗长,并且需要额外的字符来传输相同的值……因此,由于所发送消息的相对大小,可能会有一点延迟。

客户端的处理时间? JSON 绝对有优势。

在客户端易于使用? JSON - 放下手。

【讨论】:

  • 谢谢。这是一个有用的答案。不过,我确实对此有一个后续问题。如果我要从客户端调用 Web 服务,这会暴露我的 API 密钥和凭据吗?
  • 如果您有“秘密 API 密钥和凭据”,您需要在您的站点上构建一个小型服务,该服务将使用您的密钥将请求代理给您的供应商(从而对您的密钥保密用户)。
  • 如果您使用的是 ASP.NET,我建议您查看 WCF。 .NET 的 REST Starter Kit 是一个好的开始:google.com/… 和 RESTful .NET 是一本不错的书,可在亚马逊上找到:amazon.com/RESTful-NET-Build-Consume-Services/dp/0596519206
  • 好的。我会看看它们,但与此同时,“将请求代理给您的供应商”是什么意思?
  • 网站--(您的身份验证)--> 您的服务--(密钥)--> 供应商。
【解决方案2】:

我认为这个问题与其说是 REST 和 SOAP 之间的比较,不如说是一个关于应该在哪里调用服务的问题——后端还是前端。根据定义,后端代码总是在任何前端代码之前首先执行 - 它只是位于服务器上,并在返回响应之前运行。 javascript 返回响应并加载页面后运行。

Steve 给出了一个很好的概述,但它根本没有讨论后端与前端的关系。一般来说,性能上不会有差异,或者至少没有可以预测的差异。这完全取决于服务器配置和客户端计算机(Javascript 执行的地方)。

差异(正如史蒂夫也提到的)在于感知性能。在这里,我总是建议您从前端调用服务。有几个原因:

  1. 您可以在调用该服务之前显示一个视觉指示器,以通知用户冗长的操作
  2. 您可以在每次下次调用服务时对 UI 进行部分更新。如果您在后端调用该服务,则基本上必须执行回发(遍历 ASP.NET 页面的整个生命周期)。这很慢,而且视觉上不吸引人。

实际上,如果您从后端调用服务,我认为拥有服务毫无意义(假设它只返回数据以绑定到 UI)。您可以只使用旧的 Webforms 方式来构建 UI 并直接在 ASP.NET 页面中返回响应。

作为结论 - 从客户端脚本调用 Web 服务的许多好处。

【讨论】:

  • +1 ... 同意。在我完全理解这个问题之前,我已经回答了。对于所提出的实际问题,这是一个更好的答案。
  • 谢谢。这是一个有用的答案。不过,我确实对此有一个后续问题。如果我要从客户端调用 Web 服务,这会暴露我的 API 密钥和凭据吗?
  • 不,如果你实施得当,它不会暴露任何秘密。通常 REST API 使用 OAuth 协议进行身份验证 - 它不传递任何密码或密钥,而是使用 API 颁发的令牌进行身份验证。你可以谷歌它并找到以大多数语言实现该协议的库。
【解决方案3】:

如果不查看您的代码,我真的无法说出问题所在/为什么网站加载速度不够快。 REST 和 SOAP 是客户端和服务器之间通信的定义标准。 我更喜欢 REST 而不是 SOAP。

【讨论】:

    【解决方案4】:

    您的问题的直接答案是:Page_Load 事件将在您的 Javascript 后台调用之前加载。当您的页面有多个 Web 控件加载过多数据、绘制元素或进行大量计算需要大量时间并影响用户体验和应用程序性能时,我建议使用带有后台加载的 javascript。您需要让用户能够加载页面并查看每个元素的加载进度(这样他在浏览时不会感到无聊)。对于这种情况,建议使用 JSON 进行 REST 调用。

    【讨论】:

      猜你喜欢
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多