Разработка

Изнанка 3.0

Изнанка — быстрый старт проекта на ПХП.

Наконец–то доделал третью версию. В Изнанке появились маршруты и кэширование, View теперь является статичным классом, а производительность выросла в разы.

Маршруты

Маршруты реализованы двумя функциями: addRoute и addRoutes. Разница лишь в том, что во вторую функцию можно передавать сразу несколько маршрутов.

Используется это так:

addRoute('/blog/',
    runModule('blog/notes');
)

Первым аргументом идёт ссылка, вторым коллбек. Ссылка отдаётся на неком подобии регулярных выражений (от реджексов осталась только звёздочка). Например, чтобы обработать открытие заметки в этом блоге, я создал маршрут /blog/notes/* .

В addRoutes передаётся массив:

addRoutes(
  array('/projects/*' => function(){
    runModule('projects');
  }),
  array('/tools/' => function(){
    View::set('title', 'Инструменты');
    View::set('template', 'tools.tpl');
  })
}

Кэширование

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

Отключить и настроить кэширование можно в файле config.php.

Кэш будет складываться в папку caches, так что убедитесь, что она доступна для записи.

Изменения

Функции антикэш и инклюд слегка поменяли синтаксис:

{{anticache ('style.css')}}
{{include ('style.css')}}

Путь теперь хранится не в переменной $view->uri, а в константе uri.

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

Главная страница больше не косит под Инитум.

8 августа, 20:44   Изнанка   разработка
Модули в Изнанке

В описании к Изнанке я указал функцию runModule(). Многим оказалось непонятно что за модули, зачем это всё и почему бы не использовать ООП.

С ООП всё просто — я не люблю его. Объекты способны самую простую задачу превратить в долгие рассуждения и мучения. Несомненно, объекты имеют смысл (в той же Изнанке был объект $view), но их стоит использовать только тогда, когда они действительно нужны. Большинство задач гораздо проще решить с помощью процедур. Повсеместное применение ООП — дань моде.

ООП в ПХП вообще отдельная тема. Объекты жадно поедают память и бьют по производительности.

Но тогда возникает другая проблема: как структурировать код? Мне удобно разбивать код на модули и вызывать их тогда, когда они нужны. Модуль в Изнанке — ПХП–файл, который выполняет задачу, а не просто набор функций.

Модули вызываю из роутера. Для отображения главной страницы этого блога используется такой код:

addRoute('/blog/' => function(){
  runModule('blog/notes');
});

Этот код запускает модуль, который сам знает что ему делать. Модуль notes вызывает модуль для работы с кэшем, берёт заметки, выставляет шаблон.

При таком подходе вносить точечные изменения становится легко и процесс написания кода приносит удовольствие.

10 августа, 19:22   ПХП   разработка
Ханимейт 2.0 Бета

Ханимейт — скрипт, который красиво показывает сайт по мере загрузки. Сегодня вышла первая бета Ханимейта 2.0.

Переписал 70% кода, убрал библиотеку imagesLoaded, объём файла удалось уменьшить с 9,2 кб до 3,4 кб.

Сделал один глобальный обработчик expose, раньше на каждый объект создавалось по обработчику. Анимации теперь просят кадры. Код стал чище и современнее: написан на es6 и собирается Бабелем.

Исправлен баг с параметрами await и continue: раньше, если ожидаемый объект не существовал, то ханимейт останавливал обработку и оставлял блок скрытым. Теперь, наткнувшись на такое, он просто покажет блок.

АПИ осталось прежним, поэтому для обновления достаточно заменить honeymate.js на вашем сайте.

Скачать архив
14 июля, 23:17   ханимейт   разработка
Админка не нужна

Большинству сайтов не нужна админка. Отедльная зона для администратора — рудимент, который должен отмереть.

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

Эти кнопки в меню появляются только у работников СМТ и только тогда, когда нужно. Например, ответ на вопрос пишется прямо на странице.

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

На этом сайте тоже нет админки, после авторизации мне доступны кнопки для управления сайтом, которые встроены в контекст.

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

В Изнанке контекстная ссылка делается так:

{{if (@admin)}}
<a href="/blog/drafts/">Черновики</a>
{{end}}
1 июня, 4:04   Изнанка   этот сайт   разработка   СМТ
Странности фронтенда

Веб–разработка свернула куда–то не туда. Сейчас сложно просто начать писать проект, так как надо настроить сборщики.

На первом моём серьёзном проекте галп–файл состоял из 2 задач, сборки цсс и скриптов. На этом сайте галп–файл состоит из 176 строк, сам следит за изменениями, собирает стили через цссо, расставляя префиксы, проходится по скриптам бабелем, настраивает права на файлы и папки. Этот конфиг я писал довольно долго и всё равно приходится периодически обновлять его.

И это далеко не самый страшный случай. Я не использую цсс–препроцессоры (пока) и возможно ещё какие–то интересные штуки.

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

P.S.
Чтобы легко начать писать проект — воспользуйтесь Изнанкой.

30 мая, 8:02   цсс   фронтенд   разработка   джаваскрипт