簡體   English   中英

命名層次結構,縮小和跨瀏覽器的兼容性

[英]Namespacing Hierarchy, Minify and Cross-Browser Compatibility

我一直在使用以下模型來命名最新的腳本。 到目前為止,它具有一些明顯的優勢,盡管我敢肯定可以通過其他方式進行復制,但這確實對我的編碼過程有所幫助。 不幸的是,我遇到了一個明顯的劣勢...使用某些JS壓縮實用程序時,它們嚴重地破壞了代碼,以至於我必須避免許多有利的選擇。 幸運的是,我用此模型保存的代碼有助於減輕“損壞”。

我仍然想知道是否有更可行的解決方案,因為min.js僅在Chrome / IE中始終失敗。 我知道以下內容對於某些人來說太抽象了。 是否有專家可以為我指明正確的方向。 我用過YUI,Packer和JSMin。 JSMin工作可靠,但效率卻不如...

/* Global Namspace */
(function (T) {"use strict";
    /* Top.Sub1 */
    (function(S1) {


        // ... Some methods (public/private)


        /* Top.Sub1.Mini */
        (function(M) {

            // ... Some methods (public/private)

        }(S1.Mini = S1.Mini || function(o){}));
    }
    (T.Sub1 = T.Sub1 || function(o){}));

    /* Top.Sub2 */
    (function(S2) { 

        // ... Some methods (public/private)

        /* Top.Sub2.Mini1 */
        (function(M1) {

            // ... Some methods (public/private)

        }(S2.Mini1 = S2.Mini1 || function(o) {}));

        /* Top.Sub2.Mini2 */
        (function(M2) {

            // ... Some methods (public/private)

        }(S2.Mini2 = S2.Mini2 || function(o) {}));
    } (T.Sub2 = T.Sub2 || function(o) {}));

} (window.Namespace = window.Namespace || function(o){}));

更新:我面臨的最常見錯誤是各種“意外令牌”。有時是“)”,有時是“}”。 每隔一段時間,它是一個'('。我尚未解決gzip,因為我希望這樣做。

更新2:已使用Tidied-jsHint傳遞文件檢查/刪除了ns,但仍無法正確縮小。 絕對與該模型有關...是否有人對原因有明確的答案? 如果沒有,歡迎提出進一步的建議。 PS Github已使用Tidied-jsHint傳遞代碼進行了更新。

我想讀這篇文章,了解為達到良好的縮小效果需要做什么和需要避免的事情– http://alistapart.com/article/javascript-minification-part-II

然后選擇合適的模塊框架,例如AMDcommonjs

UPD 我的主要建議是在代碼(例如http://jshint.com)上使用linter,並遵循http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml等編碼風格。解釋為什么某些情況下會中斷某些情景。 它還將使您的代碼更適合開源貢獻者。

在測試了我可以使用的每個粉碎機上的幾乎所有選項之后,該代碼可以很好地縮小。 (有或沒有整齊,等等。)當任何一個縮小器試圖替換或混淆符號時,都會出現此問題。 特別是,它不能很好地處理for循環:

for (i = 0; i < l; i++) { 
    _.points[i] = new S.Point(_, pts[i]);
}

刪除循環可以使優化正確進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM