Оптимизация работы со строкой-буфером
Оптимизирую парсер (html5 парсер). Парсер работает посимвольно.
Токенизер в своей работе активно использует строку-буфер для накопления значения, к примеру имени тега, или атрибута. То есть в процессе работы часто используется такой код: this.buffer += char; В Java (да и в других типизиированных языках) буфер создается так: this.buffer = new char[1024]; То есть выделили участок памяти определенной длины и далее просто записываем в него символы последовательно. В JS же по идее мы создали пустую строку нулевой длины: this.buffer = ""; И при последующей записи символов место под строку всякий раз выделяется новое (как я думаю), что тормозит работу. Вопрос: так ли это? Или интерпретатор сам оптимизирует этот процесс, выделяя под строку место с запасом? И если ручная оптимизация требуется, то как ее лучше произвести? Пытался заменить строку на массив определенной длины: this.buffer = new Array(1024); но это только существенно замедлило работу (не понимаю почему). И это еще без учета конвертации такого массива обратно в строку. В общем кто знает, прошу помощи. Скрипт нацелен на использование в NodeJS, хотя под браузеры тож рассчитан (но там оптимизация не нужна) |
Цитата:
|
Цитата:
и кто-то уже начал ваять node-обертку для него -- github.com/karlwestin/node-gumbo-parser -- уже версия 0.0.3 :) вам придется делать так ---> :cray: :cray: :cray: |
Цитата:
Как раз эти исходники (java) я и преобровываю в js. Обертка мне не подходит. Во-первых, не удобно пользоваться внутренними компонентами (если вообще возможно), во-вторых, мне нужна возможность запуска в браузере. Emscripten - слишком жирный вариант. В последствии я планирую предложить парсер в модуль jsdom, но для начала нужно увеличить до максимума производительность. Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 16:30. |