Статьи

Зачем писать свою собственную CMS?

Учитывая все споры о том, какая CMS является лучшей, я бы хотел потратить некоторое время на то, чтобы изложить свое мнение .

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

Почему я решил написать свой собственный

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

Я также хотел создать сайт, на котором каждая страница может быть синдицирована либо в виде метаданных JSON , либо в виде HTML -содержимого только для контента, и чтобы все, что пользователь должен сделать для получения этого содержимого API, это добавить ".json"".html"URL страницы. Насколько я знаю, ни одна из существующих систем не может сделать это без масштабной модификации.

Я много работал с WordPress, а также хорошо разбирался в установке, которую использует SitePoint — и для того, чтобы все это работало, нужно много плагинов и пользовательский код. Я бы предпочел потратить это время на написание чего-то нового, не в последнюю очередь потому, что мне самому нравится создавать вещи .

Я также ненавижу поля редактирования на основе браузера , и даже самые продвинутые из них не могут сравниться с мощью и гибкостью такого текстового редактора, как BBEdit или TextPad. Когда дело доходит до ежедневного обслуживания и обновлений, у меня есть способ работы и инструменты, которые помогают мне быть продуктивным, и почти все инструменты на основе браузера, которые я использовал, мешают этому. Мой опыт работы с WordPress, безусловно, не помог, так как он постоянно расстраивает и раздражает меня, разрушительно разбирая мою разметку , меняя элементы, добавляя разрывы, делая хороший HTML плохим. Я не хочу иметь дело с этим. Мне нужна система, которая работает с обычными текстовыми файлами, которые вообще не анализируются, и их не нужно очищать, поскольку они не хранятся в базе данных.

Затраты на использование базы данных вообще кажутся излишними для сайта, подобного моему, когда подавляющее большинство большинства страниц — это статический HTML . Я подозреваю, что то же самое верно для очень многих блогов — расточительно делать запрос к базе данных только для части разметки. Это может быть удобно для разработчиков и менеджеров, но это не то, что лучше для пользователей.

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

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

Вот как работает Справочник по SitePoint — сложные, подробные страницы генерируются из XML , но все это выполняется заранее для создания по существу статических страниц, и это то, что пользователь извлекает. Я не знаю ни одной CMS, которая бы работала таким образом, и сама SitePoint Reference была индивидуальным решением (в основном разработанным Кевином Янком ).

Преимущества написания своего собственного

Это один из тех случаев, когда мелочи имеют большое влияние. Честно говоря, написание собственной CMS не так много преимуществ, но те, которые есть, очень важны.

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

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

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

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

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

Вам также никогда не придется думать о лицензировании или авторских правах . После того, как у меня есть CMS, я могу делать с ней все, что захочу, никогда не думая о том, ограничено ли то или иное использование. И кто знает, может быть, однажды у меня будет даже товарный товар!

Недостатки написания своего собственного

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

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

Даже простая CMS занимает очень много времени для сборки . Я знал, что это никогда не будет тривиальной задачей, но я с самого начала не предполагал, сколько времени будет потрачено на написание функций администратора . Оглядываясь назад, должно было быть очевидно, что создание инструментов администратора будет (и было) около 90% работы. Время от времени на разработку этой системы у меня уходило полгода , и я бы соврал, если бы сказал, что все это время у меня была мотивация!

И из-за этого, а также в результате акцента, который я сделал на выводе на стороне клиента, некоторые из моих процессов администрирования на стороне сервера невероятно тупы . Конечно, это не влияет на пользователей — когда дело доходит до просмотра страниц, я сделал эти процессы максимально удобными и эффективными. Но некоторые функции администратора — это медленный, не элегантный код, который я не любил писать и просто хотел, чтобы это было сделано. Если бы я на самом деле выпускал этот код для использования другими людьми, я бы никогда не принял его. Только потому, что только для меня, и только на самом деле влияет на меня, я могу игнорировать такие вещи.

Вывод

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

Если посмотреть на это с точки зрения задач, это просто не было экономически эффективным и эффективным использованием моего времени , и если бы мое первоначальное мышление было основано на потребностях клиента, я бы никогда не сделал этот выбор. Вероятно, только потому, что это было только для меня, у меня была свобода писать свою собственную CMS .

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

Если вам понравилось читать этот пост, вы полюбите Learnable ; место, чтобы узнать новые навыки и приемы у мастеров. Участники получают мгновенный доступ ко всем электронным книгам и интерактивным онлайн-курсам SitePoint, таким как «Руководство для начинающих по веб-дизайну с WordPress» .

Миниатюра кредит: Майк Прокарио