將一組20-30個.js文件連接成一個大文件,使用gzip壓縮此文件,將其保存爲somebigjsfile.js.gz之類的文件,然後加載它像這樣<script type="text/javascript" src="somebigjsfile.js.gz"></script>
?PHP:加載gzip JavaScript文件
當至少有一個.js文件被修改(用php的filemtime檢查)時,這個文件會再次生成。
此外,如果它是相關的,這是一個公共應用程序。
將一組20-30個.js文件連接成一個大文件,使用gzip壓縮此文件,將其保存爲somebigjsfile.js.gz之類的文件,然後加載它像這樣<script type="text/javascript" src="somebigjsfile.js.gz"></script>
?PHP:加載gzip JavaScript文件
當至少有一個.js文件被修改(用php的filemtime檢查)時,這個文件會再次生成。
此外,如果它是相關的,這是一個公共應用程序。
我假設你正試圖在服務器上節省每個請求上的gzip javascript包的開銷嗎?如果這是意圖,這不是實現這一目標的正確方法。您需要指出該文件在頭被轉移用gzip壓縮,因爲這樣的:
HTTP/1.1 200 OK
Date: Thu, 04 Dec 2003 16:15:12 GMT
Server: Apache/2.0
Vary: Accept-Encoding
Content-Encoding: gzip
Cache-Control: max-age=300
Expires: Thu, 04 Dec 2003 16:20:12 GMT
X-Guru: basic-knowledge=0, general-knowledge=0.2, complete-omnipotence=0.99
Content-Length: 1533
Content-Type: text/html; charset=ISO-8859-1
通知Content-Encoding: gzip
在任何情況下,串聯和壓縮你的JavaScript始終是一個好主意,只要你做對了。我也建議在壓縮之前使用某種形式的JS縮小,因爲它會改善你的壓縮後的尺寸
如果你打算讓遊客回來,我不認爲這是個好主意 - 而且我認爲是這種情況如果你正在開發一個Web應用程序。因爲每次你的一個js文件被修改時,你都會強制你的用戶下載一個巨大的文件。
當您的用戶第一次來到您的應用程序時,如果加載時間有點長,他們通常會非常寬容。如果您向他們展示了一個很好的介紹性文本,他們將在腳本和各種資產加載時閱讀和/或查看內容。但是如果他們不得不等待你的巨大腳本每次回來都會被加載,因爲它是全有或全無,這將被認爲是糟糕的用戶體驗。
如果用戶加載應用程序時不需要所有20-30個文件,請使用腳本加載器將它們加載到後臺。
如果您確實需要這些20-30個文件,請嘗試將它們聚合到10個左右的文件中,試圖將那些具有最高可能性的文件聚合在一起。
至於gzip壓縮,你的web服務器應該處理它。
我想知道,你多久換一次你的js文件?我每3-6個月更換一次,所以如果我在幾個月後重建緩存,我實際上看不到問題。即使每天重建它也是可以接受的。 – Quamis 2011-03-23 09:08:09
是的,它是一個很好的ideea。
我在做的是使用像load_script($filename)
這樣的自定義php函數,將該文件添加到「加載隊列」中。並在頁面的末尾插入另一個函數generate_js_script()
解析這些排隊的腳本,生成一個大的js文件(我想我可以運行最小化在這一點),並寫入磁盤與唯一的文件名。該功能僅生成<script>
標籤,以便瀏覽器知道加載這個「大」js文件。 這種方式我不打擾定製header()
調用,以及其他一些奇怪的事情,在過去一些瀏覽器和他們的緩存算法引起的問題。
這樣,我可以簡單地使用.htaccess
指令來告訴服務器爲壓縮的所有js文件(如果瀏覽器支持它)提供服務,所以我不必在php中執行它。 關於這種緩存的訣竅是不會經常重新生成。我使用某種散列來處理這個問題。
應將Web服務器配置爲自動提供壓縮內容。除此之外,連接JS文件聽起來像一個好主意 - 雖然我不知道如何觸發更新文件? – 2011-03-23 08:05:18
是的 - 似乎你已經想通了。 – Tramov 2011-03-23 08:05:51
這聽起來與我所做的非常相似。我有一個讀取javascript目錄的類,其中的任何.js文件都被刪除了所有評論,空白,最小化等等,然後合併爲一個單一文件並進行gzip壓縮。只要有任何文件發生變化,腳本就會自動重建大腳本,效果很好,因爲用戶總是獲取緩存版本。這聽起來像你在做什麼 – JasonDavis 2011-03-28 23:35:45