Tüüpilise JavaScripti kasutamise korral on meetod "tõuke" üldiselt kiirem kui `Contat" massiivi elementide lisamisel. Siiski on servajuhtumeid ja konkreetseid kontekste, kus „Concat” võib olla kiirem või soodsam. Nende mõistmine nõuab üksikasjalikku uurimist sisemiste tööde, kasutusharjumuste, mälu jaotamise käitumise ja mõlema meetodi konkreetsete kasutusjuhtumite kohta.
`Push` lisab olemasolevale massiivile elemente, laiendades seda kohapeal. See muudab algse massiivi, lisades uusi elemente. Kuna "Push" töötab olemasoleva massiivi kallal, väldib see tavaliselt uute massiivide ja täiendava mälu loomist. `Push’ võib aktsepteerida mitut argumenti ja kui seda kasutatakse koos `Application` abil (nagu` massiray.prototype.push.push.apply (arr1, arr2) `), saab see tõhusalt lisada kõik ühe massiivi elemendid teisele. See mutatsiooni lähenemisviis on üldiselt väga kiire, kuna see väldib loomist ja kopeerimist.
Teisest küljest ei muteeri "Concat" algset massiivi, vaid tagastab uue massiivi, mis sisaldab algse massiivi kombineeritud elemente ja lisatud väärtusi. Kuna `Concat" loob uue massiivi, hõlmab see uue mälu eraldamist ja elementide kopeerimist algsetest massiividest sellele uuele massiivile. See täiendav üldkulud muudavad tavaliselt `Contict" aeglasemaks kui "Push". Paljud võrdlusalused näitavad, et paljudel tüüpilistel stsenaariumidel on mitu suurusjärku kiirem kui `concat”, eriti kui kaasatud on suured massiivid või paljude ühinemisoperatsioonid.
Sellele vaatamata võib servaljuhtumid, kus `Concat võib olla kiirem, kiirem, hõlmavad järgmist:
1. Kui algset massiivi hiljem ei kasutata:
Kui algset massiivi pole enam vaja ja eelistatakse muutumatut toimingut, võib `Contict” olla kõrgetasemeliste optimeerimiste korral mõnikord tõhusam, kuna see väldib massiivi suuruste või sisemise ümberliigutuse potentsiaalset üldkulu, mis võib juhtuda korduvate toimingutega. Sellistel juhtudel, eriti V8 mootori optimeerimiste korral, võib värske massiivi loomine kasu saada rohkem ennustatavatest mälumustritest.
2. Väikeste massiivide või väheste elementide kasutamisel:
Väga väikeste massiivide puhul või kui lisatavate elementide arv on minimaalne, võib kiiruse erinevus push ja `concat'i vahel olla tühine. Mõnikord võib sisemiste optimeerimiste tõttu olla nii kiire või pisut kiirem, kuna helistamise üldkulud `taotleda` tõukele "võib tasakaalustada" Contat "kopeerimiskulusid.
3. muutumatud programmeerimisharjumused:
Mõne funktsionaalse programmeerimise või muutumatute andmestruktuuri stsenaariumide korral eelistatakse `Concat`, kuna see ei muda algset massiivi. Kuigi see ei ole puhas kiiruskiirus, võib see võimaldada JavaScripti mootorite paremaid optimeerimisi, mis soodustavad muutumatust, näiteks struktuurilise jagamise või koopia-kirjutamise strateegiaid, eriti nende paradigmade ümber kujundatud raamatukogudes. Nendes kontekstides, ehkki mitte tüüpiline JavaScripti kasutamine, võivad spetsialiseerunud rakendused muuta liitmise kiiremini kui mutatsioonipõhised tõuked.
4. Mitme massiivi ühendamine korraga:
`Concat" võib võtta mitu argumenti (massiivid või elemendid) ja teha lamedat toimingut automaatselt. Paljude massiivide ühendamisel ühel operatsioonil võib "Concat" vältida mitmeid kõnesid, et teatud JavaScripti mootorites peatada ja vähendada üldkulusid. See võib olla kiirem kui järjestikused kõnekõned, kus iga kõne käivitab üle pea, mis on seotud argumentide levitamise või massiivi sisemise pikkusega värskendustega.
5. Funktsioonide kõne vältimine üldkulude abil `Push.Apply":
Kui massiivi levitamiseks kasutatakse `Push` -ga, võib see käivitada JavaScripti mootori piirangud argumentide arvule (varieerudes brauserites ja V8 versioonides). Kui massiivi suurus ületab seda piiri, võib `Push.Apply` jõudlus dramaatiliselt ebaõnnestuda või halveneda. "Concat" ei ole selliseid piiranguid, mis potentsiaalselt muudavad selle eriti suurte ühenduste jaoks kiiremaks või usaldusväärsemaks.
6. Vähem objektide jaotus mõnes JavaScripti mootoris `Concat'i jaoks:
Mõned JavaScripti mootorid võivad oma sisemälu haldamise strateegiate osas konkreetset kasutuselevõtu all optimeerida. Näiteks võivad mootorid optimeerida „Contat”, kasutades koopiapuhvreid või sisestades sisemassiivi puhvreid, vähendades sellega teatud tingimustes suurte massiivide kopeerimise kulusid.
7. Kasutage spetsiaalsetes andmestruktuurides või trükitud massiivides:
Tüüpiga massiivide või spetsiaalsete javascrictiga objektidega, näiteks muutumatute vektoritega (mõnes raamatukogus) töötades võidakse pärast "Contat" modelleeritud liitmismeetodeid kavandada logaritmilise keerukuse ühendamiseks ilma massiive täielikult kopeerimata. Sellistel juhtudel võimaldab aluseks olev andmestruktuuri disain siduda lihtsaid toiminguid, mis muteerivad andmestruktuure otse.
8. prügikogu ja mälurõhu kaalutlused:
Raske mälusurve või sagedase suurusega olukordades võib push põhjustada sagedamini ümberpaigutamist ja kopeerimist aluseks olevas massiivi puhvris, käivitades prügikogumistsüklid. `Concat` toodab üks kord uue massiivi, võimaldades potentsiaalselt prognoositavamaid prügikogumisharjumusi, mis võib aeg -ajalt tulemusi üldiselt parandada.
9. Koodi lihtsus suuremate ühendustega:
Ehkki see pole otsest kiirusega seotud, on `Contict" mitme massiivi või elementide ühendamiseks süntaktiliselt lihtsam ilma leviku või silmuseta. See võib vähendada juhuslikku üldkulu kasutajakoodist, mis võib vähendada väikeseid jõudluse erinevusi.
10. JavaScripti mootorite jõudluse erinevused ja versioon:
Erinevad JavaScripti mootorid (V8 Chrome'is, Spidermonkey Firefoxis, JavaScriptcore safaris) optimeerivad neid toiminguid erinevalt. Teatud mootori versioonid võisid konkreetsete mustrite või massiivi suuruste jaoks seletamatult optimeerida, mis näitab neil ajutistel juhtudel, mis näitavad harvaesinevates tingimustes "concat" kiiremini.
11. Mutatsiooni kõrvaltoimete vältimine:
Concat'i kasutamine aitab vältida mutatsiooni, mis mõnes silumis- või arenduskeskkonnas võib vähendada üldkulusid, mis on põhjustatud massiivi muudatuste jälgimisest või käivitamast raamistike reaktiivseid värskendusi. See kaudne kiirendamine võib muuta konkreetsete rakenduse tasemel stsenaariumide korral „cocat”.
12. Mälu joondamine ja jaotamise strateegiad:
Mõnikord optimeerivad mootorid mälu eraldisi, mis on loodud massiivide jaoks, mis põhjustavad sujuvamaks kopeerimise või puhverjagamise, mis võib olla kiirem kui korduvad järkjärgulised `tõukeoperatsioonid, mis suurust suurust suurust suurust suurust on.
Kokkuvõtlikult võib öelda, et "tõuke" edestab tüüpilistes jõudluse võrdlusalustes tavaliselt "Concat", servajuhtumid. Nende hulka kuuluvad stsenaariumid, mis nõuavad muutumatust, tohutud massiivid, mis ületavad argumendipiiranguid, mitmehariduse ühendusi, konkreetseid andmestruktuure ja JavaScripti mootoripõhiseid optimeerimisi. Iga juhtum sõltub suuresti andmete olemusest, mootori sisemisest rakendamisest ja programmeerimise kontekstist. Nende nüansside mõistmine aitab arendajatel valida nende konkreetsete vajaduste jaoks optimeeritud õige meetodi.
Levinud jõudlusnõuanded, mis eelistavad massiivi mutatsiooni ja ühendamise jaoks push, kui jõudlus on kriitilisel ajal paljudel juhtudel, kuid see pole absoluutne. Koodi selguse, muutumatuse või mootori konkreetsete optimeerimiste tagamiseks võib teatud servatingimustes olla kiirem või eelistatav. See peensus on JavaScripti massiivi toimingute mõistmise oluline osa arenenud tasemel.