Najskuteczniejszy sposób łączenia łańcuchów w JavaScript?

W JavaScript mam pętlę, która ma wiele iteracji, a w każdej iteracji tworzę ogromny ciąg znaków z wieloma operatorami +=. Czy istnieje bardziej efektywny sposób tworzenia ciągu znaków? Myślałem o stworzeniu dynamicznej tablicy, gdzie ciągle dodaję do niej ciągi, a następnie wykonuję połączenie. Czy ktoś może wyjaśnić i podać przykład najszybszego sposobu na to?

Author: Dave Jarvis, 2013-05-22

3 answers

Wydaje się oparte na benchmarkach w JSPerf , że użycie += jest najszybszą metodą, choć niekoniecznie w każdej przeglądarce.

Do budowania łańcuchów w DOM, wydaje się być lepiej najpierw połączyć łańcuch, a następnie dodać go do DOM, a następnie iteracyjnie dodać go do dom. Powinieneś jednak porównać swoją sprawę.

(dzięki @ zAlbee za korektę)

 97
Author: Jakub Hampl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-24 09:20:00

Nie mam komentarza do samej konkatenacji, ale chciałbym zaznaczyć, że sugestia @ Jakub Hampl:

Do budowania łańcuchów w DOM, w niektórych przypadkach może być lepiej iteracyjnie dodać do DOM, a następnie dodać ogromny łańcuch na raz.

Jest źle, ponieważ opiera się na błędnym teście. Ten test nigdy nie pasuje do DOM.

Ten naprawiony test pokazuje, że tworzenie łańcucha na raz przed renderowaniem jest dużo, dużo szybciej. To nawet nie jest konkurs.

(Sorry to jest osobna odpowiedź, ale nie mam jeszcze dość rep, aby komentować odpowiedzi.)

 52
Author: zAlbee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-15 05:55:22

Minęły trzy lata od odpowiedzi na to pytanie, ale i tak udzielę odpowiedzi:)

Właściwie, przyjęta odpowiedź nie jest w pełni poprawna. Test Jakuba wykorzystuje hardcoded string, który pozwala js engine zoptymalizować wykonanie kodu (Google V8 jest naprawdę dobry w tym wszystkim!). Ale jak tylko użyjesz całkowicie losowych łańcuchów ( tutaj jest JSPerf ), to konkatenacja łańcuchów będzie na drugim miejscu.

 13
Author: Volodymyr Usarskyy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-09 17:32:48