За последние 24 часа нас посетили 8776 программистов и 485 роботов. Сейчас ищут 263 программиста ...

Шаблонизатор на C

Тема в разделе "Решения, алгоритмы", создана пользователем Danilka, 14 ноя 2007.

  1. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Danilka, у меня в подписи ссылка на фреймворк с компилирующим/кеширующим шаблонизатором на PHP. Все просто летает, а возможности такие, что "голому" ПХП или Блицу и не снились.
     
  2. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Hight
    Статический HTML файл кешировать смысла нет - он годится только для конкретного запроса, а для другого посетителя этот же файл будет уже другим. (Подразумевается, что мы не говорим о полностью статических сайтах - для таких шаблонизаторы нафиг не нужны, достаточно SSI.) Кешироваться должна некая промежуточная структура, которую не нужно парсить на предмет специальных тегов и структур, но и которая сохраняет динамику страницы. При обработке запроса эта структура извлекается из кеша, в нее подставляются данные и получается готовый HTML.
     
  3. Danilka

    Danilka Активный пользователь

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    Ладно, а как тогда определить то место, когда полуготовую страницу уже нужно кешировать?

    Пример:
    Есть объект $TPL. В него, по мере выполнения скрипта передаются разные параметры. Будь то переменные или массивы или ещё что-нибудь. Потом, или сначала, Говорится какой файл нужно парсить ($TPL -> load_tpl( 'main.tpl' ); ). После всей этой процедуры вызывается echo $TPL -> parce(); Теперь вопрос: Когда темлейт узнает, что нужно закешировать или достать из кэша страницу?
    Я вижу только два возможных варианта:
    1. "Кешируется", хотя это не кеш. Только подготовленный шаблон. То есть исполняются шаблонные команды, к примеру подгрузка других файлов. main.tpl = " {{load_tpl="header.tpl"}} Main page content with template variables here {{load_tpl="footer.tpl"}}". Такой вариант ничего, но сомнителе. Будет ле кеширующий запрос в бд быстрее подгрузки. Зависит от реализации. Да и плюс к тому, сбор шаблонов в один есть даже в том же блитзе.
    2. Перед началом парсинга, шаблон берёт все переденные параметры, собирает в кучу, сортирует и с помощью хеш функции генерирует хеш ключ, по которому уже ищет или вставляет в бд страницу. Этот подход на мой взгляд тоже ничего, но если ты знаешь за ранее, что на странице будет что-то часто меняться, то же время. То бесполезные кеширующие запросы будут только всё тормозить и забивать бд в пустую.
    Так и как кешируются динамические страницы?
     
  4. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Danilka
    Намек: а зачем напрямую вызывать у шаблонизатора метод parse()? Ведь парсинг шаблона - это самая медленная стадия его обработки. Давай вызывать метод, скажем, process(), передавая ему имя файла с исходным шаблоном, а уж он сам будет решать, надо ли этот файл брать и парсить его с нуля, или можно где-то подцепить уже обработанный и закешированный вариант.

    И заодно вопрос: Блиц каждый раз будет заново читать и обрабатывать все шаблоны, необходимые для сборки текущей страницы? Если да, то это нерационально (мягко говоря).
     
  5. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    0
    Адрес:
    леноград
    >На той странице, на которую, ты дал ссыль написано, что не используется на страницах с гет пост запросами и использованием сессий.

    где это там такое написано? о_0
     
  6. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.154
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Никак, кэширование - это чушь. Шаблонизаторы типа смарти и http://tony2001.phpclub.net/doc/php-templates/ru/ тоже чушь.
     
  7. Danilka

    Danilka Активный пользователь

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    Да.
    Ладно, тогда расскажи алгаритм, как кешировальщик узнает где и какую страницу взять?
    Откудова он знает что переменную с временем можно заменить в уже прокешированной странице в последнюю очередь? А до того, как заменит, что её нужно закешировать без этой переменной, если в кеше не нашлось такой страницы?
     
  8. Danilka

    Danilka Активный пользователь

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    Hight, а куда же тогда по-твоему совать дизайн, в код?
     
  9. Danilka

    Danilka Активный пользователь

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    dark-demon, тот же вопрос, что и Dagdamor. Откудова кеш будет знать, что я использую в скрипте?
    Допустим, что все условия открытия страницы совпадают. К примеру вот эта ветка форума. Всегда одинаковые переменные гет, пост, сессии. А в бд добавлена запись. Как кешер должен узнать, что она там появилась? И что ему открывать, файл или перепарсить заного?
     
  10. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.154
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Нет, в файлы. Мне нравятся файлы с расширением tpl. Удобно и приятно. Простенький шаблонизатор-парсилка всяких {чотатам} на значения с функцией выборки шаблонов в буфер решает все проблемы. Быстрее только ракеты летают.
     
  11. Danilka

    Danilka Активный пользователь

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    Вобщем тут об этом и говорим. Тот же блитз именно этим и занимается. Только в отличие от "простенькой шаблонизатор-парсилки" работает намного быстрее.
    И тему собственно создал с целью замены самописного класса парсинга на пыхе, чем-нибудь более быстродейственным.
     
  12. Anonymous

    Anonymous Guest

    Вы наркоманы, блин...
    Почитайте про Conditional Get, для начала. Это базовая весчь в HTTP. Реализовать ее не сложно.
    Потом читайте про кеширование php в виде опкодов, и про то, как это можно кешировать в память.
    Не совсем... шаблонизация - это идеология. Это отделение кода от предствления. И поверьте, иногда разумнее пожертвовать лишними 10 баксами в месяц на доп. память на сервере, чем отказыватся от шаблонизации на различных движках. Это не теория, это практика.
     
  13. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.154
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Приложения надо проектировать так, чтобы не прикручивать к ним всяких монстров типа смарти. Как говорится - php - лучший шаблонизатор.

    upd. нафиг я влез в это обсуждение... ухожу.
     
  14. Anonymous

    Anonymous Guest

    Про conditional GET - http://softwaremaniacs.org/blog/2007/08 ... get-bites/

    Дык. Инструмент - это лишь инструмент.
     
  15. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    0
    Адрес:
    леноград
    Danilka, APC кэширует байткод. будь то программа на языке программирования php или же шаблон на языке шаблонов php. то, что получится в результате подстановки динамических данных он естественно не кэширует.
     
  16. Danilka

    Danilka Активный пользователь

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    Conditional Get, не плохо и действительно необходимо в некоторых случаях.
    Но опять же, распростроняется только на одного юзера. А кеш со стороны сервера действует на всех.
    В идеальном варианте было бы применить оба случая.
     
  17. Danilka

    Danilka Активный пользователь

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    dark-demon, что-то я не понял всё-равно как работает.
     
  18. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    0
    Адрес:
    леноград
    просто тупо транслирует шаблон в байткод виртуальной машины
     
  19. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    0
    Адрес:
    леноград
    бугога, ещё одно доказательство кривизны джанги. я поражаюсь его терпеню...
     
  20. Anonymous

    Anonymous Guest

    dark-demon, идеальных инструментов нету ) были б - все бы только ими и пользовались )
     
  21. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    0
    Адрес:
    леноград
    [уходя писать идеальный инструмент] кстати, у меня новая блаж - труъ язык программирования являющийся помесью ады, питона, яваскрипта и хмл ^_^
     
  22. Anonymous

    Anonymous Guest

    прошли годы, и dark-demon придумал SilverLight =)
     
  23. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    0
    Адрес:
    леноград
  24. Danilka

    Danilka Активный пользователь

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    Ну и что, может кто-нибудь по человечески объяснит, как можно закешировать страницу, зависящую от постоянно изменяющейся БД?
    Или как шаблонизатор должен узнать о том, какую переменную нужно в кеш кидать, а какую заменять после достования из кэша?
     
  25. Anonymous

    Anonymous Guest

    Ну и что, может кто-нибудь по человечески объяснит, зачем кешировать страницу, которая динамически изменяется?