[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Шаблонизатор с регулярным выражением
Quieteroks
Доброго времени суток.

Больше вопрос, нежели проблема.
Для своего проекта написал маленький шаблонизатор в две функции. Большего мне не нужно.
Работает через preg_replace_callback, в один вызов регулярки.
Обрабатываемая строка содержит ключ и значение через точку {c.lang_constant}
Колбэк функция содержит свич на поиск по ключу с возвратом обработанного значения.

Так вот вопрос, не сильно это тормозит работу скрипта?
Может каждый ключ лучше обрабатывать отдельным выражением с вызовом конкретной колбэк функции?
Или быстрее будет если одна функция с preg_match_all и дальнейшая обработка массива?



Спустя 2 часа, 32 минуты, 28 секунд (15.01.2012 - 12:07) Игорь_Vasinsky написал(а):
я, допустим, получаю шаблон (TPL файл) в переменную и провожу замену меток в шаблоне с помощью strtr()

Спустя 1 день, 1 час, 32 минуты, 1 секунда (16.01.2012 - 13:39) Quieteroks написал(а):
Этот вариант дает слишком мало функционала...
Если мне нужно языковую константу вставить в шаблон, то ее нужно по сути скопировать в массив. Или сразу писать все одним массивом. И чем больше в этом массиве элементов, тем дольше скрипт будет выполняться. А поиск по регулярке дает не плохой результат настройки колбэк функции. Тут и константу можно вызвать и элемент массива и прочее.

Вот только не знаю, как лучше, одной большой функцией обрабатывать ключи или несколько раз проверять шаблон регулярками...

Спустя 33 минуты, 26 секунд (16.01.2012 - 14:12) Invis1ble написал(а):
Quieteroks
установи xdebug, там вроде есть возможности профилирования

Спустя 8 минут, 58 секунд (16.01.2012 - 14:21) Quieteroks написал(а):
Invis1ble
Как то странно, использовать дебагер для подобных целей... Если вылезет какая то ошибка он ее распечатает всем, кому будет интересно...

Ребят, я вас не прошу дать рекомендации мне шаблонизатор,
меня просто интересует вопрос быстродействие одного или нескольких регулярок в одной функции с применением одной или нескольких колбэк функций.

Так то меня результат моего скрипта пока устраивает, но если я вдруг решу еще раздуть ключи для шаблонизатора, то не возрастет ли в разы время обработки большой колбэк функции?

Спустя 4 минуты, 53 секунды (16.01.2012 - 14:26) killer8080 написал(а):
Цитата (Quieteroks @ 16.01.2012 - 13:21)
меня просто интересует вопрос быстродействие одного или нескольких регулярок в одной функции с применением одной или нескольких колбэк функций.

А смысл в нескольких регулярках? Какого вида у тебя шаблон?

Спустя 6 минут, 37 секунд (16.01.2012 - 14:33) Quieteroks написал(а):
killer8080
preg_replace_callback('/\{(.*)\.(.*)\}/Ui', "tplFunction", $content);


Регулярка простейшая. Но смущает, что в "ключи" которые в первом кармане, могут увеличиться в размере, для подстановки не только констант или содержимого массива, а допустим для выполнения функций. Тогда колбэк функция при повторном выполнении не будет ли грузить систему?

Спустя 13 минут, 35 секунд (16.01.2012 - 14:46) killer8080 написал(а):
Quieteroks
упрости регулярку
'#\{(.*)\}#iU'

а разбор ключа делай уже в колбеке. Чем проще регулярка, тем быстрей работает. Главное если понадобится расширить функционал ключей, не нужно будет шаманить с шаблоном, все изменения будут только в функции.

Спустя 11 минут, 11 секунд (16.01.2012 - 14:57) Quieteroks написал(а):
killer8080
Думаешь деление на два кармана сложнее для регулярки?
В функции и так все максимально просто. Находим ключ, а все что во втором кармане, можно уже в функции дополнительно обработать exploderом.

Зато данная регулярка не пускает в функцию значения без ключа.
Что мне кажется чем то лучше.

Так все таки просто функцию продолжать расширять, вместо нескольких регулярок?
А в функции сделать еще один вызов функций, дабы сама колбэк функция была поменьше?

Спустя 7 минут, 15 секунд (16.01.2012 - 15:05) killer8080 написал(а):
Цитата (Quieteroks @ 16.01.2012 - 13:57)
Зато данная регулярка не пускает в функцию значения без ключа.

А откуда в тпл-ке возьмется текст вида {key}? В html-е ничего такого быть не должно.

Цитата (Quieteroks @ 16.01.2012 - 13:57)
Так все таки просто функцию продолжать расширять, вместо нескольких регулярок?

думаю да.
Цитата (Quieteroks @ 16.01.2012 - 13:57)
А в функции сделать еще один вызов функций, дабы сама колбэк функция была поменьше?

зачем?

Спустя 38 минут, 10 секунд (16.01.2012 - 15:43) Quieteroks написал(а):
killer8080
У меня двойная обработка шаблона идет. Первая обработка шаблон страницы, вторая обработка шаблона сайта, т.е. если в страница к примеру имя пользователя будет содержать нечно
}|{ORA
то это может несколько сбить шаблонизатор... Так что я еще думаю запрещать подобные символы в именах...

Спасибо за приятный диалог, буду при необходмости кормить функцию.

Спустя 7 минут, 20 секунд (16.01.2012 - 15:50) killer8080 написал(а):
Цитата (Quieteroks @ 16.01.2012 - 14:43)
пользователя будет содержать нечно
}|{ORA

оно не подпадает под шаблон, который я показывал smile.gif

Спустя 2 минуты, 6 секунд (16.01.2012 - 15:52) Invis1ble написал(а):
Цитата
Как то странно, использовать дебагер для подобных целей... Если вылезет какая то ошибка он ее распечатает всем, кому будет интересно...

я не о дебаге, там есть фича - можно профилировать скрипты на время и ресурсы и писать в отдельный файл. А чтоб не показывались ошибки юзай ini_set('display_errors', 'Off');

Спустя 1 час, 3 минуты, 53 секунды (16.01.2012 - 16:56) Quieteroks написал(а):
killer8080
Попадает.
Вот пример.
<p><b>}|{ORA</b> приехал из Москвы</p>{c.lang_cheto}


По идее все что после символа { Будет в строке поиска. А это у нас :
ORA</b> приехал из Москвы</p>{c.lang_cheto


Ну эт в теории. :)

Invis1ble
Эт можно, а если провайдер не даст править конфиг... Я ж не притендую пока на собственный сервер... Есть конечно много способов отлавливать ошибки и не показывать их пользователю, но суть дебагера как раз в отлове ошибок. ИМХО это не есть хорошо шаблонизатор так писать.

Спустя 6 минут, 57 секунд (16.01.2012 - 17:03) killer8080 написал(а):
Quieteroks
можно ограничить набор символов
'#\{([^\{\}\s]+)\}#iU'
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.