Ответы пользователя по тегу Веб-разработка
  • Return выполняется раньше получения данных с помощью request, как побороть?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Почитайте про асинхронное программирование в Node.js. Все функции, которые содержат асинхронный ввод/вывод должны быть асинхронными, т.е. возвращать значения через callback, а return вообще им не нужен. Примерчики посмотрите: https://github.com/HowProgrammingWorks/Asynchronou... и тут https://github.com/DzyubSpirit/Asynchronous-Javascript там есть много с гетами страниц.
    Ответ написан
    Комментировать
  • Зачем иметь так много разных консолей? Чем они все отличаются?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Вы же не жалуетесь, что у всех оконный приложений свой интерфейс, в одних такое меню, у других сякое, у одних закладки, у других тулбары, кнопочки такие, кнопочки сякие.
    А консоль, это интерфейс консольных приложений, у одного приложения такие команды, у другого сякие. Так и должно быть. Все в порядке.
    Ответ написан
    Комментировать
  • Возможно ли в REST сервисах отправлять запрос на сервер в виде JSON документа?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    var data = { field1: 1, field2: 2, field 3: { fdgfd: 3 } };
    var xhr = new XMLHttpRequest();
    xhr.open('POST', '/api/method', true);
    xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
    xhr.send(JSON.stringify(data));
    Ответ написан
    Комментировать
  • Как вы строите архитектуру приложения?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    Тут мой ответ по связанной теме: Как составить план проектирования проекта?
    А кроме того, хочу отметить, что начинать проект с дизайна (если Вы имеете в виду дизайн пользовательского интерфейса) это в большинстве случаев очень плохая практика. Проект нужно начинать с концепции, а потом переходить к информационной модели, потом к структурам данных (как в базе, так и в памяти) и уже потом только понятно, что на экране будет делаться. Исключение могут составлять игры, электронные книги, анимационные, интерактивные и подобные произведения, которые являются в большей степени произведением визуального искусства, чем программным продуктом. Из средств проектирования посмотрите разные реализации UML и RUP (Rational Unified Process), например Rational Rose. Вот, посмотрели, и понравилось - берите, а стало страшно - значит это Вам не нужно. Это для проектов крупных и очень крупных. Что точно нужно, так это уметь рисовать ER-диаграммы на бумажке карандашом, архитектуру модулей программной системы и железную инфраструктуру для развертывания. На большинство вопросов, которые Вы задаете, ответы можно дать только относительно конкретного проекта. Иногда нужны автоматизированные средства проектирования, иногда они не нужны и все можно сделать в уме и сэкономить время. Это очень зависит от задачи и опыта. Но что определенно, так не следует разводить лишней бюрократии,
    Ответ написан
    1 комментарий
  • Как составить план проектирования проекта?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    Идея/концепция к проектированию не относится, это отдельный предварительный этап. Для проектов побольше, и в общем случае, проектирование включает такие шаги, многие из которых, конечно, можно пропустить или сократить до минимума, если задача не сложная:
    1. Системный анализ и изучение предметной области
    2. Формирование требований к разрабатываемой системе
    3. Архитектуная задача, которая сводится к простой формуле: разделять, называть и связывать подсистемы
    3.1. Декомпозиция сложных задач
    3.2. Слои (построение слоев абстракций)
    3.3. Планирование топологии системы, программной и серверной инфраструктур
    3.4. Решение вопроса интеграции подсистем, программные интерфейсы, контракты и связывание
    3.5. Интеграция с унаследованными приложениями
    3.6. Минимизация изменений, для случаев, когда постоянно происходят изменения в предметной области
    4. Выбор инструментов решения
    4.1. Выбор парадигм программирования и языков
    4.2. Выбор технологий и платформ
    4.3. Выбор моделей данных, алгоритмов и библиотек
    4.4. Выбор топологий и протоколов
    4.5. Выбор паттернов программирования
    5. Предварительные исследования
    5.1. Проверка гипотез, эксперименты
    5.2. Изучение особенностей технологий
    5.3. Прототипирование
    6. Задачи обеспечения надежности
    6.1. Планирование безопасности и защиты от несанкционированного доступа
    6.2. Планирование отказоустойчивости
    6.3. Планирование мер по обслуживанию системы в режиме эксплуатации
    6.4. Задачи высоких нагрузок, балансировки и масштабирования, если таковые предполагаются
    7. Организация процесса разработки
    7.1. Жизненный цикл программной системы
    7.2. Конвенции кода, соглашения и стандарты
    7.3. Оценка необходимых временных и финансовых ресурсов для разработки системы
    7.4. Календарный план
    7.5. Анализ и минимизация рисков, выявление слабых мест технологий и коллектива
    7.6. Закрепление принципов управления процессом разработки и корректировки задания в процессе
    8. Сборка технического задания из результатов всех предыдущих пунктов
    Ответ написан
    2 комментария
  • На каком фреймворке лучше писать блог (nodejs)?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Уже разобрано было тут: Сложно ли написать свой блог на nodejs?
    Ответ написан
    Комментировать
  • Какие реализации балансировщиков нагрузки на NodeJS сейчас лучшие и насколько они адекватно работают?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Учитывать загрузку ЦП и ОЗУ обычно не нужно, это только для эзотерических задач. Для балансировки в рамках одной машины хватает рандомного раскидывания или приклеивания по IP (IP sticky) хватает библиотеки cluster (или более низкоуровневой child_process) для передачи хендлов сокетов из центрального процесса в дочерние через системный механизм IPC (interprocess communication) для обработки. Например, вот тут как я это делаю: /lib/impress.js#L636-L646 в Impress Application Server. Если выходить за рамки одной машины, то чисто нодовская балансировка не годится, нужно применять двухуровневую балансировку, хардварное решение типа F5 Load balancer + внутри машины еще и распределение между процессами через IPC. Софтварные балансировщики на ноде в режиме нескольких машин ни чем не лучше чем Reverse proxy, в этом случае nginx даст Вам лучшие результаты, чем нодовские решения, это точно, он может еще и терминировать SSL очень эффективно и дальше уже передавать в ноду просто HTTP, снижая нагрузку на нодовский сервер. Как на nginx, так и на хардварных решениях, вполне можно сделать любой URL-реврайтинг, стики и объединение нескольких сервосов и портов в один, но хардварные на порядок производительнее.
    Ответ написан
    4 комментария
  • Нужно ли включать маршрутизатор в изоморфную часть?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    С дублированием сложно смириться морально. Но есть три пути, два Вы описали, дублировать и изоморфить. Но мне больше по душе третий, когда серверная часть содержит все в себе, обобщенную решаемую задачу и динамически порождает клиентскую часть. То есть, нужно не 2 раза писать, а используя метапрограммирование подняться на такой слой абстракции, где нет клиента и сервера и там решать задачу, а потом транслировать ее в клиент и сервер, в шаблоны и маршруты в конкретику.
    Ответ написан
    1 комментарий
  • Какие связки лучше для web проекта (SAAS)?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    Напишите на знамени "минимализм" и займитесь архитектурой еще до того, как будете выбирать технологии. Отсылаю вот к этому ответу: Есть какие-нибудь ресурсы по построению правильной серверной архитектуры на node.js/io.js?
    А по технологиям: Node.js + React
    Не берите Angular habrahabr.ru/post/246905
    Не берите jQuery - он ничего не решает, он привычен, удобен, но приучивает повсеместно писать селекторы, вместо того, чтобы при запуске забрать все необходимые ссылки на DOM в переменные, связать их с объектами и вызывать по мере надобности. Кроме того, селекторы уже давно есть в HTML5 slides.html5rocks.com/#new-selectors
    Не берите express.js если хотите в дальнейшем развить проект до больших масштабов. Он годится только для прототипирования. habrahabr.ru/post/243945 в особенности см. мой коммент: habrahabr.ru/post/243945/#comment_8141311
    Вместо CoffeeScript берите TypeScript, а лучше пишите все на ES6. Пока напишете SAAS, то он будет везде.
    Ответ написан
    2 комментария
  • Сложно ли написать свой блог на nodejs?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Блог это конечно же решаемая задача для ноды, но эта ниша уже занята другими языками и фреймворками, поэтому блоги на ноде пишут редко, подробнее посмотрите вот этот мой ответ о том, что лучше писать на ноде, что имеет смысл, а что нет: Что можно написать на Node.js?
    Мой Вам совет, учите сначала платформу, смотрите видеоуроки тут https://learn.javascript.ru/nodejs-screencast пробуйте свои сыли на практике тут nodeschool.io и выбирайте готовый движек для блогов тут https://github.com/sindresorhus/awesome-nodejs
    Сделать блог это может означать:
    1. Взять движек блогов и сделать на нем блог
    2. Написать движек блогов и сделать на нем блог
    Делать блог на голом экспрессе, это почти то же, делать блог вообще на голой ноде, это можно только если Вы уже профессионал и хорошо понимаете, что делаете. Иначе нужно идти по первому варианту и брать все готовое, вот еще одно место где это готовое можно поискать: nodeframework.com
    Например: https://ghost.org/ или hexo.io
    Ответ написан
    Комментировать
  • Чем вы отлаживаете Node.js и чего вам не хватает?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Мне стыдно, но я должен признаться, что использую для отладки console.trace, console.dir, console.log. Пошаговая отладка мне нужна вообще 2-3 раза в год , а что нужно часто при разработке Impress (сервера приложений), так это наблюдение за структурами памяти внутри процессов. Для чего я использую node-inspector, так это сделать в консоли нечто типа Object.keys(impress.applications.example.cache.files) и получить ["/app/examples/access.js", "/app/examples/request.js", "/app/examples/simple/jsonPost.json/post.js", "/app/end.js", "/app/lazy.js"]. Это удобно, но вот брекпоинт поставить на обработчик приложения под Impress или где-то в системном коде Impress, мне ни разу не удалось: обработчики вылетают где-попало в системных библиотеках ноды (events, stream, net, fs) в каких-то местах, совершенно не относящихся к тому брекпоинту, которые я ставил. Если использовать cluster/fork Impress не запускается, но слава Аллаху, что у меня есть режим 'single', при котором все происходит в одном процессе и так как-то можно покопаться в памяти. Когда мы допилим Impress до стабильной версии и выпустим доки, то я собирался выделить время и разобраться в отладке, покопаться в этих проблемах и, возможно, что-то соптимизировать специально для совместимости. Вообще спасибо за работу, иногда очень пригаждается!
    Ответ написан
    3 комментария
  • Возможно ли установить набор модулей для NODE.JS на компьютере без выхода в инет?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    В вашем случае проще установить на подключенной машине и потом просто папку перенести целиком, вместе с node_modules.
    Ответ написан
    1 комментарий
  • AngularJs для обычных сайтов - портфолио, визиток и т.д. стоит использовать или нет??

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Предостерегаю по поводу Angular, опыт говорит, что уровень проблем создается больший, чем польза от применения. Почитайте подробнее тут habrahabr.ru/post/246905
    Ответ написан
    2 комментария
  • Что ждет в будущем node.js: рост или спад?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Смело берите JavaScript и Node.js как главный инструмент. Раскол команды может только взбодрить разработчиков, проект то в открытом коде. Для начала:
    learn.javascript.ru/nodejs-screencast
    learn.javascript.ru
    nodeschool.io
    Ответ написан
    7 комментариев
  • Постоянно падает сервер на node.js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Вообще нужно логировать вывод, он же не просто падает, а что-то говорит, наверняка, или ошибка или память закончилась. Скорее всего у вас отпадает connection и следующие запросы не проходят, нужно сделать переподключение, вынесите соединение в function openConnection и повесьте событие, примерно так connection.on('error', function(err) { if (err.code === 'PROTOCOL_CONNECTION_LOST') openConnection(); });
    И пожалуйста, не клейте SQL из строк, используйте параметры запросов. Тут вот моя библиотечка старая, в ней примеры и дополнительные удобства: https://github.com/tshemsedinov/node-mysql-utilities
    Ответ написан
    2 комментария
  • Действительно ли back-end разработка более консервативна, чем front-end?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    Фронтэндщики влезли на сервер через окно Node.js и мостик JavaScript, и наплодили 80к пакетов, пошла жара, это можно выдержать... https://www.npmjs.org/
    Ответ написан
    Комментировать
  • Несколько сайтов на DigitalOcean (Node.js)

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Попробуйте этот рецепт: npmjs.org/package/impress
    Запускает ноду в кластерном режиме, на все ядра, и умеет сразу целой группой кластерных процессов обрабатывать целую группу доменов. Поддерживается и маршрутизация урлов по каталогам, URL-реврайтинг и проксирование на другой сервер. Следит за конфигурацией на винте, и если в ней появились новые домены, то сразу подгрузит новую и начнет их обрабатывать, без перезагрузки процесса. Но самое удобное, что не нужно перезагружать процесс ноды, когда меняется код программы, т.е. все обработчики для URL-ов лежат в своих папках, можно их на винте менять, а Impress следит за файлами, перечитывает их и кеширует в память. Вот тут подробнее: habrahabr.ru/post/182714/
    Ответ написан
    Комментировать