„push“ ir „concat“ naudojimo dideliuose masyvuose našumo pasekmės priklauso nuo kelių veiksnių:
Našumo standartai
1. Concat:
- Lėtas: sukuriamas naujas masyvas, dėl kurio gali sunaudoti daug atminties ir sulėtėti našumas, ypač naudojant didelius masyvus.
- Pavyzdys: sujungus du 10 000 dydžio masyvus, „concat“ atlieka 0,40 ops/sek., o „push“ – 378 ops/sek[1].
2. Stumti:
- Greitas: vietoje pakeičiamas pradinis masyvas, kuris paprastai yra greitesnis ir taupesnis atmintyje.
- Pavyzdys: perkeliant elementus iš vieno masyvo į kitą, „push“ veikia daug greičiau nei „concat“[1].
Nekintamumas ir valstybės valdymas
1. Nekintamumas:
- Concat: užtikrina nekintamumą sukuriant naują masyvą, kuris yra būtinas būsenos valdymui React ir kitose programose.
- Push: pakeičia pradinį masyvą, o tai gali sukelti netikėtą elgesį ir klaidas.
2. Valstybės valdymas:
- Reaguoti: naudoja nekintamumą, kad užtikrintų, jog būsenos pokyčiai būtų tinkamai aptikti ir iš naujo pateikiami. „Concat“ užtikrina nekintamumą, todėl jis tinkamas „React“ būsenos atnaujinimams.
Geriausia praktika
1. Naudokite „concat“ būsenos atnaujinimams:
- Atnaujindami būseną „React“, naudokite „concat“, kad užtikrintumėte nekintamumą ir išvengtumėte netikėto elgesio.
2. Naudokite „push“ našumui nustatyti:
- Jei naudojate našumui svarbias programas, naudokite „push“, kad pakeistumėte pradinį masyvą vietoje.
3. Venkite mutuojančios būsenos:
– Venkite tiesiogiai pakeisti būseną naudodami tokius metodus kaip „stumti“ arba „sujungti“. Vietoj to sukurkite naują būsenos objektą su atnaujintomis reikšmėmis.
Kraštiniai dėklai
1. Concat vs. Push for Large Arrays:
- Concat: gali būti greitesnis, jei paskirties masyve yra pakankamai vietos, kad tilptų nauji elementai, nekeičiant masyvo dydžio.
- Push: gali būti lėtesnis, jei reikia pakeisti paskirties masyvo dydį, kad būtų galima pritaikyti naujus elementus.
2. Kraštiniai dėklai su „taikyti“:
– Susijungti su „apply“: gali būti lėtesnis dėl papildomų išlaidų kuriant naują masyvą ir kopijuojant elementus.
- Paspauskite su „apply“: gali būti greitesnis, jei paskirties masyvas yra didelis ir nauji elementai pridedami pabaigoje.
Išvada
Apibendrinant, kalbant apie didelius masyvus, „push“ paprastai yra greitesnis ir efektyvesnis atmintyje, o „concat“ užtikrina nekintamumą. Pasirinkimas tarp dviejų metodų priklauso nuo konkrečių jūsų programos reikalavimų, įskaitant našumą, būsenos valdymą ir nekintamumą.
Citatos:[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