Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с оптимизацией анализатора логов (https://javascript.ru/forum/misc/55321-pomogite-s-optimizaciejj-analizatora-logov.html)

switch001 23.04.2015 08:20

Помогите с оптимизацией анализатора логов
 
Добрый день, товарищи!

Решил таки запилить анализатор логов к нашей системе, делал в лоб. Анализатор состоит из двух частей: фронтэнд на JS, бэкэнд на PHP. Бэкэнд простой - десяток строк, читает заданное количество строк с конца файла лога и выдает во фронтэнд построчно в формате JSON. Там его подбирает скрипт, разбивает строки на интересующие части для последующей подсветки синтаксиса и фильтрации. Поясню на картинке:



т.е. строку разбиваем регулярными выражениями на SPANы, каждому - свой стиль. По производительности особых проблем в этом нету, 200 килобайтный блок обрабатывается пару секунд. Но и это не нужно т.к. лог будет загружаться небольшими порциями в 10..100 строк в процессе работы системы.

Проблема в другом. В верхней части видны кнопки, при нажатии на них выключаем или включаем отбражение каких либо SPAN либо строк целиком. Сделано все влоб:
function toggleDate() 
	{
		$('.rgDate').hide();
	}
	
	function toggleError() 
	{
		$('.rgError').toggle('');
	}
		
	function toggleWarning() 
	{
		$('.rgWarning').toggle('');
	}
		
	function toggleNotice() 
	{
		$('.rgNotice').toggle('');
	}
		
	function toggleDebug() 
	{
		$('.rgDebug').toggle('');
	}
		
	function toggleVerbose() 
	{
		$('.rgVerbose').toggle('');
	}


Однако даже на 200К файле выключение, например, поля с датой занимает секунд 30. Процессор причем у меня довольно мощный, 2.5 ггц Coreduo и 6 Гб памяти.

Посоветуйте, пожалуйста, методы оптимизации чтобы хотя бы 1..2 мегабайтный лог работал с приемлемой скоростью. Я думал может стоит хранить строки в массиве, а при выводе переформатировать и фильтровать все что надо. Изменились условия - снова фильтруем и форматируем. Но это как-то не православно чтоли ;)

tsigel 23.04.2015 10:55

сделайте странички и ограничение скажем в 100 записей на странице и все будет летать. Вы всеравно не сможете смотреть сразу на все строки своего мегобайтного лога.

switch001 23.04.2015 11:18

Так не подойдет. Там один звонок может растянуться во времени, за это время насыпется еще стопицот записей. Плюс поиск нужен полнотекстовый, браузерный. В общем 100 строк, даже 1000 это зачастую маловато.

switch001 23.04.2015 20:49

Сделал так: сохраняю все строки в массив, перед выводом хелпер очищаю, потом прохожу регэкспами массив и выдаю в DOM уже готовый HTML. так работает в сто раз быстрее. На фильтрацию уходит примерно от одной до трех секунд пот 2500 строк. Но хочется еще больше скорости ;)

laimas 24.04.2015 12:11

В смысле, в колонках таблиц либо убираются, либо добавляются элементы SPAN?

tsigel 24.04.2015 21:45

Уберите регулярку и будет быстрее.

switch001 24.04.2015 23:23

Цитата:

Сообщение от laimas (Сообщение 368037)
В смысле, в колонках таблиц либо убираются, либо добавляются элементы SPAN?

Таблиц нет, есть только DIV - строка целиком, и SPAN - элемент строки. И то и это с нужными стилями. Фильтровал просто JQuery запросами по стилям, получалось медленно. Перестраивать DOM заново в нужном виде гораздо быстрее.


Цитата:

Сообщение от tsigel
Уберите регулярку и будет быстрее.

без регулярных выражений - никак. Слишком сложно сделать процедурную обработку. В процессе работы это мешать не будет: лог будет подгружаться порциями по 10..100 строк, которые сразу же будут обрабатываться, на таких объемах это быстро.

Но мне не нравится что приходится читать логи. Хочу напрямую присоединяться к сервису и получать данные. Но как сделать это - ума не приложу. Через stdout|stdin врядли получится.

laimas 25.04.2015 06:25

Таблиц нет, есть только DIV - строка целиком, и SPAN - элемент строки.

И в тоже время нужно табличное представление данных с управлением по колонкам. Если построить структуру так, что каждая колонка это родитель, то менять стиль нужно будет только у родителя.

switch001 25.04.2015 07:16

Цитата:

Сообщение от laimas (Сообщение 368140)
Таблиц нет, есть только DIV - строка целиком, и SPAN - элемент строки.

И в тоже время нужно табличное представление данных с управлением по колонкам. Если построить структуру так, что каждая колонка это родитель, то менять стиль нужно будет только у родителя.

табличной структуры нет, этож лог, там вообще что угодно может содержаться.

laimas 25.04.2015 07:58

Я думал сервер отдает структуру логов (разобранную рег. выражением), то есть согласно кнопкам - Date, Verbose, ... То есть это и есть колонки, тогда это табличные данные в любом случае.


Часовой пояс GMT +3, время: 12:16.