Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ar yra kokių nors kraštinių atvejų, kai concat gali būti greitesnis nei stūmimas


Ar yra kokių nors kraštinių atvejų, kai concat gali būti greitesnis nei stūmimas


„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