Iced Drupal

Прислано: axel

чт, 31/03/2005 - 19:06

Время от времени поднимаются темы о скорости Drupal в частности и PHP-скриптов вообще. Да, динамическая генерация страниц ресурсы само собой отъедает. Так ли уж нужна она всегда? Предостаточно типов контента заносится одиножды в базу и далее только считывается. Удобно хранить это в HTML и не морочиться с предварительной генерацией контента скриптами. С другой стороны отказываться от удобств CMS по динамическому созданию и структуризации контента тоже не хочется. Можно ли это совместить?

Представим, что контент формируется через вебинтерфейс, сохраняется как положено в базе, но помимо этого генерируются готовые HTML-страницы, которые пишутся на диск. Далее они отдаются напрямую вебсервером, минуя уровень скриптов. За документом в базу лезем только при его редактировании. Идея никак не нова и давно уже используется рядом систем (навскидку вспоминается cmsmadesimple, qps). Подумалось, почему не сделать этого в Drupal? Встречаем "свежемороженный" Iced Drupal :)

На данный момент есть идея - и желание совместить с ней Drupal, что на первом этапе удалось. Модуль static для Drupal 4.5 позволяет создавать тип нодов "static". Указываем путь на диске, желаемую тему оформления - на выходе получается файл с прегенерённой страницей уже в HTML. Разумеется "замораживая" контент таким образом вылазит ряд ограничений - не получится динамически менять тему оформления, неэффективны становятся информационные блоки, которые требуют частого обновления контента, нет возможности выдачи разного контента для пользователей с разными привилегиями и т.п. Но для простых сайтов требующих просто удобств в ведении контента (его рубрикации и быстром оформлении) - это может быть удобным вариантом. Либо напротив можно такие страницы создавать для тяжело нагруженных сайтов, где важно быстро и корректно отдать контент и красивые фичи его динамичности отходят на второй план.

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

Установка: распаковать файл в директорию модулей, создать таблицу в базе по приложенному sql-скрипту, приложить патчи командами (из корневой директории друпал-сайта):

$ patch -p0 <bootstrap.patch
$ patch -p0 <block-module.patch

Чтобы была возможность задания своих имён для файлов следует включить модуль path. В корневой директории друпала создать папку html и выдать на неё права 777. Какие ошибки вылезут - пишите. Строго не судите - это пока преальфа :)

Прикрепленный файлРазмер
static.tar.gz2.19 кб
iced-1.png7.87 кб

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано kiev1 в пт, 01/04/2005 - 06:44.

там птичка в друпале есть "кеширование" - ее нажать надо. в sql хранить более правильно так как она масштабироватся умеет


Опубликовано tango в пт, 01/04/2005 - 14:57.

Надо пробовать. У меня есть проект небольшого сайта, где не требуется частое обновление контента. Если клиент созреет, попробую обязательно.


Опубликовано axel в пт, 01/04/2005 - 16:02.

Это разные задачи. Понятно, что с кешированием быстрее (выключать его вообще не рекомендуется в друпале) - количество запросов снижается на порядки (для анонимных пользователей). Но есть задачи где хранение в БД вообще нафиг не сдалось. Но нужна категоризация контента и т.п. Тут же можно делать "статико-динамический" сайт - часть контента генерится в динамике (форум, комментарии), а доки к примеру - лежат файлами на диске.

Кластеризацию контента можно организовать и средствами вебсерверов, на БД тут свет клином не сошёлся. Но если быть ближе к реальности и к ситуации на дешёвых вирт. хостингах (или под все свои проекты кластеры юзаем?), то какое там нафиг масштабирование, когда даж количество коннектов к базе сильно ограничено. Статический сайт тут вполне логичное решение.

--
Axel,
www.axel.drupal.ru


Опубликовано tango в пт, 01/04/2005 - 18:53.

Модуль не качается. Ошибка. 502 Bad Gateway.


Опубликовано axel в сб, 02/04/2005 - 07:52.

Это ошибка хостинга - нагрузка большая была в это время. Попробуй ещё раз.

--
Axel,
www.axel.drupal.ru


Опубликовано axel в сб, 02/04/2005 - 14:18.

Выяснил подробности у хостера. Говорят, временное явление, они тестируют новые настройки для сервере, вылазят разные глюки.

--
Axel,
www.axel.drupal.ru


Опубликовано tango в сб, 02/04/2005 - 15:42.

Поробую в скором времени обязательно


Опубликовано axel в сб, 02/04/2005 - 16:32.

Возможные варианты развития модуля:

- генерация статики для выбранных типов нодов (а не только собственного типа static)
- импорт статических сайтов в друпал с сохранением их структуры (друпал получается как надстройка над статическим сайтом, позволяющая изменять его страницы)
- переработка основного движка для более полной поддержки статики: хуки на изменения блоков, генерация прямых ссылок на html-страницы, минуя друпаловский механизм обработки urlов

