我們注意到,在JSP中未聲明的變量可能會導致非常糟糕的表現。你可以讓JSP在未聲明的變量上崩潰嗎?
請看下面的示例代碼:
<c:if test="...">
<c:set var="isSaleCategory" value="true"/>
</c:if>
<c:forEach items="${ARTICLES}" var="article" varStatus="status">
<c:if test="${not empty articlePrice && (!isSaleCategory)}">
的代碼了5-6秒來處理並返回結果。
如果我們首先初始化變量,執行時間降低到幾毫秒:
<c:set var="isSaleCategory" value="false"/>
<c:if test="...">
<c:set var="isSaleCategory" value="true"/>
</c:if>
<c:forEach items="${ARTICLES}" var="article" varStatus="status">
<c:if test="${not empty articlePrice && (!isSaleCategory)}">
現在,我們不介意這麼多將此代碼添加到初始化變量,但棘手的部分是找到他們。 ..在沒有循環的頁面上我們不會看到第二個+響應時間,但是在重負載下,當然這會增加不必要的負載。
有沒有一種方法,使當它蹣跚而行未初始化的變量類似上面JSP處理失敗?
在那裏沒有NPE的?看起來更像是第二次測試中的一些錯誤處理,其中由於第一次測試失敗而無法設置「isSaleCategory」。如果你想補充空指針檢查作爲第二個測試A或條件?'(isSaleCategory爲null ||!isSaleCategory)' – Antoniossss
有多大你的文章收藏?似乎很奇怪變量強制應該是那麼昂貴。 –
@Antoniossss JSP相當寬容(這是本例中的核心問題),並且不要爲這些場景拋出任何異常。 – Marcus