Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript缩小和HTML5清单_Javascript_Html_Minify_Offline Caching - Fatal编程技术网

Javascript缩小和HTML5清单

Javascript缩小和HTML5清单,javascript,html,minify,offline-caching,Javascript,Html,Minify,Offline Caching,我们已经创建了一个HTML5应用程序,它也可以在脱机模式下工作。HTML元素包含manifest属性,我们的manifest包含能够脱机使用应用程序的所有必要文件。我们正试图找到一种方法,以自动化的方式缩小我们的javascript文件,但也有一个工作清单文件(无需在缩小后手动编辑清单文件)。大多数情况下,在使用缩小的javascript文件时,最好在文件名中使用版本号或querystring变量,以确保加载缩小的javascript文件的新版本,但是,如果与不支持更改查询字符串变量或不同文件名

我们已经创建了一个HTML5应用程序,它也可以在脱机模式下工作。HTML元素包含manifest属性,我们的manifest包含能够脱机使用应用程序的所有必要文件。我们正试图找到一种方法,以自动化的方式缩小我们的javascript文件,但也有一个工作清单文件(无需在缩小后手动编辑清单文件)。大多数情况下,在使用缩小的javascript文件时,最好在文件名中使用版本号或querystring变量,以确保加载缩小的javascript文件的新版本,但是,如果与不支持更改查询字符串变量或不同文件名的清单文件结合使用,这将无法正常工作

我们试过AjaxMin和SquishIt,但没能成功。你们有什么想法或有效的解决方案来让这个组合起作用吗

我们的HTML:

<html manifest="app.manifest">

谢谢

如果要推送更新,只需将清单更改一个或多个字节即可。大多数人使用带有版本号的注释

#version 0.1
当浏览器显示缓存的页面时,它会在后台下载清单。如果更改,它将重新下载清单中的所有文件。还有你的新JS文件。这就是触发下载新文件所需的全部操作。 正确下载所有内容后,下次加载页面时将使用新文件

(*)重新下载时,浏览器将发送上次修改的和/或E-Tag头,以便服务器在文件未修改时返回304(以减少带宽使用)。另外,一些浏览器会尊重expires头,因此发送不会太远的expire头,甚至更好的是发送过去的expire头,因为在使用appCache时,基于expires头的缓存是无用的

另外请注意,如果未发送expires,firefox将根据上次修改的标题猜测expires值。如果文件有一段时间没有更改,并且您正在使用appcache,那么除了更改文件名之外,没有办法强制firefox重新下载该文件(在试图找出FX为什么不更新某些文件时,我几乎失去理智)


不确定缩小问题是什么。新的JS现在可以工作了吗,或者在浏览器无法使用新文件的地方?

您有一些构建过程或发布过程来缩小JavaScript,对吗?现在,您必须将重新生成较新版本的清单作为该过程的一部分。在您的构建工具(make、rake、ant或其他任何工具)重建新的精简JavaScript之后,它还需要生成一个指向新JavaScript文件的新清单文件。

我不确定我是否理解;为什么不在缓存清单中简单地列出
all.js
(或任何你想叫它的东西)?如果你更改清单,请确保文件的大小更改。这是因为当清单文件的大小与缓存的文件不同时,标准要求重新加载清单文件以及要缓存的所有项目。我认为没有检查修改时间或其他哈希值。这可能比看起来更困难,因为“版本1”和“版本2”等具有完全相同的字符数,因此更改版本号通常不起作用。我的技巧是添加一个“X”(或某些字符)的注释,并始终在任何新版本的末尾附加一个注释。为了刷新缓存项,您需要重新加载清单文件,如我在前面的注释中所述。否则,即使文件名相同,浏览器也不会加载新版本,而是会继续使用缓存的旧版本。
#version 0.1