在 JSP 中加载图像需要很长时间

Posted

技术标签:

【中文标题】在 JSP 中加载图像需要很长时间【英文标题】:Images take a lot of time to load in JSP 【发布时间】:2014-12-03 12:09:39 【问题描述】:

我有一个场景,我通过循环从 Oracle 数据库中获取多个图像。但是获取图像并将其显示在浏览器上需要花费大量时间。 通过这段代码,我正在使用一些参数调用我的方法。

for(Object[] obj: memberDetails)

    System.out.println("String.valueOf(obj[0])"+String.valueOf(obj[0]));

    try
        memberImage=dtSrvc.getQueImageForQC(Id,String.valueOf(obj[0]));
    
    catch(Exception e)
    

    map.put("memImage"+count, memberImage);
    key.add("memImage"+count);
    hmap.put("memImage"+count, memberImage);
    count++;
  

这是我获取图像的查询

ps = conn.prepareStatement("select photo from member_photo where ID='"
                        + Id + "' and que_id=" + QueId);

请告诉我如何加快此过程。 如果网络很慢,我无法获取所有图像。我的应用程序目前被许多人使用。

【问题讨论】:

1) 我真的很怀疑这是您的瓶颈 2) 不要 在您的查询中使用任意字符串 - 改用参数 (where ID = ? and que_id = ? + ps.setString(1, id); ps.setString(2, queId); ) 这能解决我的问题吗? 不要使用javascript来显示你的图片,javascript很慢。 不,我没有使用 javascript。 为什么在查询中需要第二个参数? ID 不是主键吗? 【参考方案1】:

问题是您使用单独的查询从数据库中获取每个图像。它会产生网络开销。您可以尝试此处描述的许多解决方案来更改您的代码以执行一个查询而不是多个查询。看看如何Batching Select Statements in JDBC。

ps = conn.prepareStatement("select photo from member_photo where ID in (" + inClause.toString() + ')');

如果ID 是表中的主键,则不需要que_id

【讨论】:

【参考方案2】:

我的建议是先获取图像并将它们作为纯文件(temp)保存在应用程序的可访问和公共文件夹中,然后使用简单的图像资源使用img 标签简单地指出它们。 过程如下。1. 查询图像并将它们保存在/a_public_folder/images/... 下,每个图像将被命名为1.jpeg2.jpeg,其中 1 和 2 是 ids(唯一)。2. 使用简单的上下文(例如 list_id:List<Long>3.)保留从数据库中检索到的 id,您的最终 servlet 将如下所示

for(long idx:list_id)
  out.print("<img src=\"/a_public_folder/images/"+idx+".jpeg\"/>");

4.you 还可以为/a_public_folder/images/* 路径应用过滤器,以便仅允许有权查看内容/图像的用户5.拥有会话侦听器以删除关联(获取的)图像到特定的用户会话,或者有一个用于清理目录的守护线程(图像不再有链接)间隔。 但我建议将图像从数据库中提取到简单的纯文件中,并将图像路径保留到数据库中。

【讨论】:

以上是关于在 JSP 中加载图像需要很长时间的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 UITableView 中加载大量 JSON 数据需要很长时间

在 django 应用程序中加载的 Ajax 调用时间

火花需要很长时间才能在 HDFS 上读取压缩的 json

在 pyspark 中加载 SQL 查询?

如何在uitableview中加载数据而不每次都重新加载

Keras 需要很长时间才能在 model.load() 之后进行第一次预测