Конкатенация строк Javascript быстрее, чем в этом примере?

StackOverflow https://stackoverflow.com/questions/153381

  •  03-07-2019
  •  | 
  •  

Вопрос

Мне нужно объединить кучу строк в Javascript, и я ищу самый быстрый способ сделать это.Давайте предположим, что Javascript должен создать большой XML-"файл", который, естественно, состоит из множества маленьких строк.Итак, я придумал:

    var sbuffer = [];
    for (var idx=0; idx<10000; idx=idx+1) {
        sbuffer.push(‘<xmltag>Data comes here... bla... </xmltag>’);
    }
    // Now we "send" it to the browser...
    alert(sbuffer.join(”));

Не обращайте никакого внимания на цикл или другой "сложный" код, который создает пример.

Мой вопрос заключается в следующем:Для неизвестного количества строк, есть ли у вас более быстрый алгоритм / метод / идея объединить множество маленьких строк в огромную?

Это было полезно?

Решение

Изменение линии:

sbuffer.push(‘Data comes here... bla... ’);

Для

sbuffer[sbuffer.length] = ‘Data comes here... bla... ’;

даст вам прирост скорости на 5-50% (в зависимости от браузера, в IE - прирост будет самым высоким)

С уважением.

Другие советы

Этот вопрос Конкатенация строк JavaScript имеет принятый ответ, который ссылается на очень хорошее сравнение производительности конкатенации строк JavaScript.

Редактировать: Я бы подумал, что вы могли бы добиться немного большей производительности, используя устройство Даффа, как предлагается в статье.

Я думаю, что вы довольно близки к оптимуму.YMMV, большая скорость достигается или теряется в движке JavaScript хост-процесса (напримербраузер).

Я думаю, что перенос строк в массив и последующее объединение массива - это самый быстрый метод конкатенации строк в JavaScript.В этом есть некоторые подтверждающие доказательства дискуссия о W3C DOM противinnerHTML.Обратите внимание на разницу между результатами innerHTML 1 и innerHTML 2.

Насколько я знаю, ваш алгоритм хорош и известен как эффективное решение проблемы конкатенации строк.

Остерегайтесь IE bad garbage collector!Что вы предполагаете делать с вашим массивом после использования?Вероятно, он получит GC'd?

Вы можете получить преимущество при объединении с помощью joins, а затем потерять при последующей сборке.С другой стороны, если вы все время оставляете массив в области видимости и НЕ используете его повторно, это может быть хорошим решением.

Лично я хотел бы найти самое простое решение:просто для того, чтобы использовать оператор +=.

Возможно, вы наберете немного больше скорости, если буферизация.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top