22

同様の質問については知っていますが、ここで質問していることとは少し異なりますので重複しないでください。flag

jQueryの製品版を見ると、しばらくして改行があるのはなぜですか?コピーをダウンロードして、(ライセンスを除く)すべての改行を削除しましたが、それでも機能しました。(私は、Mozilla Firefox、Google Chrome、およびOperaでの変更に対して、ユニットテストスイート全体を実行しました。)

問題。 グーグルクロームで

私は3つの改行(ライセンスを数えない)がそれをそれほど遅くしないことを知っています、しかしそれでも、すべての小さなビットは助けになりませんか?

JavaScriptコードからパフォーマンスを少しでも引き出す​​という、小さな課題を自分に割り当てました。

4

3 に答える 3

26

jQueryは現在、 UglifyJSを使用してソースコードを縮小しています。ビルドスクリプトでは、ディレクティブを次のように具体的に設定しています。max_line_length32 * 1024

UglifyJSのドキュメントには、max-line-lenディレクティブについての説明があります。

--max-line-len(デフォルトの32K文字)—約32K文字の後に改行を追加します。すべてのコードが約670Kの1行にあるときに、FFとChromeの両方が鳴くのを見てきました。この安全機能を無効にするには、–max-line-len0を渡します。

于 2012-04-17T15:30:38.817 に答える
13

ClosureCompilerのFAQを引用するには:

クロージャコンパイラは、500文字程度ごとに意図的に改行を追加します。ファイアウォールとプロキシは、非常に長い行を持つ大きなJavaScriptファイルを破損または無視することがあります。500文字ごとに改行を追加すると、この問題を防ぐことができます。改行を削除しても、スクリプトのセマンティクスには影響しません。コードサイズへの影響は小さく、コンパイラは改行の配置を最適化するため、ファイルがgzip圧縮されたときのコードサイズのペナルティはさらに小さくなります。

これは、一般的なミニファイプログラムに関連しています。

于 2012-04-17T15:26:23.397 に答える
4

行(ライセンスを除く)はすべて約30k文字の長さです。一部のJavascriptパーサーが非常に長い行で死ぬバグを回避するためかもしれません。これはおそらく今日のブラウザでは発生しませんが、古いブラウザやよりあいまいなブラウザにはそのような制限があるかもしれません。


(以下の古い回答。これも当てはまる可能性がありますが、この場合は当てはまりません)

これは、人気のあるJavascriptミニファイアであるJSMinが、特定の条件下で出力にラインフィードを保持するためである可能性があります。これは、Javascriptでは、たとえばセミコロンを省略した場合に行フィードが重要になるためです。ドキュメントには次のように書かれています。

ラインフィードはセミコロンとして扱われることがあるため、ラインフィードを省略する方が保守的です。改行は、非ASCII文字、ASCII文字、数字、またはこれらの文字のいずれかの前にある場合は省略されません。

\ $ _ { [ ( + -

非ASCII文字、ASCII文字、数字、またはこれらの文字のいずれかに続く場合:

\ $ _ } ] ) + - " '

他のミニファイアにも同様のルールがあるかもしれません。

したがって、これは主に、構文的に必要になる可能性のある改行を誤って削除することに対する予防策です。最後に必要なのは、ミニファイアがセマンティクスを破壊したため、ミニファイされたJSが機能しなくなることです。

について»3つの改行(ライセンスを数えない)がそれを大幅に遅くすることはないことを私は知っていますが、それでも、すべての小さなビットは役に立ちませんか?«:サーバーがgzip圧縮を使用する場合、違いはとにかく意味がないでしょう。

于 2012-04-17T15:11:53.730 に答える