«оглядываясь назад» производительность

10

У меня есть код, использующий (looking-back … (line-beginning-position)). Строка документа looking-backгласит, что эту функцию лучше избегать из-за медлительности. Мне интересно, будет ли следующий подход быстрее?

(save-excursion
  (goto-char (line-beginning-position))
  (looking-at regexp stuff))
Geradlus_RU
источник
Это будет быстрее. Но это не эквивалентный код.
abo-abo
@ abo-abo, да, это не так. Но в моем случае я считаю, что могу looking-atлегко представить версию. Спасибо.
Geradlus_RU
2
Самая большая проблема с производительностью при просмотре - когда у него нет предела (или предела, который находится далеко). Если вы (with-temp-buffer (insert (make-string 10000 ?x)) (looking-back "y"))подумаете, то увидите, что это очень быстро. Теперь ".*y"вместо этого измените регулярное выражение : оно невыносимо медленно, хотя читателю ясно, что оно никогда не сможет сравниться.
YoungFrog

Ответы:

9

Определенно. Вы особенно выиграете, если вы просто хотите проверить char-beforeили выполнить поиск литеральной строки в обратном направлении. И если вы должны использовать, looking-backпопробуйте использовать LIMITаргумент, если это возможно.

Смотрите Emacs bug # 17284 для примера.

Нарисовалась
источник