could somebody test this one with 100,100 & 10 Elements?

My results:
n
FF 3.6, Linux, 64Bit FF 2.5.8,WinXP, 32Bit
1000
time1::: 0.000033
*time1a: 0.000020*
time2::: 0.000030
time3::: 0.000024time1::: 0.000055
*time1a: 0.000036*
time2::: 0.000048
time3::: 0.000038
100
time1::: 0.000045
*time1a: 0.000027*
time2::: 0.000040
time3::: 0.000032time1::: 0.000058
*time1a: 0.000037*
time2::: 0.000051
time3::: 0.000040
10
time1::: 0.000052
*time1a: 0.000026*
time2::: 0.000045
time3::: 0.000042**time1::: 0.000077
*time1a: 0.000046*
time2::: 0.000072
time3::: 0.000059



http://mootools.net/shell/J7ySB/

On Mon, Feb 22, 2010 at 17:45, Yann Leretaille
<[email protected]>wrote:

> I understand your point. Actually, benchmarking seems particualry difficult
> for this one.
> I created a mooshell wich creates a list with 1000 Elements, wich have 0-3
> classes, with or without base_class.
> The list ist cloned for each benchmark and i ran each methos is runned 10
> times.
> Here are the results:
>
>
>    - Method1 (my method):
>       - return this.set('class',new RegExp(klass).exec(this.get('class')))
>       ;
>
>
>    - Method1a (my method, *precompiled RegExp* )
>       - regexp=new RegExp(klass)
>       - this.each(function(e) { e.set('class',regexp.exec(e.get('class')))
>       });
>
>
>    - Method2 (Roman):
>       - return this.set('class', this.get('class').split(' ').filter(
>       function(c){return c == this },klass)[0]);
>    - Method3 (hazlema):
>    -  return this.hasClass(klass) ? this.set("class", klass) : this.erase(
>       "class");
>
>
> Results (1000 items):
>
>    - time1:   0.0000340
>    - *time1a: 0.0000216*
>    - time2:   0.0000306
>    - time3:   0.0000234
>
> It seems to depend on how much items you have what the fastet method is.
> The strange thing is that i tried it with 1,50,10,100,500,1000 items and now
> Method1a is always faster! Perhaps Firefox is caching the RegExp...
>
> http://mootools.net/shell/J7ySB/
>
> Yann
>
>
>
> On Mon, Feb 22, 2010 at 06:47, Sanford Whiteman <
> [email protected]> wrote:
>
>> >    - Method1: 0.000265s
>> >    - Method2: 0.000297s
>> >    - Method3: 0.000279s
>>
>> > Looks like if my method is slightly faster...
>>
>> Mmm, something is wrong with your benchmark.
>>
>> Comparing your regex
>>
>> [f1] t.set('class',new RegExp('base_class').exec(t.get('class')));
>>
>> with the straightforward
>>
>> [f2]    t.hasClass('base_class')   ?   t.set('class','base_class')   :
>> t.erase('class');
>>
>> averaging over 10 runs of 1000 function calls each, the regex approach
>> is markedly slower.
>>
>> [f1]:
>>
>>  .016 when base_class is present on the element
>>  .012 when base_class is not present
>>
>> [f2]:
>>
>>  .007 when base_class is present
>>  .004 when base_class is not present
>>
>> You can eke out more performance by compiling the RegEx, but the basic
>> approach still beats it out significantly, 50-100% faster depending on
>> whether the target class is present.
>>
>> [f1-compiled]:
>>
>>  .011 when base_class is present on the element
>>  .008 when base_class is not present
>>
>> See http://mootools.net/shell/B8pPc/7/.
>>
>> - S.
>>
>>
>

Reply via email to