有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

json如何使输出大量数据的Javaservlet更高效?

我有一个Javaservlet,它从JSON对象中提取信息。JSON对象由索引数据的搜索结果组成(弹性搜索)。如果结果很少,这种方法效果很好,但当结果很多时,速度会明显减慢。如果结果数超过50000,有时会使浏览器崩溃。我可以做些什么来提高浏览大量结果的效率,从而避免浏览器崩溃

这是我的密码:

//Result Count
int i = 1;

for (SearchHit sh : response.getHits().hits()) {
    out.println("Result " + i + " <br>");

    out.println("&nbsp;&nbsp;&nbsp;&nbsp;" + sh.getSource().get("@message").toString() + " <br>");

    HashMap hm = (HashMap) sh.getSource().get("@fields");

    Iterator it = hm.entrySet().iterator();

    while (it.hasNext()) {

        Map.Entry pairs = (Map.Entry)it.next();
        out.println("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + pairs.getKey() + " = " + pairs.getValue().toString().replace("[", "").replace("]", "") + " <br>");
    }
    i++;
    out.println(" <br>");
}

共 (2) 个答案

  1. # 1 楼答案

    从您的问题中不清楚真正的瓶颈在哪里:

    • 它可能是JSP能够从JSON对象提取数据的速率

    • 它可以是JSP格式化数据和写入数据的速率

    • 它可能是网络传输速率

    • 它可能是浏览器能够读取和呈现响应的速率

    解决方案将取决于瓶颈实际所在的位置,因此您需要通过分析服务器端并监视浏览器中发生的情况来解决这一问题。解决方案可能涉及更改正在生成的HTML,使其更小或渲染更快,或者更改生成方式;e、 g.简化JSON。(在您的情况下,后者可能不是一个选项,因为您是从外部服务获取JSON的。)

    解决这个问题的另一种方法是重新构造UI,这样您就不会试图在一个页面中发送50000个结果。或者做一些服务器端的工作来减少/细化结果,使用某种结果集分页,或者在用户的浏览器中做一些聪明(高效)的工作来动态地显示结果。(最后一个选项涉及将结果作为JSON发送到浏览器,并且需要大量的浏览器端编码来呈现数据、浏览器独立性问题等等!)

    一个期望用户浏览包含50000个结果的页面的web UI(IMO)几乎是不可用的

  2. # 2 楼答案

    如果您通过HTTP watch或浏览器插件(如chrome)在浏览器上放置手表,您会注意到浏览器在处理数据时可能会被锁定在某些活动中

    例如,当使用HTML表格显示数据时,浏览器会等待呈现表格所需的整个数据组首先到达,然后再开始呈现整个表格。这是HTML表与HTML div的参数之一。因此,您可能需要查看是否已经使用表来呈现这些数据,并考虑切换到div.< /p>。

    Here是使用DIV渲染网格状结构的示例和指南

    可能还有其他因素。因此,请关注您的浏览器活动,看看瓶颈是什么