1

次の行を使用して、yuicompressor を使用して js の圧縮バージョンを作成しています。

java -jar /home2/java/yuicompressor-2.4.2.jar --type js /home/site/libs/javascript/photos_functions.js >/home/site/libs/javascript/photos_functions-min.js

しかし、何らかの理由で、yui はセミコロン (;) を配置する場所が間違っているようです。私はそれに気づき始めたばかりです。jquery ajax function $ajax({}); を使用した後に発生するようです。

セミコロンを削除してから、次の}に追加するようです(奇妙な)。

他の誰かがこれを見たか、それを修正する方法/オプションがありませんか?

前の例:

function photo_load_vs_breakdown(photo_id,page) {

    display_white_box('photo_vs_box');

    url =  SITEURL + "/libs/ajax/vs_mode_breakdown.php";
    params = 'photo_id='+photo_id+'&page='+page;



    $.ajax({ 
        url: url,
        cache:false, 
        type: 'POST',
        data: params,
        dataType: 'json',
        success: function(data) {

            if(page == 0){
                $('#photo_vs_box_contents').html(data.content);
            }
            else{

                newpage = page + 1;
                $('#vs_mode_wins').append(data.wins_append);
                $('#vs_mode_losses').append(data.lose_append);
                $('#vs_load_more').attr('onclick','photo_load_vs_breakdown('+photo_id+','+newpage+')');
                if(data.disable_vs_load_more == 'yes'){
                    $('#vs_load_more').attr('disabled','disabled');
                }

            }

        }
    }); 
}

後の例:

function photo_load_vs_breakdown(a,b){display_white_box("photo_vs_box");url=SITEURL+"/libs/ajax/vs_mode_breakdown.php";params="photo_id="+a+"&page="+b;$.ajax({url:url,cache:false,type:"POST",data:params,dataType:"json",success:function(c){if(b==0){$("#photo_vs_box_contents").html(c.content)}else{newpage=b+1;$("#vs_mode_wins").append(c.wins_append);$("#vs_mode_losses").append(c.lose_append);$("#vs_load_more").attr("onclick","photo_load_vs_breakdown("+a+","+newpage+")");if(c.disable_vs_load_more=="yes"){$("#vs_load_more").attr("disabled","disabled")}}}})};

末尾のセミコロンの位置に注意してください。

4

2 に答える 2

1

YUIコンプレッサーがここで行っているように見えるのは、セミコロンを正確に配置または移動することではなく、実際には関数の最後の式の後にセミコロンを削除し、コードの最後に1つのセミコロン追加することです(2つ以上を連結するときの問題を回避するため)一緒にスクリプト)。

たとえば、次のコード:

function x() { a(); b(); c(); }
function y() { a(); b(); c(); }

このコードに圧縮されます:

function x(){a();b();c()}function y(){a();b();c()};

両方の関数で最後のセミコロンがすべて削除されましたが、2番目の関数の後にセミコロンが1つだけ追加されていることに注意してください。

簡単な実験については、YUICompressorを使用したオンラインJavaScript/CSS圧縮を参照してください。また、JavaScriptミニファイ用の別のツールであるUglifyJSと比較してください。この例では、次のように出力されます。

function x(){a(),b(),c()}function y(){a(),b(),c()}

その他のオプションについては、UglifyJSのreadmeを参照してください。(より高度なUglifyJS2も開発されています。)

于 2012-10-12T11:05:05.623 に答える
1

YUI Compressor は、他の多くのコード変換ツールと同様に、コードの一部を削除または移動してコードを実際に「編集」するわけではありません。実際には、すべてのスタイルやその他の無意味なビットを完全に削除して中間形式にコンパイルし、独自の内部規則に従って新しいコードを再生成します。空白、余分な角かっこ、余分なセミコロンなど、本質的に何もしないシンボルを何とか「保存」する方法はありません。それらはどこにも保存されていないからです。

于 2012-10-12T10:53:05.577 に答える