java - Java应用服务器利用304 HTTP响应将数据缓存到JavaScript中是否正常

标签 java javascript oracle http caching

我的应用程序广泛使用分层数据选择(分类法选择),例如(但不完全是):

Country
  => State
    => City
      => Street

因此用户选择第一级选项,JS AJAX 加载第二级,用户选择 AJAX 加载第三级后,依此类推...

我认为加速应用程序的一种方法是将整个层次结构加载为 JS 文件并直接使用来自 JavaScript 的数据利用 If-Modified-Since/*Last-Modified* 和 304 响应代码缓存如此大(50 KiB,gzip 之后 12)和耗时(从 DB 获取 300 毫秒)数据。

我不执行害怕发明轮子这样的技术。如果我尝试实现,我会使用以下技术...

现在支持Spring Last-Modified HTTP 1.1 header :

@RequestMapping
public String myHandleMethod(WebRequest webRequest, Model model) {
    long lastModified = // 1. application-specific calculation
    if (request.checkNotModified(lastModified)) {
        // 2. shortcut exit - no further processing necessary
        return null;
     }
    // 3. or otherwise further request processing, actually preparing content
    model.addAttribute(...);
    return "myViewName";
}

Oracle 允许通过 ALL_TAB_MODIFICATIONS/USER_TAB_MODIFICATIONS 快速检查表更改:

select timestamps from all_tab_modifications where table_name = 'COUNTRY';
select timestamps from all_tab_modifications where table_name = 'STATE';
...

在使用分层数据的 JSP 页面上,我包含 js 文件:

 <script src="<c:url value='js/db/units.js'/>"></script>

具有完整层次结构数据的形式(像这样 Java DWR ):

uniqPrefix.units = {
  "USA": {
      "Alabama": { 
          "Montgomery": ["Street 1", "Street 2"],
          "Birmingham": ["Street 3", "Street 4"],
      }, ...
   "UK": { ... }
}

所以 HTML <select>js/db/units.js 中的 JavaScript 代码填充的标签没有任何 Ajax 查询...

并且在服务器端我们不重新生成js/db/units.js如果Country , State , City , Street表格未从用户上次访问我们的网站时修改...

通过利用浏览器 If-Modified-Since 请求参数和 304 HTTP 服务器响应从应用程序服务器缓存数据在 JavaScript 中是否正常,或者这根本就是错误的方法?

最佳答案

与任何其他 HTTP 客户端相比,Javascript 驱动的 HTTP 客户端没有什么特别之处,您所描述的正是 304 响应的设计目的。如果数据未更改,您的应用程序应该避免重新加载数据。

关于java - Java应用服务器利用304 HTTP响应将数据缓存到JavaScript中是否正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15784822/

相关文章:

java - jackson 在 momentJS 中使用的奇怪时间戳值给出了错误的年份

javascript - 嵌入式 PDF 在 IE 中只显示一个文件名,在 chrome 中可以正常工作

javascript - 从后端将信息发送到谷歌标签管理器

java - 使用 LDT 时出现子记录错误

java - 即使未指定 @Load,Objectify 也会在 Ref<?> 后面加载对象

javascript - 如何修改此代码以使 div 的最小高度为 660px?

database - 如何使用 PL/SQL Developer 连接到远程 Oracle DB?

oracle - 如何修剪所有字符串类型表中所有行中的所有列?

java - 如何 "save"我的程序?

java - java slick 表达式的非法开始