【问题标题】:Getting Big json data result asp.net mvc获取大 json 数据结果 asp.net mvc
【发布时间】:2013-12-23 11:32:18
【问题描述】:

我正在使用 asp.net mvc。这个项目是一个基于地图的项目。我有一个返回大 json 数据的操作方法。

    public JsonResult MemberLocations()
    {
        var members = memberRepository.GetAll();

        var result = new { members };

        var jsonresult = Json(result, JsonRequestBehavior.AllowGet);
        jsonresult.MaxJsonLength = 500000000;

        return jsonresult;
    }

此方法返回成员位置。

[{memberX:"132.45", memberY:"212.21"}, {memberX:"112.45", memberY:"113.11"},........]

json 数据有 45.000 个点 (x,y) 对。我在地图上得到了这个点一个添加图钉。查询结果来得很晚。 (我正在使用 javascript ajax 请求。)

如何解决数据获取机制。你解决过这样的问题吗?

【问题讨论】:

  • 如果您将 memberXmemberY 重命名为 xy,您可以节省 12 个字符乘以 45.000 = 540.000。如果 1 个字符是 1 个字节,则最多可节省 0,5Mb :)

标签: c# javascript asp.net asp.net-mvc json


【解决方案1】:

您需要分析此函数的性能,这部分需要更多时间。发送大小为 45 的 JSON 对象数组不会花费更多时间。获取数据“memberRepository.GetAll()”似乎需要更多时间。

【讨论】:

    【解决方案2】:

    首先,您应该检查是否真的是 45k 点的传输减慢了应用程序的速度,或者是您的数据检索。只需在调用 memberRepository.GetAll(); 时使用秒表并测量 fiddler 中的响应时间,以评估检索数据所需的时间百分比...

    通常你真的不应该向客户端发送这么多数据。它通常会导致糟糕的用户体验,尤其是在速度较慢的设备(移动设备...)上。

    也许您必须问自己为什么必须向客户端发送 45k 坐标?

    您是否一次显示地图上的所有图钉?真的吗? 如果没有,请仅发送应为缩放级别/视口显示的那些...

    如果您仍然需要渲染这么多数据,请使用其他技术来渲染它,例如在服务器上渲染图块。

    大量 LatLong 坐标的另一个选择是对数据进行编码,这将减小大小。这可以通过 this google algorithm 来实现,例如

    【讨论】:

      猜你喜欢
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多