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”是一个局部变量(隐藏在一个范围内),那么最小化器可能会用“aB”之类的最小化来替换“constants.FUNNY”的出现。

第二:速度。带有“常量”的代码比第一个更快?

你怎么看?

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 个;这是您应该考虑的唯一好处……而不是 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 回答