--
Axel,
www.axel.drupal.ru


Опубликовано B.X в сб, 02/04/2005 - 16:35.

Разработчики лучше бы действительно, озаботились GZIP-компрессией и убрали "всё лишнее" из кода (лишний текст, сократили бы число запросов к БД)... а это всё костыли...

Но если нет ничего лучше, то это конечно, тоже вариант. Во всяком случае, "лучше, чем ничего"... "как там создатель Линукса говорил"... хех... а вообще, по моему, можно было бы реализовать другой вариант... который, по моему реализован в большинстве форумов (Invision) и тд...

Зачем создавать реальный html файл? Ведь на его создание опять же требуются время и ресурсы. Не проще ли изменить систему кеширования документов? Она явно какая-то странная...


Опубликовано B.X в сб, 02/04/2005 - 16:59.

"Но есть задачи где хранение в БД вообще нафиг не сдалось. Но нужна категоризация контента и т.п."

Такое есть... Например, перевод движка... зачем он в БД, я не понимаю... или хелпы - тоже самое... Вот если бы это всё удалить из Drupal, добавить поддержку разных кодировок ещё, то цены бы ему не было...


Опубликовано axel в сб, 02/04/2005 - 17:14.

Какие такие ресурсы тратятся на создание файла? Ведь это происходит только при его создании/редактировании пользователем. Далее мы имеем просто html-файл на диске, который отдаётся не движком, а сразу вебсервером. Это практически полностью статический сайт. Тут даже количество запросов на создание страницы не играет роли.

Для примера см. как работает такая система http://cmsmadesimple.org
Но она весьма примитивна в плане структуризации контента, с друпалом же мы получаем такую же скорость + мощные механизмы структуризации.

Причём благодаря гибкости и продуманности архитектуры друпала реализовать это удалось почти без изменений ядра системы - пара мелких незначительных патчиков в пару строк роли не играют.

--
Axel,
www.axel.drupal.ru


Опубликовано B.X в сб, 02/04/2005 - 17:25.

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

если бы их можно было решить... тогда, почему бы и нет? например, почему для всех этих действий вышеперечисленных, не иметь в БД всё-таки "нестатичный" документ, а? будет просто два документа... один выдаётся везде "где это возможно" (статичный), а другой "там где первый выдать никак нельзя" (динамичный)... ну и с темами надо что-то придумать...

например... темы ведь используют css? В таком случае, жаль, что в Drupal нет его стандартизации... жаль, что "все кому не лень" вводят новые теги, новые id и классы для тегов... гораздо лучше был бы стандартный css (а в разных темах просто меняли бы значения классов и идентификаторов) , в этом случае, этот модуль был бы значительно эффективнее. Ну и модулем его было бы хорошо оформить...

PS! А как продвигается работа над Drupal Wiki и Aqua Forum?


Опубликовано tango в сб, 02/04/2005 - 17:27.

Да ничего странного тут нет. Просто идет речь о небольших сайтах, в которых в принципе, CMS нужна для удобного и оперативного изменения контента. Пример: http://stas.akifa-oniks.ru
Сильно не критикуйте, это проект и контента ваще нет :-)
Но на данном ресурсе такая фича нужна, помоему.


Опубликовано B.X в сб, 02/04/2005 - 17:31.

"Пример: http://stas.akifa-oniks.ru"

для версии 4.5 есть модуль гостевой книги... по-моему, хороший модуль...


Опубликовано tango в сб, 02/04/2005 - 17:45.

это уже 4.6


Опубликовано axel в сб, 02/04/2005 - 19:10.

Цитата:

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

Интересно, а как ты всё это вообще хочешь получить от статической страницы? И рыбку съесть и на ёлку залезть... Идея модуля - максимум скорости. Остальным ради этого можно пожертвовать. В тех случаях когда пожертвовать нельзя, надо переходить к динамической генерации контента.

Подобие тем кстати вполне можно организовать сменными CSS. Одна тема, к ней разные CSS, которые выбирает пользователь. В друпале этому ничего не мешает, и даже есть ведь темы, которые так работают.

Цитата:

не иметь в БД всё-таки "нестатичный" документ, а? будет просто два документа... один выдаётся везде "где это возможно" (статичный), а другой "там где первый выдать никак нельзя" (динамичный)... ну и с темами надо что-то придумать...

Примерно так модуль и работает. Документ хранится в БД, копия на диске. Для teasers выдаётся из БД, html-файл только когда выдаётся полная версия документа. Тут в общем разные вариации возможны.

Цитата:

