我可以从HTML5应用缓存加载网络资源吗?

时间:2015-11-24 21:34:23

标签: html5 html5-appcache

我能够很好地缓存本地文件(图像,js等)。

理想情况下,我希望能够指向远程资源,例如存储在Azure上的blob存储中的.mp4,并缓存该资源。那可能吗?

我的日志中没有发现任何错误,但我也没有看到它被下载,因为它在Chrome浏览器下的应用缓存中不可用 - >资源小组。

我的清单:

CACHE MANIFEST
# Init 11-24-15
index.html

### Images
img/Night-Trap-32x-Front.jpg
/img/icons/Bathroom.jpg
/img/icons/Bedroom.jpg
/img/icons/Driveway.jpg
/img/icons/Entry-Way.jpg
/img/icons/Hall-1.jpg
/img/icons/Hall-2.jpg
/img/icons/Kitchen.jpg
/img/icons/Living-Room.jpg
/img/icons/trap-icon.gif

img//stills/BATHROOM_1.jpg
img//stills/BEDROOM_1.jpg
img/stills/DRIVEWAY_1.jpg
img/stills/ENTRY-WAY_1.jpg
img/stills/HALL-ONE_1.jpg
img/stills/HALL-TWO_1.jpg
img/stills/KITCHEN_1.jpg
img/stills/LIVING-ROOM_1.jpg

### JS
js/vendor/bootstrap.min.js
bower_components/video.js/dist/video.js
js/vendor/mainloop/mainloop.js
bower_components/object.observe/dist/object-observe-lite.min.js
js/appCacheValidation.js


 # THESE DO NOT SEEM TO BE CACHED
 https://nighttrapblob.blob.core.windows.net/ntvids/hallOne/00000021.mp4
 https://nighttrapblob.blob.core.windows.net/ntvids/hallOne/00130422.mp4
 https://nighttrapblob.blob.core.windows.net/ntvids/hallOne/01152221.mp4
 https://nighttrapblob.blob.core.windows.net/ntvids/hallOne/02500221.mp4           
 https://nighttrapblob.blob.core.windows.net/ntvids/bedroom/00000081.mp4

NETWORK:
*

这就是我记录发生情况的方法:

// App cache validation
var appCache = window.applicationCache;

if (appCache === null || undefined) {
    console.log("App cache does not exist");
}

appCache.addEventListener('checking', function(event) {
    console.log("Checking for updates.");
}, false);

appCache.addEventListener('error', function(event) {
    if (navigator.onLine === true) { //If the user is connected to the internet.
        //alert("Error - Please contact the website administrator if this problem consists.");
        console.log("Error - Please contact the website administrator if this problem consists.");
    } else {
        //alert("You aren't connected to the internet. Some things might not be available.");
        console.log("You aren't connected to the internet. Some things might not be available.");
    }
}, false);

appCache.addEventListener('downloading', function(event) {
    console.log("Started Download.");
}, false);


appCache.addEventListener('progress', function(event) {
    console.log(event.loaded + " of " + event.total + " downloaded.");
}, false);

appCache.addEventListener('cached', function(event) {
    console.log("Cached assets -- Done.");
}, false);

appCache.addEventListener('updateready', function() {
    console.log("New resources are available for download -- update ready");
}, false );

appCache.addEventListener('obsolete', function(event) {
    console.log("Obsolete - no resources are cached, and previous cache(s) are now deleted.");
}, false);

1 个答案:

答案 0 :(得分:0)

我解决了。有点狩猎,但是你走了:

您可以通过类似Web作业的方式将缓存控制应用于容器中的所有blob。 TurboGears有一个很好的例子,说明如何做到这一点,并包含两个步骤:

  1. 从同一数据中心的辅助角色运行操作。只要Azure服务位于同一个关联组中,Azure服务之间的速度就很快。此外,没有数据传输费用。
  2. 并行运行操作。 .net v4中的任务并行库(TPL)使这非常简单。下面是为容器中的每个blob并行设置缓存控制头的代码。 此外,您可以使用CloudBerry Explorer等工具,它支持Cache-Control
  3. 我只想在一些视频上对此进行测试,以确保自己安全地创建脚本的时间,所以在这里一步一步。我只是登录到我的Azure门户网站,转到我正在服务的.mp4s的blob存储容器中,并且必须单独编辑它们。我单击每个视频,编辑属性,然后设置Cache-Control属性的值。 (例如 public,max-age = 300000 ),其中max-age指定表示将被视为新鲜的最长时间。

    This Stack Overflow post非常了解其博客上可用于缓存控制的不同属性。