Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Use spread operator instead of arrCopy(arguments) #2122

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 10, 2025
Merged

Conversation

jdeniau
Copy link
Member

@jdeniau jdeniau commented Jun 10, 2025

Spread syntax is supported since node 5, chrome 46, firefox 16, edge 12 and safari 8.

The arguments used before forced us to use the arrCopy method and forbid the use of arr.slice() to make a copy.
Why? because arguments is an array-like, but not an array.

Let's move to modern code and use spread syntax.

This will make #2121 more easy to merge as it will only do one thing.

Benchmark shows a 5%-25% performance boost on nearly all tested operations!

Benchmark between 6.x and this branch
List > builds from array of 2
  Old:   234,148   245,277   257,517 ops/sec
  New:   207,339   220,128   234,597 ops/sec
  compare: 1 -1
  diff: -10.26%
  rme: 5.5%
List > builds from array of 8
  Old:   224,285   233,359   243,198 ops/sec
  New:   245,319   250,027   254,919 ops/sec
  compare: 0 0
  diff: 7.14%
  rme: 3.16%
List > builds from array of 32
  Old:   180,695   187,573   194,995 ops/sec
  New:   196,845   200,388   204,062 ops/sec
  compare: 0 0
  diff: 6.83%
  rme: 2.97%
List > builds from array of 1024
  Old:    10,566    10,975    11,416 ops/sec
  New:    11,841    11,976    12,114 ops/sec
  compare: 0 0
  diff: 9.12%
  rme: 2.84%
List > pushes into 2 times
  Old:   476,816   493,759   511,951 ops/sec
  New:   544,463   554,992   565,935 ops/sec
  compare: -1 1
  diff: 12.4%
  rme: 2.86%
List > pushes into 8 times
  Old:   157,704   162,572   167,750 ops/sec
  New:   185,786   187,638   189,528 ops/sec
  compare: -1 1
  diff: 15.41%
  rme: 2.29%
List > pushes into 32 times
  Old:    41,156    42,194    43,286 ops/sec
  New:    51,290    51,525    51,761 ops/sec
  compare: -1 1
  diff: 22.11%
  rme: 1.81%
List > pushes into 1024 times
  Old:     1,245     1,303     1,366 ops/sec
  New:     1,629     1,638     1,647 ops/sec
  compare: -1 1
  diff: 25.73%
  rme: 3.3%
List > pushes into transient 2 times
  Old:   640,356   659,125   679,026 ops/sec
  New:   710,097   715,666   721,324 ops/sec
  compare: -1 1
  diff: 8.57%
  rme: 2.14%
List > pushes into transient 8 times
  Old:   380,969   398,494   417,710 ops/sec
  New:   436,431   442,278   448,284 ops/sec
  compare: 0 0
  diff: 10.98%
  rme: 3.38%
List > pushes into transient 32 times
  Old:   155,953   161,128   166,659 ops/sec
  New:   171,974   173,859   175,786 ops/sec
  compare: 0 0
  diff: 7.9%
  rme: 2.47%
List > pushes into transient 1024 times
  Old:     6,013     6,274     6,559 ops/sec
  New:     6,742     6,840     6,941 ops/sec
  compare: 0 0
  diff: 9.01%
  rme: 3.24%
List > some 100 000 items
  Old:        14        15        16 ops/sec
  New:        19        19        20 ops/sec
  compare: -1 1
  diff: 28.1%
  rme: 4.26%
Map > builds from an object of 2
  Old:   151,107   156,175   161,596 ops/sec
  New:   171,328   173,378   175,479 ops/sec
  compare: -1 1
  diff: 11.01%
  rme: 2.51%
Map > builds from an object of 8
  Old:    54,820    57,360    60,147 ops/sec
  New:    63,894    64,648    65,420 ops/sec
  compare: -1 1
  diff: 12.7%
  rme: 3.38%
Map > builds from an object of 32
  Old:    26,098    27,250    28,509 ops/sec
  New:    30,523    30,652    30,783 ops/sec
  compare: -1 1
  diff: 12.48%
  rme: 3.13%
