Блог Родиона Ерошека РСС

Я веб- и графический дизайнер, фронтэнд-разработчик. Работаю в небольшом днепропетровском бюро «Ноябрь». Учусь на архитектора в ПГАСА.

Хорошие блоги:

Как мы делали новую версию Выходного

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

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

Дизайн

Данные Гугл аналитики говорили о высоком проценте отказа (bounce rate) предыдущей версии. Простое общение со знакомыми и друзьями дало нам понять, что большинство просто не понимают, как этим сайтом пользоваться, и о чём он. Длинный список из названий событий, заведений и советов вперемешку, непонятно по какому принципу отсортированных, сбивал с толку:

vj-old

Так что первостепенная задача состояла в том, чтобы сделать интерфейс более доступным, при этом расширив функционал. Над этим мы работали долго и упорно. У меня ушло 20 минут на то, чтобы отобрать десяток разных картинок из всего процесса и раскидать их в Индизайне:

vj-drafs

Когда мы остановились на определённом варианте, я отрисовал иконки и всякую, как выражаются в Бюро, интерфейсную фурнитуру:

vj-furniture

И вот что у нас получилось:

vj-new

Скриншоты я вставил для понта, лучше перейти на сайт и посмотреть на всё живьём. Между разными типами записей (заведения, советы, события) появились разделители, краткое описание стало ёмким, все заведения обзавелись отдельными статическими страницами — короче, всё стало понятнее и информативнее. Для того чтобы объяснить, что же это всё-таки за сайт, мы нарисовали промо-блок, который в будущем превратится в полноценный тур по сайту:

vj-tour

Вёрстка

Статья про media queries на Хабре.

Вёрстка, ясное дело, блочная, резиновая, более-менее семантичная. Всё хорошо работает в современных браузерах и ИЕ7. Благодаря media queries, вёрстка тянется от 320 до 1600 пикселей и сайт отлично себя чувствует на экране широкоформатного монитора, планшетника, телефона или в айфрейме приложения Вконтакте:

vj-media-queries

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

vj-tabs

Джаваскрипт

Из библиотек используется jQuery для манипуляций с DOM, хороший шаблонизатор EJS и fancybox. Дальше самописное ядро и набор хелперов, каждый класс в своём файле; данные берутся с сервера в json, фильтруются по параметрам, которые задаёт пользователь (в этой версии только теги, дальше будет время работы, плюшки типа вайфая и т.д.) и рендерятся. Очень упростил отладку мой самописный callstack, с помощью которого я всегда вижу очередь запущенных функций, к какому классу они принадлежат, с какими аргументами были вызваны, и кто их вызвал:

vj-callstack

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

  • Сейчас у меня есть главный класс, который раздаёт указания всем остальным, координирует их работу, к примеру, после клика по какой-то ссылке. Мне видится более удобным вариант, когда главный класс не знает о конкретных функциях других классов, а только содержит информацию о текущем состоянии приложения, даёт возможность другим классам получить эту информацию и инициирует события, которые потом уже подхватывают другие классы.
  • Сейчас любые действия происходят по клику на определённые ссылки, кнопки и т.д. В будущем хочу, чтобы все эти клики всего лишь меняли составляющие урла и текущее состояние приложения, а затем, при изменении, происходила обработка location.hash и выдача нужного содержания. Возможно, для этого буду пользоваться backbone.js. Это позволит сделать код более гибким и, что важно, ползать по истории кнопками вперёд-назад в браузере и делать закладки (сейчас они не работают).

Карта

Режим карты на сайте — наша гордость. После сравнения Google Maps с Яндекс.Картами, я переписал почти готовый код, написанный под API Яндекса, под API Гугла. Я не в курсе на счёт Яндекса, но если пользоваться последней версией API Гугла, то карты работают под iOs и Android.

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

Что происходит на сервере?

Серверная часть написана на php с использованием Codeigniter. Помимо основных задач, серверная часть выполняет еще много полезных вещей:

  • Типографит тексты, которые пишут наши редакторы. Лебедевский типограф обращается к серверу и поэтому когда он падает, падает и наш сайт. Было такое всего один раз, но осадок остался, поэтому мы перешли на типограф Евгения Муравьёва — он хороший, гибкий, выполняется на сервере и никуда наружу не стучится, к тому же он умеет делать классные штуки, например, размечать ссылки, обрамлять текст параграфами и следить за пробелами до и после знаков препинания.
  • Обрезает и шарпит картинки
  • Кроном раз в час считает лайки Вконтаке для всех записей (нужно для ранжирования).
  • Генерирует sitemap.xml с ссылками на статические страницы.

Оптимизация

Предыдущая версия очень медленно работала, поэтому мы сделали многое, чтобы в этот раз всё летало:

  • Саша избавился от join'ов в запросах и это стало основным фактором ускорения. Время, необходимое на выдачу json'a уменьшилось приблизительно в 1000 раз.
  • Настроили gzip сжатие для всего, что выдаётся php. Еще не настроили gzip для статики.
  • Графику для сайта — в спрайты, насколько это возможно.
  • Все js- и css-файлы готовятся для продакшена с помощью RequireJs — остаётся всего три файла: цсс-ка, jquery+requireJs и все наши классы и функции в одном js-файле.

Вот и всё

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

В работе нам много помогали советами Саша Раковец и Саша Зайцев, за что им большое спасибо =)

Хочу замечания, комментарии, напутствующие слова, возмущения — всякого =)

Google Maps или Яндекс.Карты?

Сегодня впервые в жизни сознательно сравнил карты Гугла и Яндекса. Первое, что бросается в глаза: у Гугла цвета намного приятнее. При чём, если рассматривать картинки сами по себе, то вроде разница и небольшая (думается: ну и что, у Яндекса, вон, веселее зато), а вот если взглянуть на карту в контексте какого-то интерфейса, то очевидно, какой вариант выглядит чище, сдержанней.

Сами по себе

Google and Yandex

В контексте

VJ

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

Взглянем поближе

Если вы знаете, чем Яндекс.Карты лучше, расскажите.

Привет-пост

Привет! Меня зовут Родион, я живу в Днепропетровске, занимаюсь дизайном и фронтэнд-разработкой. Как такового актуального портфолио у меня нету (сайты-скриншоты на фриланс.ру не в счёт), но посмотреть можно сайт бюро «Ноябрь», в котором я работаю — во всех проектах я участвовал как дизайнер, в некоторых еще и как верстальщик.

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

Раньше я время от времени писал в ЖЖ обо всём на свете. А теперь вот появилось желание вести блог с профессиональным уклоном. Надеюсь, энтузиазма хватит надолго =)