Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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, хотя под браузеры тож рассчитан (но там оптимизация не нужна)
Ответить с цитированием
  #2 (permalink)  
Старый 16.08.2013, 15:20
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от danik.js
Скрипт нацелен на использование в NodeJS, хотя под браузеры тож рассчитан (но там оптимизация не нужна)
посмотри http://nodejs.org/api/buffer.html , возможно, оно самое.
Ответить с цитированием
  #3 (permalink)  
Старый 16.08.2013, 16:22
Профессор
Отправить личное сообщение для mta88 Посмотреть профиль Найти все сообщения от mta88
 
Регистрация: 16.05.2013
Сообщений: 229

Цитата:
Скрипт нацелен на использование в NodeJS
буквально на днях google открыл код своего парсера html5 на C -- github.com/google/gumbo-parser
и кто-то уже начал ваять node-обертку для него -- github.com/karlwestin/node-gumbo-parser -- уже версия 0.0.3

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

Сообщение от mta88
вам придется делать так --->
Я бы давно так сделал, ибо Mozilla давным давно выложили исходники своего парсера на Java (они транслируют его в C++ для использования в Firefox): https://bitbucket.org/validator/htmlparser/

Как раз эти исходники (java) я и преобровываю в js.

Обертка мне не подходит. Во-первых, не удобно пользоваться внутренними компонентами (если вообще возможно), во-вторых, мне нужна возможность запуска в браузере. Emscripten - слишком жирный вариант.
В последствии я планирую предложить парсер в модуль jsdom, но для начала нужно увеличить до максимума производительность.

Сообщение от Яростный Меч
посмотри http://nodejs.org/api/buffer.html , возможно, оно самое.
Попробовал. Что-то совсем стало тормозить (общее время увеличилось в 5 раз)
Ответить с цитированием
  #5 (permalink)  
Старый 16.08.2013, 17:19
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Дзен-трансгуманист
Действительно, зачем тогда тут Array, бери сразу Uint16Array или Buffer. (хотя лично я юзал SlowBuffer напрямую).
Имелось ввиду что все должно работать и в браузере, но производительность требуется только в V8 (для node.js)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Легки фреймворки для работы с SVG general Events/DOM/Window 0 26.11.2011 20:06
Оптимизация работы галереи RaskolnikOFF Ваши сайты и скрипты 19 06.10.2010 20:41
Ищу библиотеки для работы с 3D Бобр Общие вопросы Javascript 3 06.08.2010 17:02
Поиск работы JavaScript staff-base Работа 9 12.03.2010 19:06
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31