Map > builds from an object of 1024
  Old:     1,598     1,663     1,734 ops/sec
  New:     1,742     1,784     1,827 ops/sec
  compare: -1 1
  diff: 7.23%
  rme: 3.35%
Map > builds from an array of 2
  Old:   182,895   187,845   193,069 ops/sec
  New:   202,814   205,912   209,107 ops/sec
  compare: -1 1
  diff: 9.61%
  rme: 2.19%
Map > builds from an array of 8
  Old:    48,222    49,423    50,684 ops/sec
  New:    53,615    54,461    55,335 ops/sec
  compare: -1 1
  diff: 10.19%
  rme: 2.08%
Map > builds from an array of 32
  Old:    16,846    17,529    18,270 ops/sec
  New:    19,665    19,773    19,881 ops/sec
  compare: -1 1
  diff: 12.79%
  rme: 2.89%
Map > builds from an array of 1024
  Old:       772       803       836 ops/sec
  New:       903       909       914 ops/sec
  compare: -1 1
  diff: 13.21%
  rme: 2.85%
Map > builds from a List of 2
  Old:   181,432   186,345   191,533 ops/sec
  New:   195,086   198,779   202,614 ops/sec
  compare: -1 1
  diff: 6.67%
  rme: 2.33%
Map > builds from a List of 8
  Old:    44,645    46,358    48,207 ops/sec
  New:    51,468    52,216    52,987 ops/sec
  compare: -1 1
  diff: 12.63%
  rme: 2.9%
Map > builds from a List of 32
  Old:    15,651    16,438    17,309 ops/sec
  New:    18,850    19,015    19,183 ops/sec
  compare: -1 1
  diff: 15.67%
  rme: 3.61%
Map > builds from a List of 1024
  Old:       709       743       779 ops/sec
  New:       844       852       861 ops/sec
  compare: -1 1
  diff: 14.72%
  rme: 3.4%
Map > merge a map of 2
  Old:   232,625   250,664   271,736 ops/sec
  New:   286,572   293,641   301,066 ops/sec
  compare: -1 1
  diff: 17.14%
  rme: 5.75%
Map > merge a map of 8
  Old:    56,562    61,343    67,007 ops/sec
  New:    76,032    76,462    76,896 ops/sec
  compare: -1 1
  diff: 24.64%
  rme: 5.99%
Map > merge a map of 32
  Old:    47,269    49,370    51,667 ops/sec
  New:    56,568    56,852    57,139 ops/sec
  compare: -1 1
  diff: 15.15%
  rme: 3.16%
Map > merge a map of 1024
  Old:     1,904     1,986     2,075 ops/sec
  New:     2,203     2,238     2,274 ops/sec
  compare: -1 1
  diff: 12.67%
  rme: 3.23%
Record > builds from an object of 2
  Old:   152,499   156,536   160,794 ops/sec
  New:   177,225   179,901   182,659 ops/sec
  compare: -1 1
  diff: 14.92%
  rme: 2.15%
Record > builds from an object of 5
  Old:   122,460   129,182   136,685 ops/sec
  New:   163,371   165,732   168,163 ops/sec
  compare: -1 1
  diff: 28.29%
  rme: 4.01%
Record > builds from an object of 10
  Old:   119,653   124,443   129,632 ops/sec
  New:   146,765   148,568   150,416 ops/sec
  compare: -1 1
  diff: 19.38%
  rme: 2.96%
Record > builds from an object of 100
  Old:    35,160    36,701    38,383 ops/sec
  New:    42,682    43,008    43,339 ops/sec
  compare: -1 1
  diff: 17.18%
  rme: 3.14%
Record > builds from an object of 1000
  Old:     3,042     3,176     3,322 ops/sec
  New:     3,684     3,705     3,726 ops/sec
  compare: -1 1
  diff: 16.66%
  rme: 3.13%
Record > update random using set() of 2
  Old:   769,171   789,297   810,504 ops/sec
  New:   910,913   919,106   927,448 ops/sec
  compare: -1 1
  diff: 16.44%
  rme: 1.95%
