Pull to refresh

Что делать?

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

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

К каждому из вопросов посетители могут оставить свои ответы. В отличие от самих вопросов, которые можно задавать анонимно, ответы могут оставлять только авторизованные пользователи. Сама авторизация выполнена через 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. Сайт оптимизирован под современные мобильные браузеры.
Tags:
Hubs:
+13
Comments30

Articles