ФорумПрограммированиеPHP для идиотов → Снова парсер шаблонов

Снова парсер шаблонов

  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 5 марта 2009 г. 3:16, спустя 6 минут 41 секунду

    что, великий пост?

    Жду злобных комментариев.

    ιιlllιlllι унц-унц
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 5 марта 2009 г. 4:17, спустя 1 час 1 минуту 10 секунд

    Жду злобных комментариев.

    Мало ждать, надо еще их осмысливать …
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 5 марта 2009 г. 7:59, спустя 3 часа 42 минуты 26 секунд

    я не телепат. что я должен осмысливать? мне какбы надо оправдываться, да? ок


    Мне бы не хотелось здесь следовать академической традиции и проводить подробный анализ других проектов. В любом случае, если вы научились эффективно использовать сам PHP в качестве шаблонного движка, обходясь без сторонних продуктов и библиотек — вы счастливый человек. Вы используете самый эффективный с точки зрения производительности подход, и если он вам удобен — придерживайтесь его. Если нет — попробуйте Blitz. Возможно, он вас приятно удивит ;)

    стопудов: родной код PHP самый быстрый. если надо бороться за каждую милисекунду… нефиг даже обсуждать.
    а если НЕ прижало — есть повод смотреть что-то еще. можно бороться за наглядность, за сокращение пути от дизайнерского макета до рабочего файла.

    вот насколько просто удается упростить описание страницы и надо обсудить:
    можно редактировать страницу в любом html-редакторе с подсветкой или (мать его) в WYSIWYG-редакторе?
    видна она в браузере как html без участия php?
    сколько вспомогательного кода придется добавить в контроллер между query() и template()? (надеюсь понятно о чем я)

    все накладные расходы только ради этого:
    {@item:name} или на выбор
    <!–@item:name–>
    ВМЕСТО
    <?php echo htmlescape($data['item]['name']) ?>[/b]

    если использовать нативный синтаксис " … {$data['item]['name']} … ", то функцию сюда не впихнуть, придется заранее экранировать в контроллере — это коряво и легко что-то просрать.
    если ради "оптимизации" шаблонизатора отказаться от ветвления и цикла, то придется переносить логику представления в контроллер. некоторые шаблонизаторы сделаны так, но это отступление от MVC. в итоге нет ни производительности, ни наглядности.

    если есть что возразить — говорите.
    ιιlllιlllι унц-унц
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 5 марта 2009 г. 8:18, спустя 18 минут 44 секунды

    Скажу завтра, ща уже убегаю от компа бухать )))))))))
    Для затравки, если не видел, то я уже подробно рассматривал этот вопрос
    http://pyha.ru/forum/topic/659.0
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 5 марта 2009 г. 8:45, спустя 26 минут 30 секунд

    Буду ждать, ночевать у компьютера :)
    Прочитал труды, риспект!

    Как мне кажется, у меня получилось сохранить простоту и дать необходимый набор возможностей. Мне очень НЕнравится, когда в шаблоне только обозначены секции, а логика включения секций лежит где-то вовне. Может быть так проще кешировать распарсенный шаблон. Но скорость — это ложная цель!!!
    Я уже повторяюсь :)
    ιιlllιlllι унц-унц
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 2:27, спустя 17 часов 42 минуты 40 секунд


    Мне очень НЕнравится, когда в шаблоне только обозначены секции, а логика включения секций лежит где-то вовне.
    А почему это плохо? Ты не одинок в этом мнении. Таких пыхо-авторитетов ) как md5 и vasa_c мне похоже тоже не удалось убедить, что это хорошо. Но пока я не услышал еще не одного аргумента, против тагого подхода. Хотя даже само по себе слово "шаблон" в противоположность слову "скрипт" предполагает именно отсутствие логики. Вся вторая часть моей статьи собственно и посвящена тому, чтоб на пальцах доказать это.


    Но скорость — это ложная цель!!!
    О нет!!! Как раз скорость это самое главное в веб-программировании. Ты наверно просто не сталкивался с ситуацией, когда твой замечательный, функциональный и красивый сайт мертво падает под нагрузкой. Хочется плакать и ты понимаешь, что все что ты напрограммировал - это детская ерунда, дело техники и времени, вот заставить теперь это держать нагрузку - тут нужен мега профессионализм. Впрочем этот лирический пассаж выходит за предел темы о шаблонизаторах, так к слову пришлось.


    Как мне кажется, у меня получилось сохранить простоту и дать необходимый набор возможностей.
    Насчет необходимого набора возможностей … я всем предлагаю реализовать тот простенький пример, который у меня в конце статьи.

    Насчет простоты … допустим я так и не убедил тебя и ты все-таки решил делить не на "скрипт и шаблон", а на "скрипт и скрипт вывода" )))).
    Но видишь ли, ты не сделал практически ничего, чего бы не умел делать "чистый  php", кроме небольшого упрощения синтаксиса экранирования спецсимволов. Для того чтобы труд назвать гордым словом "шаблонизатор" этого слишком мало. Нативный шаблон предоставляет всю гибкость и мощь php, смарти дает миллион полезных фич, которых нет в php + кеширование. А у тебя только "синтаксис экранирования спецсимволов", ради этого изобретать велосипед?

    ЗЫ. Кстати, цитата из документации Блитца насчет "счастливого человека" ИМХО тонкий стеб.
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 4:02, спустя 1 час 34 минуты 24 секунды

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

    1) В Сети по-настоящему нагруженных систем с сотнями тысяч и миллионами визитов в день найдется не так уж много. Ну может сотни таких. А вот блогов, сайтов-визиток и мелких магазинов миллионы. И они постоянно рождаются и пропадают, в отличие от мега-сайтов. Это основной хлеб для веб-разработчиков.

    2) Общепризнано, что дешевле наращивать аппаратную мощь, чем заниматься оптимизацией кода. До некоторого высокого предела. Это не значит, что на скорость можно совсем забить, но акценты смещаются. Можно экономить своё время, а не время процессора.

    3) Если время генерации страницы 0.03 сек и из них 0.028 едят запросы к БД, надо ли экономить на спичках?

    Но видишь ли, ты не сделал практически ничего, чего бы не умел делать "чистый  php", кроме небольшого упрощения синтаксиса экранирования спецсимволов.

    Да. Да. О, Даа! :) Я ставлю перед собой реальную цель и знаю цену. Никаких революций. По сравнению с голым PHP немного улучшить читаемость, чтобы его было удобно править дизайнеру, даже если этот дизайнер — я сам.
    Немного лучше разделить функции Контроллера и Представления. Чтобы этот кусок текста все-таки был "шаблоном", а не "скриптом вывода".

    Нативный шаблон предоставляет всю гибкость и мощь php, смарти дает миллион полезных фич, которых нет в php + кеширование.

    А не нужна вся мощь PHP чтобы реализовать "Представление" в чистом виде. Как ни крути — нам надо всего-лишь заполнить пробелы в заготовке. Смарти, смарти, вещь в себе. Кроме особенностей PHP и MySql мне надо знать еще философию смарти, планировать свое приложение так, чтобы Он мог развернуться во всю круть. Да пошел он в жопу, этот смарти :)

    Проще надо быть. Жизнь коротка, а вокруг столько прекрасного.

    ιιlllιlllι унц-унц
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 4:06, спустя 4 минуты 54 секунды

    Проще надо быть. Жизнь коротка, а вокруг столько прекрасного.
    +!
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • welder

    Сообщения: 2945 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 4:07, спустя 35 секунд

    а я чот срать хочу
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 4:08, спустя 1 минуту 14 секунд


    Проще надо быть. Жизнь коротка, а вокруг столько прекрасного.
    это да
    но именно поэтому я юзаю квики, а не твою хню)
    все умрут, а я изумруд
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 4:25, спустя 16 минут 15 секунд

    artoodetoo

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

    2. Я, как и ожидал, не услышал аргументов против подхода "логика в контроллере". По прежнему жду, гения который хоть что-то скажет на эту тему ….)))) И по моему ты так и не понял, что я подразумеваю под "скрипт вывода". Твой шаблон, смарти, чистый пхп - это все именно скрипты вывода, просто первые два это скриптовый язык, написанный на скриптовом языке.

    3. По поводу того, что тебе "за глаза хватает функционала" … ну что можно сказать … когда не хватит, приходи снова. Очевидно, что эта ситуация наступит, как только проект станет чуть сложней хоупаги "Фотки меня и моей собаки". ))))) Я могу только в сотый раз сослаться на мой пример, где показано, что шаблон это не только "заполнить дырки в заготовке".
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 7:16, спустя 2 часа 51 минуту 13 секунд

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


    Поэтому мощности мощностями, но от оптимизации не отвертеться.

    +1. НО: оптимизировать 90% затрат это одно, а 5% это другое.

    Я, как и ожидал, не услышал аргументов против подхода "логика в контроллере". По прежнему жду, гения который хоть что-то скажет на эту тему ….)))) И по моему ты так и не понял, что я подразумеваю под "скрипт вывода". Твой шаблон, смарти, чистый пхп - это все именно скрипты вывода, просто первые два это скриптовый язык, написанный на скриптовом языке.

    Пусть так. "Скрипт", который не может выполнить ничего кроме своей прямой задачи. Нет никаких выражений, нет возможности обратиться к данным кроме массива $data. Вся "логика" сводится к проверке наличия данных для вывода и к итерации этих данных. Принципиально. И вся эта "логика" видна без переключений куда-то еще,

    По поводу того, что тебе "за глаза хватает функционала" … ну что можно сказать … когда не хватит, приходи снова. Очевидно, что эта ситуация наступит, как только проект станет чуть сложней хоупаги "Фотки меня и моей собаки". ))))) Я могу только в сотый раз сослаться на мой пример, где показано, что шаблон это не только "заполнить дырки в заготовке".

    А что он должен делать КРОМЕ заполнения дырок? Я верю в MVC. Разделяй и властвуй.
    ιιlllιlllι унц-унц
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 7:31, спустя 15 минут 34 секунды


    Пусть так. "Скрипт", который не может выполнить ничего кроме своей прямой задачи. Нет никаких выражений, нет возможности обратиться к данным кроме массива $data. Вся "логика" сводится к проверке наличия данных для вывода и к итерации этих данных. Принципиально. И вся эта "логика" видна без переключений куда-то еще
    Это все понятно. Люди используют такой подход, значит он имеет права на жизнь. Я и сам его когда-то использовал. Но однажды попробовав отделить контроллер от шаблона понял, что это куда более практично. Упрощается и контроллер и шаблон.


    А что он должен делать КРОМЕ заполнения дырок?
    Наверно я не совсем понятно выразился. Я имел ввиду, что заполнение дырок это далеко не всегда набор линейных итераций и подстановок переменных. В итоге, для мало мальски сложного проекта шаблон-скрипт превращается в приличное спагетти.

  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 8:11, спустя 39 минут 40 секунд

    Дао учит нас ни к чему не относится слишком серьезно, даже к дао.

    Спасибо!
    ιιlllιlllι унц-унц
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 8:26, спустя 14 минут 42 секунды

    Да пожалуйста )))))))))))

Пожалуйста, авторизуйтесь, чтобы написать комментарий!