Record > update random using set() of 5
  Old:   629,090   664,019   703,055 ops/sec
  New:   782,093   790,853   799,812 ops/sec
  compare: -1 1
  diff: 19.1%
  rme: 4%
Record > update random using set() of 10
  Old:   590,417   639,684   697,922 ops/sec
  New:   733,209   750,661   768,964 ops/sec
  compare: -1 1
  diff: 17.34%
  rme: 6.13%
Record > update random using set() of 100
  Old:   598,119   620,831   645,336 ops/sec
  New:   694,918   705,448   716,302 ops/sec
  compare: -1 1
  diff: 13.62%
  rme: 2.89%
Record > update random using set() of 1000
  Old:   550,273   571,451   594,324 ops/sec
  New:   594,355   611,018   628,642 ops/sec
  compare: 0 0
  diff: 6.92%
  rme: 3.36%
Record > access random using get() of 2
  Old: 24,641,412 25,184,754 25,752,599 ops/sec
  New: 27,514,125 27,760,510 28,011,346 ops/sec
  compare: -1 1
  diff: 10.22%
  rme: 1.68%
Record > access random using get() of 5
  Old: 12,099,649 12,462,249 12,847,254 ops/sec
  New: 12,268,012 12,425,373 12,586,823 ops/sec
  compare: 0 0
  diff: -0.3%
  rme: 2.3%
Record > access random using get() of 10
  Old: 10,131,059 10,395,263 10,673,617 ops/sec
  New: 12,344,334 12,510,407 12,681,009 ops/sec
  compare: -1 1
  diff: 20.34%
  rme: 2.07%
Record > access random using get() of 100
  Old: 9,679,757 10,034,036 10,415,233 ops/sec
  New: 12,531,595 12,659,520 12,790,084 ops/sec
  compare: -1 1
  diff: 26.16%
  rme: 2.68%
Record > access random using get() of 1000
  Old: 6,315,479 6,622,707 6,961,354 ops/sec
  New: 7,340,271 7,418,516 7,498,446 ops/sec
  compare: -1 1
  diff: 12.01%
  rme: 3.52%
Record > access random using property of 2
  Old: 13,359,030 13,850,869 14,380,308 ops/sec
  New: 16,600,717 16,904,638 17,219,896 ops/sec
  compare: -1 1
  diff: 22.04%
  rme: 2.9%
Record > access random using property of 5
  Old: 7,608,052 7,804,156 8,010,636 ops/sec
  New: 8,018,946 8,228,375 8,449,036 ops/sec
  compare: -1 1
  diff: 5.43%
  rme: 2.59%
Record > access random using property of 10
  Old: 7,224,599 7,399,706 7,583,513 ops/sec
  New: 7,826,723 7,953,002 8,083,422 ops/sec
  compare: -1 1
  diff: 7.47%
  rme: 2.05%
Record > access random using property of 100
  Old: 7,161,255 7,391,461 7,636,960 ops/sec
  New: 7,941,935 8,093,714 8,251,408 ops/sec
  compare: -1 1
  diff: 9.5%
  rme: 2.64%
Record > access random using property of 1000
  Old: 5,849,451 6,077,507 6,324,066 ops/sec
  New: 6,787,915 6,823,917 6,860,304 ops/sec
  compare: -1 1
  diff: 12.28%
  rme: 2.78%
toJS List of 32
  Old:  Infinity  Infinity  Infinity ops/sec
  New:  Infinity  Infinity  Infinity ops/sec
  compare: 1 1
  diff: NaN%
  rme: 0%
toJS Map of 32
  Old:  Infinity  Infinity  Infinity ops/sec
  New:  Infinity  Infinity  Infinity ops/sec
  compare: 1 1
  diff: NaN%
  rme: 0%
all done

@jdeniau jdeniau merged commit d3cba24 into 6.x Jun 10, 2025
5 checks passed
@jdeniau jdeniau deleted the avoid-arguments branch June 10, 2025 21:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant