Я пытался реорганизовать «бит» кода, который я ранее разработал. По сути, проект был моим ответом на то, что я не знал, как эффективно использовать XSLT, поэтому я разработал систему преобразования XML в PHP. Программа читает теги XML-файла и делает что-то вроде этого, чтобы преобразовать его в HTML:
private function getTemplate(...) {
switch ($nodeName) {
case "a" :
// code here to generate a link tag
break;
case "box" :
// code here to generate the divs and whatnot to create a box
break;
case "ref" :
// look up an external reference file and include a bibliography
break;
default :
// do the default thing
}
}
Все это прекрасно работало, за исключением того, что у меня было 26 веток на мой коммутатор, и этот блок коммутатора содержал более 1000 строк кода. Излишне говорить, что это немного усложнило обслуживание.
Что я сделал сейчас, так это извлек код каждой ветви в свой собственный файл (с именем "a.php", "box.php", "ref.php" ...) и include
, которые файл каждый раз:
if (file_exists("templates/$nodeName.php")) {
include "templates/$nodeName.php";
} else {
// do the default thing
}
Опять же, это работает, но сравнительный анализ показывает, что он замедлил время обработки на 50%. Я предполагаю, что это потому, что сейчас выполняется до 4000 include
с.
То, что я рассматривал, состояло в том, чтобы поместить код для каждого шаблона в функцию, а если функция не была объявлена, включить файл, а затем запустить функцию - единственная проблема в том, что существующий код имеет были написаны в объеме исходной функции, используя $this
и т. д.
Учитывая, что этот код не запускается в реальном времени (например, он просто обрабатывает XML в статические HTML-файлы, которые хранятся - это не делается на лету), у вас есть какой-нибудь совет для меня здесь?