Показать сообщение отдельно
  #1 (permalink)  
Старый 16.08.2013, 10:12
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Оптимизация работы со строкой-буфером
Оптимизирую парсер (html5 парсер). Парсер работает посимвольно.
Токенизер в своей работе активно использует строку-буфер для накопления значения, к примеру имени тега, или атрибута. То есть в процессе работы часто используется такой код:

this.buffer += char;

В Java (да и в других типизиированных языках) буфер создается так:

this.buffer = new char[1024];

То есть выделили участок памяти определенной длины и далее просто записываем в него символы последовательно.

В JS же по идее мы создали пустую строку нулевой длины:
this.buffer = "";

И при последующей записи символов место под строку всякий раз выделяется новое (как я думаю), что тормозит работу.

Вопрос: так ли это? Или интерпретатор сам оптимизирует этот процесс, выделяя под строку место с запасом?

И если ручная оптимизация требуется, то как ее лучше произвести?
Пытался заменить строку на массив определенной длины:
this.buffer = new Array(1024);
но это только существенно замедлило работу (не понимаю почему). И это еще без учета конвертации такого массива обратно в строку.

В общем кто знает, прошу помощи.

Скрипт нацелен на использование в NodeJS, хотя под браузеры тож рассчитан (но там оптимизация не нужна)
Ответить с цитированием