Leistung
Heute 2020.12.04 führe ich Tests auf MacOs HighSierra 10.13.6 mit Chrome v86, Safari v13.1.2 und Firefox v83 für ausgewählte Lösungen durch.
Ergebnisse
Für alle Browser
- In-Place-Lösung basierend auf
length
(B) ist am schnellsten für kleine Arrays, und in Firefox für große zu und für Chrome und Safari ist schnell
- In-Place-Lösung basierend auf
push
(A) ist am schnellsten für große Arrays in Chrome und Safari, und schnell für Firefox und kleine Arrays
- In-Place-Lösung C ist langsam für große Arrays und mittelschnell für kleine
- Die Lösungen D und E sind bei großen Arrays langsam.
- Nicht-platzierte Lösungen E, F und D (auf Firefox) sind langsam für kleine Arrays
![enter image description here]()
Einzelheiten
Ich führe 2 Testfälle durch:
- für ein kleines Array mit 10 Elementen - Sie können es ausführen AQUÍ
- für große Arrays mit 1M Elementen - Sie können es ausführen AQUÍ
Der folgende Ausschnitt zeigt die Unterschiede zwischen den Lösungen A , B , C , D , E , F
PS: Antwort B wurde gelöscht - aber eigentlich war es die erste Antwort, die diese Technik verwendet. Wenn Sie also Zugang haben, um sie zu sehen, klicken Sie bitte auf "Wiederherstellen".
// https://stackoverflow.com/a/6254088/860099
function A(a,o) {
a.push(o);
return a;
}
// https://stackoverflow.com/a/47506893/860099
function B(a,o) {
a[a.length] = o;
return a;
}
// https://stackoverflow.com/a/6254088/860099
function C(a,o) {
return a.concat(o);
}
// https://stackoverflow.com/a/50933891/860099
function D(a,o) {
return [...a,o];
}
// https://stackoverflow.com/a/42428064/860099
function E(a,o) {
const frozenObj = Object.freeze(o);
return Object.freeze(a.concat(frozenObj));
}
// https://stackoverflow.com/a/6254088/860099
function F(a,o) {
a.unshift(o);
return a;
}
// -------
// TEST
// -------
[A,B,C,D,E,F].map(f=> {
console.log(`${f.name} ${JSON.stringify(f([1,2],{}))}`)
})
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"> </script>
This shippet only presents functions used in performance tests - it not perform tests itself!
Und hier sind Beispielergebnisse für Chrom
![enter image description here]()