Sardonix
Новичок
Проблема оптимизации алгоритма шаблонизатора.
Я заморочился созданием шаблонизатора, и, после некоторого времени, выдал следующий алгоритм:
1)Шаблон index.view построчно считывается методом validate() класса pattern: в каждой строке ищутся псевдотеги, имеющие формат ###<содержимое_тега>###. Все найденные псевдотеги помещаются в массив.
2)Массив псевдотегов обрабатывается следующим образом: для каждого элемента проверяется, присутствует ли соответствующий модуль-обработчик(в моем случае это - класс), если присутствует - создается экземпляр соответствующего класса, который выполняет нужные действия и помещает результат в массив; вместе с результатом в массив помещается название модуля-обработчика, который этот результат сгенерировал.
3)Массив результатов передается в метод exchange() класа pattern и здесь происходит следующее: снова построчно считывается шаблон index.view, в каждой строке ищутся псевдотеги; когда псевдотег найден, он сравнивается с названиями модулей-обработчиков, переданных в массиве результатов - если псевдотег совпадает с названием модуля-обработчика, то он[псевдотег] заменяется на тот результат из массива результатов, который соответствует совпавшему имени модуля-обработчика.
Вся эта система работает, но первое же тестирование показало, что работает она чрезвычайно медленно. Я думаю, эта медлительность - результат моей неграмотности при создании алгоритма.
Нельзя ли этот алгоритм как-нибудь оптимизировать с целью повыщения скорости его работы?
Я заморочился созданием шаблонизатора, и, после некоторого времени, выдал следующий алгоритм:
1)Шаблон index.view построчно считывается методом validate() класса pattern: в каждой строке ищутся псевдотеги, имеющие формат ###<содержимое_тега>###. Все найденные псевдотеги помещаются в массив.
2)Массив псевдотегов обрабатывается следующим образом: для каждого элемента проверяется, присутствует ли соответствующий модуль-обработчик(в моем случае это - класс), если присутствует - создается экземпляр соответствующего класса, который выполняет нужные действия и помещает результат в массив; вместе с результатом в массив помещается название модуля-обработчика, который этот результат сгенерировал.
3)Массив результатов передается в метод exchange() класа pattern и здесь происходит следующее: снова построчно считывается шаблон index.view, в каждой строке ищутся псевдотеги; когда псевдотег найден, он сравнивается с названиями модулей-обработчиков, переданных в массиве результатов - если псевдотег совпадает с названием модуля-обработчика, то он[псевдотег] заменяется на тот результат из массива результатов, который соответствует совпавшему имени модуля-обработчика.
Вся эта система работает, но первое же тестирование показало, что работает она чрезвычайно медленно. Я думаю, эта медлительность - результат моей неграмотности при создании алгоритма.
Нельзя ли этот алгоритм как-нибудь оптимизировать с целью повыщения скорости его работы?
А если даже не убъешь, то покалечишь