命名空间层次结构,缩小和跨浏览器兼容性

时间:2013-03-20 11:29:02

标签: javascript compression minify

我一直在使用以下模型命名我最新的脚本。到目前为止,它具有一些明显的优势,虽然我确信可以通过其他方式进行复制,但在我的编码过程中确实有所帮助。不幸的是,我遇到了一个明显的缺点......当使用一些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,但仍未正确缩小。这绝对与这个模型有关......有谁有明确答案为什么?如果没有,欢迎提出进一步的建议。 P.S。 Github已经使用Tidied-jsHint传递代码进行了更新。

2 个答案:

答案 0 :(得分:0)

我会说这篇文章是关于需要做什么以及需要避免什么才能实现良好的缩小 - http://alistapart.com/article/javascript-minification-part-II

然后选择适当的模块框架,如AMDcommonjs

<强> UPD 即可。我的主要建议是使用像http://jshint.com这样的代码上的linter并坚持像http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml这样的编码风格。它主要解释为什么在某些注意事项中会出现问题。它还将使您的代码对开源贡献者更加平易近人。

答案 1 :(得分:0)

在测试了每个缩小器的几乎所有选项后,我都可以开始使用,代码缩小了很多。 (有和没有整洁等...)当任何一个缩小器试图替换或混淆符号时,问题就出现了。特别是,它不能很好地处理这个循环:

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

删除循环可以正确进行优化。