1

私はよく jquery を使用しますが、コードに次のような css クラス名の繰り返しが含まれることがあります。

$('#div1').addClass('funny-class');
...
$('#div2').addClass('funny-class');
...
$('#div1').removeClass('funny-class');

など...次のような疑似定数を使用してコードをクリーンアップする価値があるかどうかを自問していました。

var constants = {
    FUNNY: 'funny-class'
}
...
$('#div1').addClass(cnst.FUNNY);
$('#div2').addClass(cnst.FUNNY);
$('#div1').removeClass(cnst.FUNNY);

最初:最小化。「constants」がローカル変数 (スコープに隠されている) である場合、おそらく最小化ツールは「constants.FUNNY」の出現を「aB」のような最小化されたものに置き換えることができます。

2番目:スピード。「定数」を含むコードは最初のものよりも高速ですか?

どう思いますか?

4

4 に答える 4

2

高度な最適化を備えたGoogle のクロージャ コンパイラを使用して、一般的に繰り返される文字列を特定し、それらを定数変数参照に置き換えることができます。しかし、この最適化はわずかです。コードを改善したい場合は、jQuery オブジェクトをキャッシュすることでより良い改善が得られます (これは通常、多くのプログラマーが見落としている問題です)。

var $div1 = $('#div1');
var $div2 = $('#div2');
$div1.addClass('funny-class');
$div2.addClass('funny-class');
$div1.removeClass('funny-class');
于 2012-05-04T10:42:48.140 に答える
1

パフォーマンスとしては目立たないかもしれませんが、定数の値を変更することで値を簡単に変更できるため、文字列の代わりに定数を使用することを常にお勧めします。

于 2012-05-04T10:21:08.757 に答える
1
  1. はい、ミニファイヤはおそらく変数を減らしconstants.FUNNYますが、再利用を検出して変数に割り当てることはおそらくないでしょう'funny-class'

  2. 速度の違いはごくわずかなので、気にする必要はありません。一方では、スコープ チェーン内の変数を解決する必要がありますが (非常に迅速です)、他方では String プリミティブを作成する必要があります (これも迅速です)。

オブジェクトを持つことの利点は、constants割り当てたクラスの名前を変更する場合、3 箇所ではなく 1 箇所で変更するだけで済むことです。これは、考慮すべき唯一の利点です... 0.0000000000000001 秒の速度差ではありません。

于 2012-05-04T10:22:42.330 に答える
0

変数に入れると、パフォーマンスではなく、ある程度の「中央制御」を提供できます。

ただし、それらをオブジェクトに深く配置すると、パフォーマンスが低下します。スコープ解像度のオーバーヘッドを避けるために、それらをできるだけ地表近くに置いてください。(最小限ですが、それでもオーバーヘッドがあります)

//this one is so deep:
constants.foo.bar.baz.bam

//this is just 1 level deep:
constants.bam

また、あなたが行っているjQuery呼び出しについてもっと心配します

//two calls to #div1!
$('#div1').addClass(cnst.FUNNY);       //$() for div1
$('#div2').addClass(cnst.FUNNY);
$('#div1').removeClass(cnst.FUNNY);    //another $() for div1

//do this instead
var div1 = $('#div1')             //reference div1 once in a local variable

div1.addClass(cnst.FUNNY);        //use the reference to the object
$('#div2').addClass(cnst.FUNNY);
div1.removeClass(cnst.FUNNY);     //use the same reference to the object
于 2012-05-04T10:23:00.577 に答える