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