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

Java 缓存JSP页面结果的最佳实践?,java,caching,jakarta-ee,Java,Caching,Jakarta Ee,我的应用程序具有MVC结构 仅缓存传递给JSP视图的模型对象就足够了吗 或者缓存JSP视图呈现的结果也会显著提高性能 以下是我将使用的心智算法: 您是否遇到性能问题(换句话说:您的站点是否运行缓慢)? 如果“否”,请转至步骤6 分析代码以找到瓶颈(或者是一个真正的分析工具,或者只是添加 计时器,用于测量每个请求所需的时间等) 根据步骤2中收集的数据查找瓶颈 尝试找到一个算法解决方案,即,以不同的方式计算相同的结果,从而减少限制瓶颈的资源。如果你发现了这样一个算法,执行它并转到第6步 决定一个策略

我的应用程序具有MVC结构

仅缓存传递给JSP视图的模型对象就足够了吗


或者缓存JSP视图呈现的结果也会显著提高性能

以下是我将使用的心智算法:

  • 您是否遇到性能问题(换句话说:您的站点是否运行缓慢)? 如果“否”,请转至步骤6
  • 分析代码以找到瓶颈(或者是一个真正的分析工具,或者只是添加 计时器,用于测量每个请求所需的时间等)
  • 根据步骤2中收集的数据查找瓶颈
  • 尝试找到一个算法解决方案,即,以不同的方式计算相同的结果,从而减少限制瓶颈的资源。如果你发现了这样一个算法,执行它并转到第6步
  • 决定一个策略来缓解这个瓶颈。缓存是一种解决问题的方法。在web站点中,通常情况下,下载内容会导致速度减慢。在这种情况下,您可以使所有静态内容驻留在专用服务器(不同的域)中,并让网页指定静态站点的内容。浏览器将打开到静态站点的第二个连接,这将显著提高性能
  • 重构代码,使其可维护、结构良好、不易出错

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


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

    我使用
    会话
    范围进行每用户菜单缓存:

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

    这个问题有点模糊。显然,缓存的数据不需要重新计算,而无效(过时)的缓存数据浪费了空间——这是经典的空间/时间权衡。数据库查询是否比渲染更昂贵?可能,但只有测量才能确定。除了空间/时间权衡之外,通常很难确定缓存的数据是否仍然有效。+1,我有一个全局过滤器,可以查看视图的结果,因此我可以使用它缓存页面。我原本以为只缓存模型就足够了,但我记得在stackoverflow博客上读到,他们通过缓存部分视图看到了巨大的改进。但是他们使用ASP.NETMVC,在上面呈现视图可能比呈现JSP更昂贵?
    <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}