
Идея создания новой доски объявлений для нашего города возникла давно. Аналогичные сайты, скажем-так, "немножко" отстали в развитии лет эдак на десять - они практически не используют новые фичи браузеров, жутко не оптимизированные, в том числе и для мобильных устройств, грузят over 9000 стилей, скриптов и плагинов для jQuery, чтобы показать красивую карусель с картинками. О дизайне и юзабилити этих сайтов даже говорить не хочется. Исправить эту ситуацию призван наш проект - доска объявлений Doska.capusta.net.
О проекте
При реализации проекта главной задачей было проектирование архитектуры, отвечающей следующим требованиям: быстрая загрузка, использование передовых технологий браузеров, простой и понятный интерфейс. Главной же киллер-фичей нашей доски стала основанность верстки на модульной сетке и адаптивный дизайн. Поэтому сайт одинаково хорошо смотрится и на десктопах, и на планшетах, и на смартфонах.

Клиентская сторона
Чтобы обеспечить быструю работу было принято решение написать весь сайт на основе AJAX (точнее AJAJ, т.к. передаются JSON объекты, а не XML) с помощью Backbone. Вся маршрутизация, рендер шаблонов происходит на стороне клиента, а сервер занимается выборкой из базы данных и бизнес-логикой доски объявлений. При открытии сайта фактически грузятся только 2 файла: JS-движок и единый CSS-стиль. Это достигается путем склеивания всех js-файлов (css-файлов) в один файл с последующей минимизацией и статическим gzip-сжатием с помощью GruntJS. Проблема кэширования этих файлов решается с помощью маленького shell-скрипта, который при каждом билде проекта пишет номер последней ревизии git в специальный файл, который потом считывается продакшен-шаблоном и дописывается в конце URL-адресов.
http://doska.capusta.net/dist/release/index.css?v=e71788bfd808fddd1a5140420c4b3cea11dddb8c
http://doska.capusta.net/dist/release/require.js?v=e71788bfd808fddd1a5140420c4b3cea11dddb8c
Это позволяет насильно обновлять файлы у клиентов при следующей загрузке страницы.
Серверная сторона
Серверную сторону обслуживают Nginx в связке с PHP-FPM 5.4. В качестве PHP-фреймворка используется Kohana 3 - это очень удобный и быстрый в освоении HMVC-фреймворк, а его каскадная файловая система позволяет наращивать его функциональность на лету.
База данных
В качестве БД была выбрана MongoDB, т.к., по нашему мнению, документно-ориентированные БД больше подходят для такого рода сайтов. Например, для хранения параметров объявлений в MySQL пришлось бы делать отдельную таблицу и делать связь один-ко-многим, а в MongoDB все параметры любого количества можно хранить в самом документе объявления. Еще одним преимуществом MongoDB является возможность хранения динамических типов данных в поле документа, т.е. можно в поле документа
deleted
можно записать значение FALSE
а потом при удалении этого документа записать время удаления MongoDate([timestamp])
В скором времени выйдет 4-ая версия MongoDB, где разработчики анонсировали встроенный полнотекстовый поиск по коллекциям. В данное время на сайте работает своя простая система полнотекстового поиска, которая, увы, не учитывает морфологические варианты слов, например: "машина", "машины", "машину", но мы надеемся, что в будущем реализуем эту возможность.
Послесловие
К сожалению, мы не можем рассказать обо всем, что касается этого проекта, потому что это займет не один и не два поста. Если у вас есть вопросы, просим оставить их в комментариях, мы постараемся ответить.
P.S.
Краткий список использванных технологий и названий open-source проектов:
Nginx, PHP-fpm, Kohana, MongoDB, Memcache, GruntJS, RequireJS, Backbone, Underscore, jQuery, LocalStorage, Git и другие.