A „push” vs „concat” nagy tömbökben történő használatának teljesítménykövetkezményei több tényezőtől függenek:
Teljesítménymutatók
1. Concat:
- Lassú: Új tömböt hoz létre, ami jelentős memóriahasználathoz és lassabb teljesítményhez vezethet, különösen nagy tömbök esetén.
- Példa: Két, egyenként 10 000 méretű tömb összefűzése esetén a „concat” 0,40 művelet/mp, míg a „push” 378 művelet/sec[1].
2. Nyomja:
- Gyors: Helyben módosítja az eredeti tömböt, ami általában gyorsabb és memóriahatékonyabb.
- Példa: Az elemek egyik tömbből a másikba tolásakor a "push" lényegesen gyorsabban működik, mint a "concat"[1].
Megváltozhatatlanság és államirányítás
1. Megváltozhatatlanság:
- Concat: Egy új tömb létrehozásával biztosítja a megváltoztathatatlanságot, ami elengedhetetlen a React és más alkalmazások állapotkezeléséhez.
- Push: Mutálja az eredeti tömböt, ami váratlan viselkedéshez és hibákhoz vezethet.
2. Államirányítás:
- React: Változatlanságot használ annak biztosítására, hogy az állapotváltozásokat megfelelően észleljék és újra rendereljék. A `concat` biztosítja a változatlanságot, így alkalmas a React állapotfrissítésére.
Legjobb gyakorlatok
1. Használja a „concat” kifejezést az állapotfrissítésekhez:
- A React állapotának frissítésekor használja a `concat' parancsot, hogy biztosítsa a változatlanságot és elkerülje a váratlan viselkedést.
2. Használja a "push" kifejezést a teljesítményhez:
- A teljesítménykritikus alkalmazásokhoz használja a "push" parancsot az eredeti tömb helyben történő módosításához.
3. A mutáló állapot elkerülése:
- Kerülje az állapot közvetlen mutációját olyan módszerekkel, mint a "push" vagy "splice". Ehelyett hozzon létre egy új állapotobjektumot a frissített értékekkel.
Edge-tokok
1. Concat vs. Push for Large Arrays:
- Concat: Gyorsabb lehet, ha a céltömbnek elegendő helye van az új elemek befogadásához anélkül, hogy át kellene méretezni a tömböt.
- Push: Lassabb lehet, ha a céltömböt át kell méretezni az új elemekhez.
2. Edge-tokok az "alkalmaz" lehetőséggel:
- Concat with `apply`: Lassabb lehet az új tömb létrehozásának és az elemek másolásának többletköltsége miatt.
- Push with `apply`: Gyorsabb lehet, ha a céltömb nagy, és az új elemek a végére kerülnek hozzáadásra.
Következtetés
Összefoglalva, ha nagy tömbökről van szó, a `push` általában gyorsabb és memóriahatékonyabb, míg a `concat` biztosítja a megváltoztathatatlanságot. A két módszer közötti választás az alkalmazás speciális követelményeitől függ, ideértve a teljesítményt, az állapotkezelést és a megváltoztathatatlanságot.
Idézetek:[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