Výkonové důsledky použití `push` vs `concat` ve velkých polích závisí na několika faktorech:
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[1].
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`[1].
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://dev.to/uilicious/javascript-array-push-is-945x-faster-than-array-concat-1oki
[2] https://stackoverflow.com/questions/25339803/javascript-concat-vs-push-benchmark
[3] https://dev.to/uilicious/javascript-array-push-is-945x-faster-than-array-concat-1oki/comments
[4] https://news.ycombinator.com/item?id=19991339
[5] https://www.codementor.io/blog/react-optimization-5wiwjnf9hj