【问题标题】:JSON serialization is very slow when compared to XML与 XML 相比,JSON 序列化非常慢
【发布时间】:2015-01-15 22:34:40
【问题描述】:

我有一个需要从网络应用程序访问的 webapi 服务

如果我直接调用 webapi url(例如 /api/scrccc/32),它会在不到 5 秒的时间内返回数​​据,但是从 jquery 调用时,需要超过 5 分钟(!!!)分钟

我的ajax调用是

j$.ajax({
   type: "GET",
   url: '/api/scrccc/' + id + '?dt=' + new Date().getTime(),
   error: function (jqXHR, status, error) {
       //....         
   },
   success: function (data, status, jqXHR) {
       //....
   }
});

在打开或关闭 javascript 控制台 (firebug) 以及在 Chrome 和 FF 中会发生这种情况

有人知道为什么会这样吗?

编辑:

以下是带有 Jquery 调用的 Chrome 中的时间安排:

以及直接访问地址栏中 url 的 Chrome 中的计时

...浏览器中的时间也带有时间戳

编辑 - 6 月 1 日

我意识到从 ajax 调用 webapi 和从浏览器的地址栏调用 webapi 是有区别的: - ajax 调用请求响应为 json - 浏览器请求响应为 XML

所以我在 Postman 中使用 json 和 xml 响应测试了这两个请求,结果让我感到困惑:带有 xml 响应的请求花费了 1261 毫秒,而 json 响应花费了 47000 毫秒(!!!)

(Chrome 控制台中显示的时间是本地 IIS Express,而 Postman 中显示的最新时间是 Internet 上真实 Web 服务器上的真实应用程序,这就是它们不同的原因,但规模仍然存在)

确实,正如一些人所建议的,问题出在服务器端,但不是在提供数据的实际应用程序代码中,而是在序列化点。

我的 Webapi 是 2.1(版本 5.1.2),Json.Net 版本是 6.0.3(都是最新版本) 我没有使用任何特定 json 序列化程序的特殊设置,因此,据我所知,WebApi 使用 Json.Net。

知道什么会导致序列化时间出现如此巨大的差异吗?

谢谢

【问题讨论】:

  • 我猜实际上需要 5 分钟才能得出结果的服务器端代码比 ajax 调用更有趣?
  • 查看 Chrome 调试器的网络选项卡,查看它提供的时间信息。可能会为您提供下一步的线索。
  • @adeneo,它不是服务器端代码 - 如果我直接在浏览器的地址栏中调用 webapi url 或使用休息客户端作为 Chrome 的邮递员,它会在 5 秒内返回 json 数据
  • 而且它也不是您发布的通用 ajax 功能,因为它已被数百万开发人员毫无问题地使用,所以正在发生其他事情,我们无法真正帮助您解决这个问题显而易见,jQuery 的 ajax 没有任何问题。
  • 当你直接在浏览器中测试时,你是否包含带有唯一时间戳的 dt={timestamp} 参数?

标签: asp.net-web-api


【解决方案1】:

首先,感谢所有花时间在此掠夺的人。 正如我在 @adreno 的评论中发布的那样,问题出在第一次访问时加载的昂贵计算属性。

该属性在BL中定义的一个类中,在很多地方都用到过,所以一开始我并没有想去查。

为什么 XML 序列化将该属性排除在序列化之外?我不知道,而且由于时间限制,我既没有时间也没有特别的兴趣进一步研究(因为它不是开放的 api,而且我们不需要 XML 输出)。

【讨论】:

  • 是的,因为我发现并解决了问题的根源——昂贵的房产
【解决方案2】:

您如何序列化 JSON?,您使用的是什么库,如果您使用的是 Jackson 或您的框架正在使用的其他库,我会先尝试 Gson。

就像我说的渲染一个字符串

String myjson = "";
Gson gson = new Gson();
myjson = gson.toJson(myuser);//myuser is my java object

return myjson

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    相关资源
    最近更新 更多