например... темы ведь используют css? В таком случае, жаль, что в Drupal нет его стандартизации... жаль, что "все кому не лень" вводят новые теги, новые id и классы для тегов... гораздо лучше был бы стандартный css (а в разных темах просто меняли бы значения классов и идентификаторов) , в этом случае, этот модуль был бы значительно эффективнее. Ну и модулем его было бы хорошо оформить...

Вообще-то это и есть модуль, если ты не заметил :) Зачем нужны доп. ограничения с CSS я не понял. Это как если бы с темами завязаться на один единственный шаблонный движок. Кстати, в друпале есть уже один общий дефолтный CSS и то от него стараются избавиться - drupal.css который.

Цитата:

PS! А как продвигается работа над Drupal Wiki и Aqua Forum?

Своим чередом :)

--
Axel,
www.axel.drupal.ru


Опубликовано Shaker в сб, 16/04/2005 - 17:55.

вопрос:
$ patch -p0 bootstrap.patch
$ patch -p0 block-module.patch
как это из-под Денвера сделать?


Опубликовано Vano в пн, 18/04/2005 - 07:26.

patch - утилитка из unix'а
если ты под виндой поставь Cygwin и там поставь patch
и будет вам счастье...


Опубликовано Nick в пн, 18/04/2005 - 11:22.

! http://drupal.ru/node/252
--
USU-Lug http://usu-lug.org.ru


Опубликовано Shaker в вс, 01/05/2005 - 21:32.

видимо надо патчить (как? см. выше) - у меня было то же самое


Опубликовано axel в вт, 03/05/2005 - 16:22.

Хм, действительно :\ Не нужен этот патч, модуль block не содержит изменений. Достаточно bootstrap.inc.

Буду адаптировать модуль к 4.6 - ещё раз проверю как что работает.

--
Axel,
www.axel.drupal.ru


Опубликовано barmaley в пн, 11/07/2005 - 09:02.

http://www.hivemindz.com/project/staticHTML

искал одно а нашел вот это :) может в разрезе данного обсуждения это кому-то будет интересно


Опубликовано Okhan в пн, 08/05/2006 - 02:03.

Axel:"Буду адаптировать модуль к 4.6 - ещё раз проверю как что работает".

Как дела с этим модулем? Есть вариант для 4.6? Или уже на 4.7 замахнулся?


Опубликовано axel в пн, 08/05/2006 - 16:29.

В модуле не было надобности, и слишком много ограничений вылазит в такой модели, разработка застыла в том виде как описано в этом анонсе. Однако ввиду появления AJAX в Drupal 4.7 появляются перспективы - статическая генерация страниц + динамическая подгрузка отдельных блоков. Буду пробовать под 4.7.

--
Axel,
Darcs-репозиторий разработок для Drupal


Опубликовано Okhan в вт, 09/05/2006 - 02:22.

Это позволит увеличить производительность?


Опубликовано axel в чт, 11/05/2006 - 08:18.

Перевод под 4.7 позволит увеличить гибкость этого решения. А сам модуль конечно повышает производительность сайта, ведь html отдаётся вебсервером вообще без участия php.

--
Axel,
Darcs-репозиторий разработок для Drupal


Опубликовано B.X в сб, 03/06/2006 - 23:58.

Было бы интересно... да и вообще создавать "полные копии" сайта в html - очень заманчивая идея...


Опубликовано Aaron в сб, 31/03/2007 - 00:59.

есть обновления/изменения?


Опубликовано B.X в сб, 31/03/2007 - 01:04.

есть модуль Boost, но он что-то остановился в развитии...


Опубликовано PVasili в сб, 31/03/2007 - 09:25.

Народ интересуется: зачем нужен изват, и почему нельзя руками создать чистый html, а в drupal ссылки на этот файл? При грамотной верстке html за 5 мин делается..======================================================
Документация,Дизайн,Переводы


Опубликовано marazmus в сб, 31/03/2007 - 06:06.

Если сайт за тыщу страниц, поглядел бы я на того грамотного верстальщика... :)

Нет смысла спорить и оспаривать - всегда найдется задача, которую кому-то конкретно в какой-то конкретной ситуации нужно решить. Если решение выходит за рамки частного, в нашем случае появляется модуль :) - делимся с другими, вдруг кому-то еще нужно. Это на самом деле лучше, чем кучка народу, решающая за других, что изврат, а что нет.


Опубликовано Dan в сб, 31/03/2007 - 11:33.

Вот допустим есть блок "Последние статьи". Содержимое блока обновляется, допустим, каждые два часа. Остальное время - статичный блок. Ты его будешь сам менять каждые два часа?
Понятно, что система его кэширует, но чтобы взять из кэша, она обращается в БД. Модуль избавляет систему от этого обращения, заставляя вмечто запроса просто вставить кусок html.


Опубликовано B.X в сб, 31/03/2007 - 21:59.

да, жаль, что Аксель этот модуль до конца не довёл...
это нужная вещь, ведь отдача простых html-файлов намного проще и она всегда работает...

