annotate default/node_modules/javascript-natural-sort/speed-tests.html @ 0:1d038bc9b3d2 default tip

Up:default
author Liny <dev@neowd.com>
date Sat, 31 May 2025 09:21:51 +0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1 <!DOCTYPE html>
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
2 <html>
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
3 <head>
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
4 <script src="naturalSort.js" type="text/javascript"></script>
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
5
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
6 <script>
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
7
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
8 /* Mike Grier's fixes on v0.2 http://mgrier.com/code/natsort.optimized.txt */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
9 function naturalSort2(a,b){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
10 // setup temp-scope variables for comparison evauluation
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
11 var x = a.toString().toLowerCase() || '',
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
12 re=/(-?[0-9.]+)/g,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
13 y = b.toString().toLowerCase() || '',
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
14 nC = String.fromCharCode(0),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
15 xN = x.replace( re, nC + '$1' + nC ).split(nC),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
16 yN = y.replace( re, nC + '$1' + nC ).split(nC),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
17 xD = (new Date(x)).getTime(),yD;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
18
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
19 if(xD) yD = (new Date(y)).getTime(); //no point in getting yD if xD is not a date
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
20
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
21 // natural sorting of dates
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
22 if(yD){ // we already checked if(xD), so if(yD), it's a date, too
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
23 if( xD < yD ) return -1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
24 else if( xD > yD ) return 1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
25 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
26
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
27 // natural sorting through split numeric strings and default strings
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
28 var cLoc, numS=Math.max(xN.length,yN.length);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
29 for(cLoc=0; cLoc<numS; cLoc++){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
30 // instead of performing these next 6 operations in the if
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
31 // and the same 6 operations in the else if, just do them once
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
32 // so we can reuse results instead of computing twice
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
33 xNcL = xN[cLoc]; // only look up values
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
34 yNcL = yN[cLoc]; // in arrays once
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
35 FxNcL = parseFloat(xNcL);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
36 FyNcL = parseFloat(yNcL);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
37 oFxNcL = FxNcL || xNcL;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
38 oFyNcL = FyNcL || yNcL;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
39
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
40 if(oFxNcL < oFyNcL)return -1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
41 else if(oFxNcL > oFyNcL)return 1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
42 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
43 return 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
44 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
45
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
46 /*
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
47 * Natural Sort algorithm for Javascript
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
48 * Version 0.3
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
49 * Author: Jim Palmer (based on chunking idea from Dave Koelle)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
50 * optimizations and safari fix by Mike Grier (mgrier.com)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
51 * Released under MIT license.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
52 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
53 function naturalSort3(a, b){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
54 // setup temp-scope variables for comparison evauluation
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
55 var re = /(-?[0-9\.]+)/g,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
56 x = a.toString().toLowerCase() || '',
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
57 y = b.toString().toLowerCase() || '',
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
58 nC = String.fromCharCode(0),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
59 xN = x.replace( re, nC + '$1' + nC ).split(nC),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
60 yN = y.replace( re, nC + '$1' + nC ).split(nC),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
61 xD = (new Date(x)).getTime(),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
62 yD = xD ? (new Date(y)).getTime() : null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
63 // natural sorting of dates
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
64 if ( yD )
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
65 if ( xD < yD ) return -1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
66 else if ( xD > yD ) return 1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
67 // natural sorting through split numeric strings and default strings
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
68 for( var cLoc = 0, numS = Math.max(xN.length, yN.length); cLoc < numS; cLoc++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
69 oFxNcL = parseFloat(xN[cLoc]) || xN[cLoc];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
70 oFyNcL = parseFloat(yN[cLoc]) || yN[cLoc];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
71 if (oFxNcL < oFyNcL) return -1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
72 else if (oFxNcL > oFyNcL) return 1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
73 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
74 return 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
75 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
76
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
77 var a = [], b = [], c = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
78 for ( var i = 0; i < 1000; i++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
79 a.push(String.fromCharCode( Math.floor(Math.random() * (90-66)) + 65, Math.floor(Math.random() * (90-66)) + 65, Math.floor(Math.random() * (90-66)) + 65 ));
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
80 b.push(String.fromCharCode( Math.floor(Math.random() * (90-66)) + 65, Math.floor(Math.random() * (90-66)) + 65, Math.floor(Math.random() * (90-66)) + 65 ));
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
81 c.push(String.fromCharCode( Math.floor(Math.random() * (90-66)) + 65, Math.floor(Math.random() * (90-66)) + 65, Math.floor(Math.random() * (90-66)) + 65 ));
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
82 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
83 for ( i = 0; i < 1000; i++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
84 a.push(Math.floor(Math.random() * 9).toString() + Math.floor(Math.random() * 9).toString() + Math.floor(Math.random() * 9).toString() );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
85 b.push(Math.floor(Math.random() * 9).toString() + Math.floor(Math.random() * 9).toString() + Math.floor(Math.random() * 9).toString() );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
86 c.push(Math.floor(Math.random() * 9).toString() + Math.floor(Math.random() * 9).toString() + Math.floor(Math.random() * 9).toString() );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
87 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
88 for ( i = 0; i < 1000; i++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
89 a.push( (Math.floor(Math.random() * 12) + 1).toString() + '/' + (Math.floor(Math.random() * 28) + 1).toString() + '/' + ( 2009 - Math.floor(Math.random() * 2)) );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
90 b.push( (Math.floor(Math.random() * 12) + 1).toString() + '/' + (Math.floor(Math.random() * 28) + 1).toString() + '/' + ( 2009 - Math.floor(Math.random() * 2)) );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
91 c.push( (Math.floor(Math.random() * 12) + 1).toString() + '/' + (Math.floor(Math.random() * 28) + 1).toString() + '/' + ( 2009 - Math.floor(Math.random() * 2)) );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
92 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
93
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
94 var d = new Date();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
95 document.write(a.sort(naturalSort)[0] + ' <BR>[' + ((new Date()).getTime() - d.getTime()) + 'ms]<BR><BR>');
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
96 //d = new Date();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
97 //document.write(b.sort(naturalSort2)[0] + ' <BR>[' + ((new Date()).getTime() - d.getTime()) + 'ms]<BR><BR>');
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
98 //d = new Date();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
99 //document.write(c.sort(naturalSort3)[0] + ' <BR>[' + ((new Date()).getTime() - d.getTime()) + 'ms]');
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
100
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
101 </script>
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
102 <style>*{font-family:tahoma;font-size:9px;}</style>
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
103 </head>
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
104 <body></body>
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
105 </html>