1

使用 Ajax 发送请求到操作,结果类型为 json。使用 struts2 的 json 插件。结果是正确的,但需要很长时间。

下面是struts.xml的内容:

<package name="FoodCompositionSearchajax"  extends="json-default">
      <action name="addSearchCondition" class ="com.fmOnline.action.FmzxMenuCompositionSearchAction" enter code here
method="addSearchCondition"> 
          <result name="success" type="json">
           <param name="excludeProperties">
     showList\[\d+\]\.foodStr,showList\[\d+\]\.nourishStr, 
     showList\[\d+\]\.searchFunction,showList\[\d+\]\.num1, 
     showList\[\d+\]\.num2,showList\[\d+\]\.danwei, 
     showList\[\d+\]\.nourishname,showList\[\d+\]\.resultmap, 
     dataList, foodList, foodStr, map, nourishList, nourishStr, 
     num1, num2, paramList, searchDes, searchFun
   </param> 
          </result>
     </action>
 </package>

<param name="includeProperties">不起作用,因此请改用<param name="excludeProperties">

结果 json 包含一个列表(showList,包含 2 个 String 属性,元素数量从 1 到 6 不等)和一个 String。我已经从客户端页面中的 javascript 和<param name="excludeProperties">作品中提醒了结果内容。

json 结果为: {"msg":null, "showList":[{"id":1, "searchDes":"淀粉中的蛋白质含量>=11"}, {"id":2,"searchDes" :"豆类中的蛋白质含量>=11"}, {"id":3, "searchDes":"禽类中的蛋白质含量>=11"}]}

起初,我使用<result type="json"/>. 我虽然长时间的原因可能是一个太大的对象。然后我尝试@JSON(serialize=false) 对get方法进行反序列化,使这些方法在java到json的转换过程中不会执行。最后我使用了 excludeProperties。他们都成功地返回了较小的对象,但未能缩短时间。正常的jsp页面响应时间不错

问题:

  1. 在本地主机上运行项目时,响应时间短。

  2. 在远程服务器上运行时,客户端响应需要 10 秒以上。操作数据库确实很快,似乎需要很长时间才能将结果从服务器发送到浏览器。

  3. 当结果为空时,响应时间很短,即使来自远程服务器。

如何缩短响应时间?

4

2 回答 2

0

根据您提供的信息,我将首先查看 JSON 响应大小。您提到当响应为空时,响应时间很短。要么直接在浏览器中发出 AJAX 请求,要么使用诸如 Firebug(用于 Firefox)之类的调试工具来查看响应。响应可能非常大,并且减速在于将 Java 对象编组为 JSON 响应。

如果 JSON 响应非常大,并且您不需要返回所有信息,您可能会发现创建一个仅包含您需要的字段的对象然后对其进行编组会更容易。

更新

好的,我们可以排除响应太大。你有这么大的 excludeProperties 列表有什么原因吗?您可能想尝试对此发表评论,看看是否有帮助。否则,也许是您的服务器速度慢?

于 2010-12-18T22:52:32.130 回答
0

我用json-lib-2.3-jdk15.jar替换了jsonplugin,问题解决了。真的很感谢你的帮助~现在好开心O(∩_∩)O~

于 2010-12-20T15:14:31.087 回答