а тем, кому не нужны извращения, лучше работать с блокнотом и чистым html сразу... и вики им тоже не нужна, поскольку - это тоже изврат...


Опубликовано kiev1 в вс, 01/04/2007 - 01:21.

вообще-то в друпал мне кажется что так и работает кеш - блоки отдельно, странички отдельно, ну разьве что в mysql это лежит, ну и что, разница-то не такая большая - один запрос к базе или один запрос за файлом.


Опубликовано B.X в вс, 01/04/2007 - 01:35.

разница большая, потому что запрос к файлу статический и обрабатывается веб-сервером, который может выдерживать очень большие нагрузки... а динамические операции - обрабатываются сервером баз данных и при длительных операциях совершаемых большим количеством людей (или скриптами, которые недостаточно протестированы) такой сервер неминуемо "упадёт" и сайт будет недоступен...


Опубликовано kiev1 в вс, 01/04/2007 - 02:31.

так - то оно так, но mysql тоже "заточена" что-бы кешировать в памяти и Dries проводил эксперименты оправданности такого способа - разница была очень маленькая, по этому он сделал вывод что нет смысла выностить небольшой кусочек кеша в отдельные файлы:

http://drupal.org/node/45414#comment-67318

"I ran some benchmarks and the average page request time goes down from 140ms (database caching) to 139ms (filesystem caching). That is 0.7% improvement. This confirms my statements: the design is flawed and the complexity is not worth the gain.
(Serving the exact same file as a static page without intervention of PHP, takes 2.10ms on average.)"


Опубликовано B.X в вс, 01/04/2007 - 03:05.

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


Опубликовано axel в вс, 01/04/2007 - 07:25.

Сейчас то же самое делает модуль boost. Очень хорошо, что у автора нашлись силы довести идею до конца.

--
Администратор сайта «Drupal — Россия»
на вопросы по Drupal отвечаю только на форумах, не пишите в почту и приватом!


Опубликовано kiev1 в вс, 01/04/2007 - 15:15.

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


Опубликовано axel в вс, 01/04/2007 - 16:54.

Нет. Время хранения в кеше для всех страниц общее. Это мне тоже не нравится. Какие-то страницы можно перегенерить часто, а какие-то хотелось бы положить один раз в кеш и забыть про них на месяца.

--
Администратор сайта «Drupal — Россия»
на вопросы по Drupal отвечаю только на форумах, не пишите в почту и приватом!


Опубликовано kiev1 в вс, 01/04/2007 - 18:05.

так вроде выясняли что в стандартной системе кеширования друпала страницы лежат пока не изменятся, или нет?


Опубликовано Nick в вс, 01/04/2007 - 19:33.

Не согласен. Не все так однозначно.

1. Обычно сервер БД находится на более мощной (чем web) машине.
2. Он заточен под быстрые операции чтения. Т.е. один простой (из одной таблицы без всякого там комбинирования) запрос для него мало что стоит.
3. У сервера БД есть кэш в памяти, поэтому запрос может быть обработан вообще без чтения данных с диска. Т.е. при частом обращении на сайт обращения самая популярная часть таблицы 'cache' разместится в памяти и все будет работать крайне быстро.

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

Вообще... Это сейчас популярная архитектура, когда делается тупой web-сервер, который ничего не умеет, кроме того, как принять данные от пользователя и вернуть результат, потом этот сервер передает входные данные на Aplication Server, который занимается их обработкой и, если нужно, то обращается к серверам БД, затем AP отдает ответ web-серверу, которому остается только обернуть данные в нужную обертку.
Такая архитектура очень хорошо себя показывает в масштабных проектах (распределение нагрузки рулит).
Дак вот... в Друпале web-сервер и Aplication свален в одну кучу.
Поэтому, я не считаю, что идея хранить все данные в базе данных однозначно плохой. В конце концов, хранить данные прямое назначение Базы Данных.


Опубликовано B.X в вс, 01/04/2007 - 21:29.

"Не согласен. Не все так однозначно."

можно сколько угодно говорить абстрактно... но факты говорят о том, что простые статичные страницы отдаются сервером быстрее и с меньшими нагрузками... это также к вопросу о том, почему операционные системы ДО СИХ пор хранят файлы в файловой системе, а не в базе данных... именно потому, что база данных - это именно база ДАННЫХ... но не содержания...

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


Опубликовано Dan в пн, 02/04/2007 - 01:27.

> операционные системы ДО СИХ пор хранят файлы в файловой системе, а не в базе данных...
Вообще-то современные файловые системы являются базами данных :) Только заточеные на определённый вид данных (хотя это не обязательно - у некоторых есть возможность тегирования). Журналирование - транзакции, связи не находишь?


Новое на сайте

Ссылки партнёров