Ответы пользователя по тегу Node.js
  • Как запустить проект, если нет больших финансов?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    поднимаете новый сервер, настраиваете реплекацию баз данных (что бы база на старом и на новом сервере были синхронизированы), затем переводите DNS на новый сервер и когда они все обновятся тушите старый.

    А еще можно вместо ноды за 160 в месяц попробовать добавить еще одну-две за 10$, настроить репликацию опять же, и поставить еще одну ноду на фронт для проксирования запросов через nginx.

    А еще можно вынести базу данных на сервер помощнее и оставить пару серверов для приложения...

    Все очень сильно зависит от того, в чем у вас узкие места. Если места физически не хватает изза большого количества статики - можно вынести статику на отдельный сервер. Если база растет - можно базу вынести. Ну вы поняли.
    Ответ написан
    3 комментария
  • Как работает организация связи между модулями Javascript?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    При вызове метода someAction у модуля модуль инициирует событие event (глобальное событие для всех компонентов которые подписаны на него). В вашем примере модуль Module1 в методе init подписывается на событие и что-то делает при этом.

    Читать про шаблон observer и все такое. Важно понять где стоит применять подобный подход а где лучше явно вызвать метод другого модуля.
    Ответ написан
    6 комментариев
  • Что за бредовая ошибка в node js - js-bson: Failed to load c++?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Failed to load c++ bson extension, using pure JS version

    Вот так и понимать. Ваш модуль жалуется что у вас не установлен быстрый и удобный модуль для работы с BSON написанный на плюсах и потому оно будет использовать медленную реализацию на JS.
    Ответ написан
    4 комментария
  • Как настроить связку Vagrant + Chef (Огромный такой вопрос)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) Читаем документацию по Vagrant. Все сводится по сути к команде Vagrant init и дальше по документации
    2) Лучше использовать SMB коль уж на винде. Если в команде есть люди на Mac/Linux можно побаловаться с NFS, но на винде бывают проблемы.
    3) Настройте рецепт для чифа, вообще это никак не касается ни чифа ни вагранта.
    4) Гуглим как это делать с чифом при провиженинге
    5) python в убунте из коробки есть. По умолчанию вагрант вам будет втюхивать именно убунту. Если другую версию нужно ставить - опять же разбираемся как это с чифом сделать.
    6) vagrant ssh "cd /vagrant && gulp build" или что-то в этом духе.

    Короче... либо просите кого-то из команды либо разбирайтесь сами. Потому что вопросы уровня "что такое Gemfile" это просто смешно...
    Ответ написан
    1 комментарий
  • А в чем минусы node.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В том же в чем его и плюсы.

    Асинхронность... ее там нет. Там есть event loop что позволяет писать крайне эффективные программы в плане работы с I/O (что для web очень неплохо) и не париться о таких вещях как потокобезопасность, блокировки и т.д. А если еще и несколько инстансов приложения запусть - по одному на ядро скажем, то утилизация вычислительных мощностей выйдет неплохой. Но распаралелить что-то в рамках одного процесса воркера мы уже не можем. Мы не можем посчитать что-то, проанализировать, заняться обработкой жирной картинки прямо при обработке запроса потому что наш процесс воркер так же обрабатываете еще пару десятков запросов, и пока мы будем удовлетворять нужды одного простаивать будут все. Нода хороша когда у нас все состоит из элементарных операций которые не занимают много времени, все жирное надо выносить из основного процесса и разруливать очередями и т.д. Эта проблема имеет массу решений на самом деле, но все уже усложняется и нода теряет свою красоту. Лучше взять Java/c#/Python для этого (и не надо тут вспоминать про шутки с многопоточностью в CPython).

    callback-hell. Собственно наличие event loop диктует так же правила о том, как должна писаться программа. Кучи колбэков, невозможность дебажить нормально и получить четкий стэктрейс из ошибки. Да, есть промисы которые решают первую проблему, да есть либы вроде zone.js которые решают вторую и частично первую проблему... но все это не тривиальное дело.

    Собственно... разработка больших и сложных проектов на ноде возможна... но требует от разработчика хорошие знания и понимание того, как работает его платформа. А это увеличивает стоимость разработки в то время как можно взять более эффективные в этом плане инструменты.
    Ответ написан
    10 комментариев
  • Как поступить с общей папкой VitrualBox и nodejs(yeoman, grunt, bower)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    судя по всему не дает сделать симлинки.
    Ответ написан
    1 комментарий
  • Небольшая корпоративная социальная сеть на Node.js : за и против?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ну если у вас должны быть push-уведомления или что-то в этом духе то проще будет взять node.js. С другой стороны можно на node.js реализовать ТОЛЬКО push-уведомления а сам корпоративный портал писать на ruby + объеденить все это шиной данных на каком zeromq.

    Если вам любопытно потыкать node.js на чем-то сложнее websocket-сервера, то почему бы и да...
    Ответ написан
    Комментировать
  • Что нельзя/проблематично реализовать на node.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Real-time computing проблематично. Больше в голову ничего не лезет. Ну и да, писать на ноде десктопный софт (не CLI) это извращение.

    Вы только поймите, можно почти все сделать и на brainfuck. Вопрос в эффективности. О PHP вот тоже все плохо говорят, даже те кто на своих любимых js/ruby говнокодит в контроллерах только. И что? Будьте выше этого.

    p.s. На самом деле все говно кроме пчел. Это суровая реальность. Нет ничего универсального и подходящего под все спектры задач. Так же есть еще субъективные факторы.
    Ответ написан
    4 комментария
  • Как в nodejs принято объявлять переменные?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А как хотите. Мне нравится первый вариант но у него есть один неприятный минус - в git log-ах добавление переменной затронет две строки а не одну:

    var a,
          b;


    var a,
    -     b;
    +     b,
    +     c;


    второй вариант с этой точки зрения более приятный. Так что решайте что вам важнее. Красивые логи или приятный виду код.
    Ответ написан
  • Как реализовать новостную ленту на node.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Так же как и блог.
    Ответ написан
    Комментировать
  • Angular.js или socket.io + express.js.Есть ли Разница?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    чем Angular отличается от socket.io?

    Да всем. AngularJS - фреймворк, базовый каркас вашего приложения, директивы, DI и т.д. socket.io - библиотека для реализации взаимодействия с websockets.

    То есть правильно было бы AngularJS + socker.io + express.js. Angular для фронтэнда чуть что. express.js для бэкэнда (rest), socket-io - websocket сервер. Можно использовать сокеты как транспорт для данных если у вас часто взаимодействие с сервером происходит, можно только для push сообщений...
    Ответ написан
    3 комментария
  • Какую cms вы бы использовали под Node.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    -_- Защищают php и т.п...

    Да ладно, пых защищают... Просто зачем? CMS на ноде уже существует огромное множество. Некоторые даже интересны. Меня вот лично не прельщает идея использовать какие-то CMS не узкоспециализированные ни на node.js ни на php ни на любом другом языке.

    Ну а если мечтать... хочу CMS на модулях, с DI и без извращений с менеджерами плагинов, кастылями и прочим, с кешированием всего и вся при деплое или при запуске команды из CLI к примеру или любой другой механизм кеширования имеющий вармап. Никаких wysiwyg, только маркдаун и редакторы по типу sir-trevor (вообще хотелось бы видеть этот самый sir-trevor написанный нормально а не тот ужас который сейчас есть). А еще было бы неплохо что бы эта CMS была просто модулей управления контентом, который можно просто интегрировать в своей проект. То есть не коробочное решение а набор компонентов + одно собранное приложение для тех кому нужно только странички статические и ничего больше.
    Ответ написан
  • Как отдавать json и рендерить страницу по одному запросу?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну отдавайте отрендренные данные в json но одним запросом отдвать два разных тела у вас явно не получится... Либо придется опять же на клиенте разруливать, а в ответе пометить ContentType как свой какой-то типа application/json+html и разруливать в глобальных интерцепторах. Я только не понимаю зачем вы вообще что-то для angular приложения "пререндрите". Пусть на клиенте рендрится или вы думаете что это будет сильно медленне? Если у вас уже проблемы с производительностью и вам может помоч пререндер значит у вас можно оптимизировать биндинги (если у вас angular 1,3 конечно). Словом я сомневаюсь что именно это слабое место. Опять же можно попробовать рендрить на клиенте через ReactJS с его виртуальным DOM хотя с оптимизированными биндингами особо выйгрыша это не даст.
    Ответ написан
  • Nodejs & gulp от sudo ?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) Если вы ставили через apt-get то просто пишите nodejs -v либо сделайте алиас в ~/.bashrc - alias node=nodejs
    2) подозрваю что вы для connect указали 80-ый порт (диапозон портов до 1024-ого можно юзать только с правами администратора)
    Ответ написан
  • Как можно авторизовать nodejs бота на форуме под vbulletin?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В очень примитивном случае, авторизация для клиента работает так:
    - пользователь отправляет данные формы в POST запросе. То есть данные записываются в тело запроса, не в заголовки заметте.
    - если говорить о PHP, то при вызове функции session_start (или автоматически если выставлено в php.ini) создается файл сессии (опять же может храниться и в памяти в реддисе каком, как настроят) и пользователю присваивается кука с идентификатором сессии. Эту самую куку сэтят через заголовки ответа:
    Set-Cookie: name=value
    Затем при каждом запросе на сервер вам нужно будет эти куки так же отправлять в заголовках, иначе сервер подумает что вы новый чувак и будет создавать для вас новую сессию.

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

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

    В вашем случае самым простым решением было бы вооружиться phantomjs и просто автоматизировать действия пользователя. Все эти вещи как сохранение и хэндлинг кук по идее оно будет делать за вас. Вам лишь нужно будет прописать последовательность действий. Так же будет намного проще парсить.
    Ответ написан
  • Можно ли php заменить на node.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Можно, вопрос только зачем вам это нужно и что это вам даст.

    И да, не забывайте о том что при развертывании node.js приложения вам придется позаботиться о том что бы оно не падало. В идеале все это хендлится какими-нибудь express.js - то есть без фреймворков в node.js вообще не стоит лесть если у вас опыта мало.

    Так же если у сервера на который вы деплоитесь не одно ядро, то стоит запустить по одному инстансу приложения на ядро и проксировать на них запросы через nginx. node.js по умолчанию синхронный. То есть вся та хваленая асинхронность проявляется только когда речь идет о I/O. JS код же выполняется в одном потоке, две строчки кода не могут выполняться одновременно. Потому придется вклинивать какие-то менеджеры процессов и т.д.
    Ответ написан
  • Node.js, как лучше поступить с модулями в режиме production?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Конкатенация и прочее нужны для уменьшения количества HTTP запросов и связанных с этим блокировок, задержек и прочего веселья.

    На сервере это все не нужно. Скрипт загружается в память и там остается пока вы не убъете сервер. Далее JIT все будет оптимизировать дальше.

    Единственное что может быть, если модули реквайрятся там где они нужны, а не при инициализации модуля. В этом случае в силу синхронной работы CommonJS могут быть проблемы если модуль еще никем не загружался. Но уж точно конкетенацией делу не поможешь.
    Ответ написан
    Комментировать
  • Как реализовать связанные списки на node.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Фасеточный поиск?

    В контексте реляционных БД я бы указал на EAV, но тут сложнее так как mongodb подразумевает денормализацию базы и работу с агрегациями данных.
    Ответ написан
  • Чат и не прочитанные сообщения пользователя, как правильно спроектировать БД?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вставки не проблема, так как вы всеравно должны будете организовать какой-то буфер в памяти, например для reddis и обновлять все это добро пачками а не по одному, и желательно в отдельном потоке, через ZeroMQ например.

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