Яндекс.Метрика

    Реклама

    Что делать?

    «Что делать?» это не просто очередной цитатник. Кроме развлекательной составляющей, свойственной подобным сайтам, он несёт в себе и высокую цель — помощь людям в решении их проблем.

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

    К каждому из вопросов посетители могут оставить свои ответы. В отличие от самих вопросов, которые можно задавать анонимно, ответы могут оставлять только авторизованные пользователи. Сама авторизация выполнена через OAuth популярных социальных сетей и не должна вызывать затруднений.

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

    А что под капотом?

    V8! Да-да, «Что делать?» работает на Node.JS, а в качестве СУБД используется MongoDB. Такой необычный выбор обусловлен тем, что изначально сайт создавался для саморазвития. Как только я столкнулся с Node.JS мне сразу же захотелось проверить его в «боевых» условиях. Т.к. различные «Hello world» объективно не отражают возможности технологии и не показывают все подводные камни, было решено сделать небольшой проект. Забегая вперёд, скажу, что о выборе технологий я не пожалел.

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

    При знакомстве с Node.JS я начал изучать популярные web-фреймворки для этой платформы. На тот момент уже существовало несколько интересных решений, например express, но все они чем-то меня не устраивали. И я решил сделать свой велосипед фреймворк с блекджеком и всем остальным.

    От фреймворка я хотел следующего:
    • MVC
    • Роутинг
    • Работа с СУБД
    • Шаблонизатор
    • Поддержка мультиязычности
    • Поддержка многопоточности
    • Минимальный оверхед

    Вкратце, цикл жизни этого фремворка был такой: разработка, отладка, внедрение, удаление. Но это было не зря потраченное время. Он дал мне понять, насколько удобна модульная структура Node.JS. С помощью подобранного набора модулей решить поставленную задачу оказалось намного проще, при этом нет ощущения «голого» языка. По сути, сами фреймворки представляют из себя набор модулей, их конфигурацию и некоторые доработки от себя. Избавившись от привязки к фреймворку, появляется возможность независимо обновлять модули (которые довольно быстро развиваются) и «гнуть» систему так, как это удобно для конкретного проекта. В версии Node.JS 0.6 появилась встроенная многопоточность для сетевых соединений и необходимость в «костылях» отпала полностью.

    За время разработки сайта Node.JS успел 2 раза выпустить мажорные обновления. Вместе с этими обновлениями исчезли непонятные утечки памяти и неожиданные падения, которые так омрачали общий результат. Сейчас сайт работает стабильно и я решил, что пора показать его людям. Так что, велкам.

    Приятной неожиданностью было увидеть «Что делать?» в разделе "Сайт дня" на www.ferra.ru. На тот момент сайт был в стадии разработки и тестирования, содержал ошибки и нигде не рекламировался. Спасибо редактору раздела за обзор.

    В заключении хочу сказать, что разработка веб-проекта на Node.JS мне понравилась. За этот год Node.JS заметно вырос. Весь опыт, накопленный за это время, в одной статье изложить очень сложно, поэтому выделю основные плюсы и минусы.

    Плюсы:
    + Один язык на сервере и на клиенте.
    + Низкий порог вхождения в разработку (JavaScript в той или иной степени знаком большинству веб-разработчиков).
    + Асинхронный IO.
    + Большое количество модулей.
    + Отсутствие оверхеда на инициализацию конфигураций, загрузку модулей приложения, т.к. оно инициализируется один раз при запуске.

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

    Минусы уходят с опытом разработки и развитием самого Node.JS, поэтому я верю в его будущее.
    Я намеренно не упомянул про скорость, т.к. она зависит от многих факторов и объективно оценить её и сравнить с другими языками можно только на двух приложениях с одинаковым функционалом, нагруженных одинаковыми данными и на одинаковом железе. Такой возможности у меня нет, поэтому скажу просто — скоростью работы Node.JS я доволен.

    P.S. Сайт оптимизирован под современные мобильные браузеры.