Оптимизация работы со строкой-буфером
Оптимизирую парсер (html5 парсер). Парсер работает посимвольно.
Токенизер в своей работе активно использует строку-буфер для накопления значения, к примеру имени тега, или атрибута. То есть в процессе работы часто используется такой код:
this.buffer += char;
В Java (да и в других типизиированных языках) буфер создается так:
this.buffer = new char[1024];
То есть выделили участок памяти определенной длины и далее просто записываем в него символы последовательно.
В JS же по идее мы создали пустую строку нулевой длины:
this.buffer = "";
И при последующей записи символов место под строку всякий раз выделяется новое (как я думаю), что тормозит работу.
Вопрос: так ли это? Или интерпретатор сам оптимизирует этот процесс, выделяя под строку место с запасом?
И если ручная оптимизация требуется, то как ее лучше произвести?
Пытался заменить строку на массив определенной длины:
this.buffer = new Array(1024);
но это только существенно замедлило работу (не понимаю почему). И это еще без учета конвертации такого массива обратно в строку.
В общем кто знает, прошу помощи.
Скрипт нацелен на использование в NodeJS, хотя под браузеры тож рассчитан (но там оптимизация не нужна)
|