缓存JSP页面结果的最佳实践?

时间:2010-03-23 04:44:36

标签: java caching java-ee

我的应用程序有一个MVC结构。

仅缓存传递给JSP视图的模型对象是否足够?

或者通过缓存JSP视图的渲染结果是否会显着提升性能?

3 个答案:

答案 0 :(得分:1)

我不会详细说明。假设你知道自己在做什么。

现在简单回答你的问题。我们不缓存JSP视图。作为一种常规做法,我们会缓存将广泛使用的查询的数据库结果。顺便说一下,您打算如何缓存JSP视图?

答案 1 :(得分:0)

这是我将使用的心理算法:

  1. 您是否遇到性能问题(换句话说:您的网站是否很慢)? 如果“否”转到第6步。
  2. 查找代码以查找瓶颈(无论是真正的分析工具还是仅添加 定时器将测量每个请求所需的时间等。)
  3. 根据步骤2中收集的数据找出瓶颈。
  4. 尝试找到算法解决方案,即以不同的方式计算相同的结果,这需要较少的资源来限制您的瓶颈。如果您发现这样的算法实现它并转到步骤6。
  5. 决定缓解此瓶颈的策略。缓存是解决一类问题的方法。在网站中,通常情况是减速是由于下载的东西。在这种情况下,您可以将所有静态内容驻留在专用服务器(不同的域)中,并让网页指定静态站点中的内容。浏览器将打开与静态站点的第二个连接,这将显着提高性能。
  6. 重构代码,使其易于维护,结构良好,不易出错。

答案 2 :(得分:0)

我为每个用户菜单缓存使用session范围:

<c:if test="${empty JSPCACHE_menu}">
  <c:set var="JSPCACHE_menu" scope="session">
    <ul id="user-menu">...</ul>
  </c:set>
</c:if>
${JSPCACHE_menu}

使用application范围和c:if检查,您可以在所有用户中缓存值(例如货币汇率):

<c:set var="newCurrencyTS" value="currencyService.newCurrencyTS()"/>
<c:if test="${JSPCACHE_currencyTS.time < newCurrencyTS.time}">
  <c:set var="JSPCACHE_currencyWidget" scope="application">
    <ul>
      <c:for var="i" items="${currencyService.getActualRates()}">
        <li>...<li>
      </c:for>
    </ul>
  </c:set>
  <c:set var="JSPCACHE_currencyTS" value="${newCurrencyTS}" scope="application"/>
</c:if>
${JSPCACHE_currencyWidget}