2010-09-29 87 views
0

嘿傢伙..我正在C#中編寫一個Windows應用程序,用於縮小CSS文件並將JS文件打包爲批處理作業。應用程序的一個障礙是,如果用戶選擇已經打包的JavaScript文件,該怎麼辦?它將最終增加文件大小,完全擊敗我的目的!如何檢測JS是否已打包

正在打開文件並尋找字符串eval(function(p,a,c,k,e,d)夠了嗎?我的猜測是否定的,因爲那裏有其他的JS打包方法。幫幫我!

+0

謝謝大家,爲您解答。每個答案都以某種方式幫助了我。最後我今天在我的博客上免費發佈我的打包工具。檢查出來,讓我知道 - http://j.mp/mini5ive。沒有垃圾郵件,承諾;-) – GPX 2010-10-10 06:20:34

回答

3

有人可能會建議你比較前後JS的大小和返回/使用兩者中較小的一個。

UPDATESep 30 at 1:02

基於在評論提問GPX下面是一個非常簡單的方式告訴。有可能是決定本的不同,或更準確,方法,但這應該讓你在正確的方向前進:

var unpackedJs = File.ReadAllText(...) 
var unpackedSize = jsContent.Length; 
var packedJs = ... // Your Packaging routine 
File.WriteAllText(pathToFile, unpackedSize < packedJs.Length ? unpackedJs : packedJs) 
+0

這是一個相當合理的解決方案,但我打開文件,閱讀內容,更改並保存。如果我能在寫入文件之前弄清楚文件大小,這將會很有幫助。任何指針? – GPX 2010-09-30 01:02:50

1

我會檢查文件大小和代碼(例如:平均線長度)線。這兩個信息應該足以知道代碼是否足夠緊湊。

試試這個demo

0

當您創建/保存縮小文件時,請使用標準文件名約定「Filename.min.js」。然後,當他們選擇文件時,可以檢查該文件是否可靠。

我不認爲在防僞上太過分是明智的做法。如果一個用戶(他是一名開發人員)不夠聰明,可以對文件進行雙重打包,他們應該遇到問題。我知道你應該給他們帶來懷疑的好處,但在這種情況下,似乎並不值得花費。

+0

我同意。但是我想到的是一次性的靈魂作用,即使它在所有JS引用中與「.min」一樣微不足道,也不會爲用戶提供編輯代碼的額外任務。 – GPX 2010-09-30 01:07:38

0

如果您正在使用安全最小化例程,則您的輸出應該與輸入相同。我不會推薦你提到的例程。 MS的Ajax Minifier是一個很好的工具,甚至可以提供在您的項目中使用的dll。這會讓你的關注成爲一個非問題。

+0

我沒有看到你的意思是「安全」。 PACKER已經被很多年的所有人所使用。至少和通過Web瀏覽器放置代碼一樣安全。 – 2010-09-29 17:13:09

+0

是的。 PACKER是安全的,因爲重新包裝一個已經包裝好的JS仍然會使它變得有用,但只有文件大小更大! – GPX 2010-09-30 01:05:46

0

我會建議爲打包文件的擴展名添加'.min'前綴,如'script.min.js'。然後只需檢查文件名稱。

除此之外,我會建議檢查線條有多長,以及使用了多少空間。精簡/打包的JS通常幾乎沒有空格(通常是字符串)和非常長的行。

1

我指導你發佈一個表明包裝不好的帖子。

http://ejohn.org/blog/library-loading-speed/

而是使用微小。 Google Closure編譯器可以通過REST Web服務完成此操作。只能使用.min.js擴展名縮小(未打包)。

Gzip會做得更好,並且會被瀏覽器解壓縮。最好在服務器上打開zip壓縮文件,以便進一步壓縮縮小的文件。

當然這引發了一個問題'如何判斷我的Javascript是否已經縮小!'

+0

感謝您的鏈接,詹姆斯。但個人而言,我認爲通過瀏覽器「打包」打包的JavaScript的開銷並不能改變遊戲規則,因爲這些日子裏,每個人都擁有功能強大的機器,並且它們沒有太大區別。只是我的論點。你怎麼看? – GPX 2010-10-10 06:24:06

+0

那麼解壓縮是在JavaScript中完成的 - 最好是進行jit編譯 - 但更糟糕的是,每次頁面加載時都必須發生 - 即使腳本來自緩存。 Gzip壓縮會生成一個較小的文件,並由瀏覽器解壓縮一次,然後放入緩存中。另外,設置起來非常簡單,即使在更改文件時也無需執行任何操作。對我來說,這是不容易的。 – 2010-10-10 18:56:12