самый быстрый способ разбить текстовый файл на пробелы в Javascript - PullRequest
3 голосов
/ 24 сентября 2011

Я пытаюсь выполнить некоторую обработку текста в браузере и пытаюсь получить грубое представление о том, буду ли я привязан к процессору или к вводу / выводу.Чтобы проверить скорость на стороне процессора в уравнении, я вижу, как быстро можно разделить фрагмент текста (~ 8,9 МБ - это Шерлок Холмс проекта Гутенберга *1004*, повторенный несколько раз) в Javascript один разэто в памяти.На данный момент я просто делаю:

pieces = theText.split(" ");

и выполняю его 100 раз и получаю среднее значение.На Macbook Pro i5 2011 года среднее разделение в Firefox занимает 92,81 мс, а в Chrome 237,27 мс.Таким образом, 1000 / 92,81 мс * 8,9 МБ = 95,8 МБ / с на процессоре, что, вероятно, немного быстрее, чем ввод-вывод жесткого диска, но ненамного.

Так что мой вопрос на самом деле состоит из трех частей:

  • Существуют ли альтернативы Javascript для split(), которые, как правило, быстрее выполняются при простой обработке текста (например, разбиение на пробелы, переносы строк и т. Д.)?
  • Являются ли слабые результаты ЦП Iя вижу здесь, скорее всего, из-за фундаментального совпадения строк / алгоритмических ограничений, или же выполнение Javascript просто медленное?
  • Если вы считаете, что Javascript, вероятно, является ограничивающим фактором, можете ли вы продемонстрировать существенно более высокую производительность на сопоставимом компьютере / сопоставимом тексте на любом другом языке программирования?

Редактировать: Я также подозреваю, что этоможно было бы ускорить работу с WebWorkers, хотя сейчас я в основном заинтересован в однопоточных подходах.

1 Ответ

2 голосов
/ 24 сентября 2011

Насколько я знаю, split с циклом for - это самый быстрый способ сделать простую обработку текста в JavaScript.Это быстрее, чем регулярное выражение, вот ссылка на jsperf http://jsperf.com/query-str-parsing-regex-vs-split/2

...