Paměťové důsledky použití `push` vs `concat` v polích JavaScriptu závisí na několika faktorech:
Využití paměti
1. Concat:
- Využití paměti: Vytvoří nové pole, což může vést ke značnému využití paměti, zejména u velkých polí.
- Příklad: Zřetězení dvou polí o velikosti 10 000 každé, „concat“ pracuje rychlostí 0,40 ops/s, zatímco „push“ pracuje rychlostí 378 ops/s.
2. Push:
- Využití paměti: Upravuje původní pole na místě, což je obecně rychlejší a efektivnější z hlediska paměti.
- Příklad: Přesouvání prvků z jednoho pole do druhého, `push` funguje výrazně rychleji než `concat`.
Srovnání výkonu
1. Concat:
- Slow: Vytvoří nové pole, což může vést k významnému využití paměti a pomalejšímu výkonu, zejména u velkých polí.
- Příklad: Zřetězení dvou polí o velikosti 10 000 každé, „concat“ pracuje rychlostí 0,40 ops/s, zatímco „push“ pracuje rychlostí 378 ops/s.
2. Push:
- Fast: Upravuje původní pole na místě, které je obecně rychlejší a efektivnější z hlediska paměti.
- Příklad: Přesouvání prvků z jednoho pole do druhého, `push` funguje výrazně rychleji než `concat`.
Neměnnost a řízení stavu
1. Neměnnost:
- Concat: Zajišťuje neměnnost vytvořením nového pole, které je nezbytné pro správu stavu v Reactu a dalších aplikacích.
- Push: Mutuje původní pole, což může vést k neočekávanému chování a chybám.
2. Správa státu:
- Reagovat: Používá neměnnost k zajištění správné detekce a opětovného vykreslení změn stavu. `concat` zajišťuje neměnnost, takže je vhodný pro aktualizace stavu v Reactu.
Doporučené postupy
1. **Pro aktualizace stavu použijte `concat`:
- Při aktualizaci stavu v Reactu použijte `concat`, abyste zajistili neměnnost a zabránili neočekávanému chování.
2. Použijte `push` pro výkon:
- U aplikací kritických pro výkon použijte `push` k úpravě původního pole na místě.
3. Vyhněte se mutujícímu stavu:
- Vyhněte se přímé mutaci stavu pomocí metod jako `push` nebo `splice`. Místo toho vytvořte nový objekt stavu s aktualizovanými hodnotami.
Pouzdra Edge
1. Concat vs. Push pro velká pole:
- Concat: Může být rychlejší, pokud má cílové pole dostatek místa pro umístění nových prvků, aniž by bylo nutné měnit velikost pole.
- Push: Může být pomalejší, pokud je třeba změnit velikost cílového pole tak, aby vyhovovalo novým prvkům.
2. Edge Cases s `použít`:
- Concat with `apply`: Může být pomalejší kvůli dodatečné režii při vytváření nového pole a kopírování prvků.
- Push with `apply`: Může být rychlejší, pokud je cílové pole velké a nové prvky jsou přidány na konec.
Závěr
Stručně řečeno, pokud jde o velká pole, `push` je obecně rychlejší a paměťově efektivnější, zatímco `concat` zajišťuje neměnnost. Volba mezi těmito dvěma metodami závisí na konkrétních požadavcích vaší aplikace, včetně výkonu, řízení stavu a neměnnosti.
Citace:[1] https://codeburst.io/jsnoob-push-vs-concat-basics-and-performance-comparison-7a4b55242fa9?gi=a762849790fe
[2] https://dev.to/uilicious/javascript-array-push-is-945x-faster-than-array-concat-1oki
[3] https://dev.to/uilicious/javascript-array-push-is-945x-faster-than-array-concat-1oki/comments
[4] https://phuoc.ng/collection/this-vs-that/concat-vs-push/
[5] https://stackoverflow.com/questions/25339803/javascript-concat-vs-push-benchmark