В JavaScript у меня есть цикл, который имеет много итераций, и на каждой итерации я создаю огромную строку со многими операторами +=
. Есть ли более эффективный способ создания строки? Я думал о создании динамического массива, где я продолжаю добавлять строки к нему, а затем делаю соединение. Может кто-нибудь объяснить и привести пример самого быстрого способа сделать это?
Самый эффективный способ объединения строк в JavaScript?
Ответ 1
Похоже, что на основе JSPerf использование +=
является самым быстрым методом, хотя и не обязательно в каждом браузере.
Для построения строк в DOM, кажется лучше, чтобы сначала соединить строку, а затем добавить в DOM, а затем итеративно добавить это в дом. Вы должны проверить свой собственный случай.
(Спасибо @zAlbee за исправление)
Ответ 2
У меня нет комментариев о самой конкатенации, но я хотел бы отметить, что предложение @Jakub Hampl:
Для построения строк в DOM, в некоторых случаях было бы лучше итеративно добавить DOM, а затем добавить огромную строку сразу.
неверно, потому что он основан на ошибочном тесте. Этот тест никогда не добавляется в DOM.
Этот фиксированный тест показывает, что создание строки сразу перед рендерингом намного, МНОГО быстрее. Это даже не конкурс.
(Извините, это отдельный ответ, но пока у меня недостаточно ответов, чтобы прокомментировать ответы.)
Ответ 3
Прошло три года с момента ответа на этот вопрос, но я все равно дам свой ответ:)
Собственно, принятый ответ не совсем корректен. Тест Jakub использует жестко кодированную строку, которая позволяет JS-движку оптимизировать выполнение кода (Google V8 действительно хорош в этом!). Но как только вы используете полностью случайные строки (вот JSPerf), тогда конкатенация строк будет на втором месте.
Ответ 4
Вы также можете сделать строку concat с литералами шаблона. Я обновил тесты JSPerf других авторов, чтобы включить его.
for (var res = '', i = 0; i < data.length; i++) {
res = '${res}${data[i]}';
}