Быстрая CMS
Обратная связь Карта сайта
Главная Создание сайтов Практика Строим CMS Наивное О проекте Блог

Разработка CMS шаг за шагом

Давно известная истина – учиться лучше всего на чужих примерах. Программированию, в частности, хорошо учиться, роясь в исходниках работающих программ. Можно заодно попытаться оценить рациональность, найти недостатки, взять на вооружение удачные решения. Анализ исходников – это заочный обмен опытом.

Вот для такого обмена опытом приглашаю вас познакомиться с разработкой несложной CMS – системы управления контентом для сайта. Мы рассмотрим весь ход разработки «движка» поэтапно.

Планируем возможности и структуру CMS

Что нам нужно от системы управления контентом? Что она должна «уметь»?

На самом деле, не так уж и много. Разумеется, нам хочется, чтобы всё это действовало надежно, быстро и не слишком «напрягало» сервер, на котором будет работать. Хотелось бы иметь возможность без лишней возни сменить дизайн страниц, когда это понадобится. Еще нам не помешали бы так популярные сейчас псевдостатические URL'ы (Понятия не имею, почему их так упорно называют ЧПУ – от того, что в них нет знаков ?&=, они человеку понятнее не становятся. Приятнее – пожалуй, да).

Выбираем формат данных

В качестве хранилища информации предлагаются текстовые файлы. Да, вы всё правильно прочли. На самом деле область применения баз данных – вовсе не создание типовых сайтов. Я уже вижу кривые усмешки персонажей, которые не написали за свою жизнь ни одного движка, но «точно знают», чем Joomla лучше CMSimple. Предлагаю этим «знатокам» оставаться при своих заблуждениях. С оставшимися продолжим беседу. :-)

Создатели известной файловой CMS «CMSimple» признают, что их система способна довольно сильно нагрузить сервер при объеме контента от 2 мегабайт. Но это их собственная непредусмотрительность – нужно было тщательнее продумывать структуру данных.

Открою секрет – здесь будет описан движок-прототип, на более развитой версии которого работает этот сайт. При тестировании этого движка были взяты тексты 8 романов общим объемом в 3.5 мегабайта, разбиты на главы и использованы в качестве наполнения сайта (одна глава – одна страница). Всего получилось около 500 страниц. Скорость загрузки любой из них заведомо выше, чем при использовании базы данных. А нагрузка на сервер заведомо ниже. Больше того – это преимущество сохранится, если страниц будет пять тысяч.

Маленькое пояснение. Для тех, кому не понятно, почему это так.
База данных MySQL использует по 3 файла на каждую таблицу (файл данных, файл индексов и файл структуры). Поэтому для выборки, например, текста страницы приходится выполнять следующий набор операций:

В случае хранения контента страницы в виде текстового файла операций намного меньше:

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

В случае движка с базой данных мы имеем 2 компонента – интерпретатор PHP, работающий как модуль web-сервера и SQL-сервер, который может быть отдельным процессом на том же физическом сервере, а может обслуживать множество аккаунтов виртуального хостинга на отдельном сервере баз данных. Бывает так, что SQL-сервер сильно нагружен или просто «свалился» и не отвечает. Очевидно, что надежность такой связки ниже.

Файлы с текстами лежат здесь же, в дисковом пространстве сайта в пределах досягаемости скриптов. Открытие и чтение их – элементарные системные операции, такие же быстрые, как подключение фрагмента кода из файла директивой include. Главное – не сваливать тексты всех страниц в один файл, как сделали создатели CMSimple, а то он займет слишком много места и в нем неудобно и долго будет рыться.

В любом случае, это только пример. Те же подходы к структуре данных и проектированию движка можно использовать и в случае со связкой PHP+MySQL. Эта связка просто необходима при строительстве совсем не простых сайтов, начиная с уровня развитого форума или интернет-магазина. Но сейчас перед нами стоит задача попроще, а предисловие, как мне кажется, снова затянулось... ;-)