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

В общем, использование циклов с make не очень "приукрашивает". Makefile - это целый язык, основанный на итерации и рекурсии, поэтому попытка сделать «дополнительную» итерацию внутри рецепта часто избыточна.

Если вам нужно что-то перебрать, большинство , особенно , когда это что-то - файлы, вы должны попытаться работать с make, используя преимущества его целевой / обязательной организации. Выше приведен алгоритм:

$(foreach  run:
    main.o  
    diff -q  

, который идеально подходит для поведения по умолчанию. Чтобы перевести это в make-файл, вы пишете правило, которое вызывает одну итерацию цикла, а затем используете предварительные условия для его запуска для нужных вам файлов. Примерно так:

TEST_INPUTS := $(wildcard test-*.txt)
.PHONY: autotest $(TEST_INPUTS)

autotest: $(TEST_INPUTS)

$(TEST_INPUTS): test-%.txt: program
        [111]lt; $@ test-out.txt
        diff -q test-out.txt out-$*.txt

Мало того, что это гораздо более похоже на дизайн, но у него есть и другие преимущества: например, вы можете запустить make test-provided.txt, и он будет запускать только этот один тест вместо всех тестов.

Вы должны использовать статических шаблонных правил здесь не нормальные шаблонные правила, потому что .PHONY цели не могут работать с шаблонными правилами.

7
задан Mark Biek 30 September 2008 в 14:57
поделиться

7 ответов

Изменение строки:

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

кому:

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

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

С уважением.

13
ответ дан 6 December 2019 в 05:56
поделиться

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

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

15
ответ дан 6 December 2019 в 05:56
поделиться

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

1
ответ дан 6 December 2019 в 05:56
поделиться

Остерегайтесь IE плохого сборщика "мусора"! Что Вы предполагаете, чтобы сделать с Вашим массивом после использования? Вероятно, это получит GC'd?

Можно получить perfornace при конкатенации с соединениями и затем проиграть на post-GC'ing. С другой стороны, если Вы оставляете массив в объеме все время и НЕ снова используете его, который может быть хорошим решением.

Лично я хотел бы simpliest решение: только использовать + = оператор.

0
ответ дан 6 December 2019 в 05:56
поделиться

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

1
ответ дан 6 December 2019 в 05:56
поделиться

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

1
ответ дан 6 December 2019 в 05:56
поделиться

Вы могли бы получить немного больше скорости путем буферизации.

0
ответ дан 6 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: