2011-09-26 41 views
1

我們創建了一個HTML5應用程序,它也可以在離線模式下工作。 HTML元素包含清單屬性,我們的清單包含所有必需的文件,以便能夠離線使用應用程序。我們試圖找到一種方法來以自動方式縮小我們的JavaScript文件,但也有一個工作清單文件(無需在縮小後手動編輯清單文件)。大多數情況下,當使用縮小的JavaScript文件時,最好使用文件名中的版本號或querystring變量來確保加載縮小的JavaScript文件的新版本,但與清單結合使用時效果不佳不支持更改查詢字符串變量或不同文件名的文件。Javascript縮小和HTML5清單

我們已經嘗試了AjaxMin和SquishIt,但無法得到這個工作。你們有任何想法或工作解決方案,使這種組合工作?

我們的HTML:

<html manifest="app.manifest"> 

我們的清單:

CACHE MANIFEST 

NETWORK: 
data 

CACHE: 
scripts/application/application.js 
scripts/application/database.js 
scripts/application/knockout.extensions.js 
scripts/application/main.js 
scripts/application/models.js 
scripts/application/prototype.extensions.js 
etc... 

謝謝!

+1

我不知道我明白了;爲什麼不簡單地在緩存清單中列出'all.js'(或者你想調用它的任何東西)? –

+0

如果更改清單,請確保文件的** SIZE **更改。這是因爲標準需要重新加載清單文件 - 當其大小與緩存大小不同時,所有要緩存的項目都要重新加載。我不認爲修改時間或其他哈希被檢查。這可能比它看起來更難,比如「VERSION 1」和「VERSION 2」等。具有完全相同的字符數量,因此更改版本號通常效果不佳。我的訣竅是添加一個「X」(或某個字符)的註釋,並在任何新版本的末尾添加註釋。 –

+0

爲了緩存項目被刷新,您需要重新加載清單文件,正如我在之前的評論中所述。否則,即使您的文件名稱相同,瀏覽器也不會加載新版本,但會繼續使用舊的緩存版本。 –

回答

0

如果要推送更新,只需要將清單更改爲一個或多個字節。大多數人使用帶有版本號的評論。

#version 0.1 

當瀏覽器顯示緩存的頁面時,它會在後臺下載清單。如果更改,它將重新下載清單中的所有文件。所以也是你的新JS文件。因此,您只需觸發下載新文件即可。 一旦一切正常下載,新文件將在下次加載頁面時使用。 (*)當重新下載瀏覽器時將發送Last-Modified和/或E-Tag標題,以便服務器可以返回304(如果該文件未被修改(以減少帶寬使用))。另外一些瀏覽器會尊重過期頭文件,所以發送過期頭文件,這些頭文件將來還沒有甚至更好,因爲使用appCache時基於expires頭文件的緩存是無用的。

另外請注意,如果沒有過期發送,firefox將根據最後修改的標題猜測expires值。如果文件一段時間沒有改變,並且你正在使用appcache,那麼除了改變它的文件名外,沒有辦法強制firefox重新下載該文件(幾乎失去了理智,試圖弄清楚爲什麼FX沒有更新一些文件)。

不確定你縮小的問題是什麼。新的JS現在是否工作,或者你無法使瀏覽器使用新文件?

0

你有一些構建過程或發佈過程來縮小你的JavaScript,對吧?現在你必須重新生成該進程的更新版本的manifest部分。在你的構建工具(make,rake,ant或其他)重建新的縮小的JavaScript之後,它還需要生成一個指向新JavaScript文件的新清單文件。