• Node.js и переход с PHP на JavaScript
    +1
    Вы сами то пример смотрели? Вечный цикл в котором инициируются «асинхронные» запросы и тут же постоянно идет проверка синхронным кодом или они все выполнились. Тут нету самого главного, события о том что что-то произошло. Надо постоянно синхронно что-то опрашивать. Конечно же это лучше чем ничего, но до полноценной асинхронной модели программирования еще очень далеко.
    Это все равно что на машине кузов мерседеса с двигателем от таврии.
  • Node.js и переход с PHP на JavaScript
    +2
    Вы уверены, что на php нельзя сделать асинхронный запрос к базе / кэшу? нельзя сделать банальный http-запрос (либо каким либо еще протоколом, благо сокеты доступны и для всего более менее стандартного есть реализации) и не дожидаться его исполнения?

    Напришите пример кода на PHP ассинхронного запроса к MySQL
  • Node.js и переход с PHP на JavaScript
    –2
    mysql_pconnect убыстряет установку соединения, но корень проблемы не в этом, а в том, что на каждое обращение к скрипту нужен отдельный конекшн. И когда соединений с сервером много база начинает «тупить», что еще провоцирует открытие еще большего числа одновременных соединений с базой.
  • Node.js и переход с PHP на JavaScript
    +6
    Суммарное время будет равняться… суммарному последовательному времени. Он же однопоточный. Разве нет?

    Конечно же нет. Инициировать запросы нода, в так называемом event loop будет последовательно, но далее будет ждать события «пришел ответ» и запускать обработчик на это событие.
    Redis тоже однопоточный, как вы считаете с редисом можно работать паралельно?

    А вообще интересно было бы привести реальную задачу, которую вы решили таким способом. Вот правда, ни разу еще не видел, чтобы в ветке про Ноду кто-то сказал: Асинхронность ноды помогла мне решить вот-эту-вот-ресурсоемкую-мега-задачу, и это не чатик.

    Я вам привел конкретный пример, где очевидно преимущество ассинхронного программирования.

    У нас, в компании, используется микросервисная архитектура, большинство микросервисов на nodejs.

    На основном нашем проекте полмиллиона уникальных посетителей в день auto.ria.com. И вначале мы программировали на PHP, и это было нелекгое время.
  • Node.js и переход с PHP на JavaScript
    +5
    вы искренне уверены, что асинхронность это какой-то эксклюзив для js?

    Вы перекручиваете мои слова. Просто в PHP нету ассинхронной организации кода, а в ноде это основной вид программирования. Это дает ряд преимуществ, которые описаны в несметном числе статей.
    А про экслюзив это уже вы дофантазировали.
    А в наличие в среднестатистическом приложении огромного куска логики, который будет выполняться во время ожидания ответов от базы и при этом не зависеть от нее чет не верится.

    Например у вас 10 сервисов и одна база, в ноде можно обратиться одновременно ко всем и к базе и обработать ответы или ошибки от сервисов ПАРАЛЕЛЬНО, одновременно. Суммарное время выполнения будет ровняться самому тормознутому сервису или долгому ответу от базы а не сумме обращений ко всем сервисам. Разницу чувствуете?
    да, если nodejs-приложение умеет обрабатывать больше одного соединения. ибо пхп приложение скорее всего будет обрабатывать одно соединение (если там не reactphp)

    nodejs однопоточный. нода будет обрабатывать абсолютно все соединения в одном потоке, при этом все обработчики могут взаимодействовать между собой. Это делает элементармым такю задачу как написание чата, например.
  • Node.js и переход с PHP на JavaScript
    +2
    Все разруливается не на уровне соединений а на уровне запросов. Приложению нужно выполнить запрос он обращается к модулю mysql, тот свою очередь смотрит есть ли у него свободный конекшн. Если есть по нему проходит запрос, если нет, запрос ожидает освобождения конекшна. Для приложения эта все выглядит как обычный запрос к базе (неважно побывал он в очереди или нет).

    Кроме того, ресурсы приложения, которое делает запрос используются намного оптимальнее чем при роботе с php, т.к. все запросы проходят ассинхронно, другими словами пока не возникнет событие «пришел ответ на запрос», ресурсы не заблокированы, как в случае с mysql. Для php же ожидание губительно, так как и процессорные и память, выделенная на исполнения кода, заблокированы до ответа MySQL. Поэтому nodejs-приложение, как правило, может обрабатывать намного больше одновременных соединений чем аналогичное php-приложение.
  • Node.js и переход с PHP на JavaScript
    +4
    В статье не написано о том что nodejs в отличие от php не запускается при каждом запросе, от стартует и обрабатывает события. Это существенно меняет разсклад как по производительности так и по архитектуре приложений.
    Многим известна ситуация «Too many connections» при работе с MySQL. Корень проблемы в том что на каждый запуск PHP скрипта устанавливается новый connection (по-другому никак). Если запросов привалило много, база уходит «в задумчивость» и это заканчивается ошибкой «Too many connections». Нода же позволяет выделить небольшой пул соединений, например, 10. И драйвер MySQL на своем уровне будет обеспечивать работу с базой приложения используя эти 10 конекшнов. При большой нагрузке, запросы будут становиться в очередь и разгребаться медленее, но приложение будет остатваться рабочим и «живым».
  • Go быстрее Rust, Mail.Ru Group сделала замеры
    0

    Ноду через модуль cluster балансировать не оптимально, для этого есть специально написанные инструменты nginx или haProxy. Поэтому по ноде тесты сомнительные.


    Попробуйте так, ставим ноду 8.5
    создаем index.js


    var http = require("http");
    var server;
    
    server = http.createServer();
    
    server.on('listening', function() {
        console.log(`Listening ${server._connectionKey}`);
    });
    
    var greetingRe = new RegExp("^\/greeting\/([a-z]+)$", "i");
    server.on('request', function(req, res) {
        var match;
    
        switch (req.url) {
            case "/": {
                res.statusCode = 200;
                res.statusMessage = 'OK';
                res.write("Hello World!");
                break;
            }
    
            default: {
                match = greetingRe.exec(req.url);
                res.statusCode = 200;
                res.statusMessage = 'OK';
                res.write("Hello, " + match[1]);
            }
        }
    
        res.end();
    });
    
    server.listen(8080, "127.0.0.1");

    Убираем балансировку и получаем тот же результат

  • Книга «Машинное обучение»
    +3

    Купил у них уже около 5 книг. Мне все ссылки на почту приходили, возможно у них проблема с отправкой почты на Ваш ящик. У меня ящик на gmail, с ним проблем нету.


    Тут не "лохотрон" а идеализированное представление о доставке контента через электронную почту. :)

  • Украина подверглась самой крупной в истории кибератаке вирусом Petya
    +1

    Согласно данным СБУ по вирусу Petya.A (состоянием на 21.00 по Киеву), вирус эксплуатирует уязвимость MS17-010
    Там есть рекомендации и ссылки на апдейты для всех версий Windows (на украинском)

  • Автопилот своими силами. Часть 1 — набираем обучающие данные
    0

    Очень впечатляет, продолжайте!

  • Урок photoshop. Как вырезать сложный объект из фона
    0

    Мне понравилось, очень познавательно. Кто, хоть раз верстал рекламу или дизайнил баннер, знает, как не просто сделать обрезку волос на портрете или вырезать из фона зверюшку.

  • Очередная node.js-библиотека…
    +1
    Мне стало интересно заглянуть в ядро koa и узнать, как реализована работа с Promise. Но я был удивлен, т.к. ядро осталось практически таким же, как в предыдущей версии. Авторы обеих библиотек express и koa одни и те же, неудивительно, что и подход остался таким же. Я имею ввиду структуру промежуточного ПО (middleware).

    koa принципиально отличается от express и подход там совершенно другой. Работа с промисами там сводится к тому что в обработчике запроса ассинхронные функции вызываются через async/await синтакс со всеми вытекающими плюшками.


    По поводу yeps-benchmark, там koa2 запускаеться через node-cluster, что на мой взгляд, не лучшее решение. И что пытаемся доказать, что роуты обрабатываються меделенее? Не спорю, но роуты это не часть koa, koa-router это сторонний middleware, роутинг не входит в базовую функциональность koa.


    Про простоту и элегантность я б еще поспорил. А ошибки как ловить?

  • Книга «Децентрализованные приложения. Технология Blockchain в действии»
    +3

    Никогда не интресовался Blockchain просто потому что для работы не нужно а для личного развития не хотел тратить на это время. Купил PDF-ку. Ликбез прошел успешно :) Интересна сама философия децетрализованых сетей.


    И поскольку я рыбак, то таким как я будет еще интересно узнать, что на обложке изображен
    розовый пилобрюх (Hoplostethus mediterraneus) или средиземноморский большеголов.


    Эта глубоководная рыба распространена в Атлантическом и в западной части Индийского океанов. Обитает на глубинах от 100 до 1175 метров. Розовый пилобрюх достигает в длину 42 сантиметров, имеет продолго-
    ватую форму тела, большие глаза и раздвоенный хвост.
    image

  • Еще один велосипед для борьбы с callback hell в JavaScript
    +2

    Еще про генераторы забыли. Они поддерживаться уже давно.

  • Распознавание чеков в Google Docs с помощью ABBYY OCR SDK
    0

    Если нужно поставить на поток попробуйте tesseract, там есть поддержка большого количества языков. Он, конечно же менее комфортен, но с подобным чеком справиться без поблем.


    Недавно обновились натренированные модели для многих языков

  • Предновогодний релиз API и портала Scorocode
    0

    :)
    Да, действительно, почему бы не использовать бесплатный Tesseract, установить нужные языки. Для многих документов этого было бы достаточно.

  • Нейронные сети на JS. Создавая сеть с нуля
    0

    Я недавно писал статью про машинное обучение на JS, там как раз очень нехватало такой теоретической части как у Вас. Я добавил линк на вашу статью. Очень хорошо и доступно получилось.

  • Нейронные сети на JS. Создавая сеть с нуля
    0

    Можете посмотреть еще мою статью:
    Нейронные сети на Javascript

  • Node.js 7.0.0 зарелизился. Встречайте async/await без babel
    0

    User.findById синхронный?

  • Node.js 7.0.0 зарелизился. Встречайте async/await без babel
    +1

    В том то и дело что async/await выглядит как синхронный код а выполняется асинхронно.


    Другими словами когда вы ждете ответа с базы вы не блокируете поток. В этот момент ваше приложение может обрабатвать другие запросы от пользователей.

  • Node.js 7.0.0 зарелизился. Встречайте async/await без babel
    +1

    А если вам нужно проверить не случилось ли ошибки при получении данных из базы
    try {
    user = await getUser();
    } catch (err) {
    // Error handling
    }
    Вы представляете во что превратиться Ваш код?


    async/wait это отличная конструкция для написания человек-читаемого и легко понимаемого кода. Потому что код выглядит как синхронный а виполняется асинхронно.


    Ваше заявление "С Promise получается короче" работает только для примитивных конструкций, для более сложных это не всегда справедливо

  • Node.js 7.0.0 зарелизился. Встречайте async/await без babel
    0

    Чтоб не блокировать исполнение других обработчиков. Например к вашему web-серверу пришло несколько запросов.

  • Node.js 7.0.0 зарелизился. Встречайте async/await без babel
    +1

    Напишите аналог на промисах через рекурсию

  • Node.js 7.0.0 зарелизился. Встречайте async/await без babel
    0

    Напишите аналог на промисах, у вас тут "независимая" обработка кажного юзера.

  • Node.js 7.0.0 зарелизился. Встречайте async/await без babel
    0
    let user,spammers = [];
    do {
        user = await getUser();
        if (await isSpammer(user)) {
            spammers.push(user)
        }
    } while (spammers.length <= 10 && user !== null);
    console.log(spammers)

    Ну и все это, конечно, внутри асихронной функции.

  • Node.js 7.0.0 зарелизился. Встречайте async/await без babel
    +3

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


    Слабо?

  • Node.js 7.0.0 зарелизился. Встречайте async/await без babel
    0

    Это не драфт, предложение находится в Stage 3 ("Candidate"), в следующем месяце будет частью стандарта Stage 4 ("Finished").

  • Node.js 7.0.0 зарелизился. Встречайте async/await без babel
    0

    А если в цикле?

  • Node.js 7.0.0 зарелизился. Встречайте async/await без babel
    0

    Если речь идет о Windows:


  • Микросервисы: пожалуйста, не нужно
    0

    Как-то однобоко получилось.
    Есть монолит, есть сервисы, есть монолит+сервисы. И то, и то востребовано в разработке.

  • Быстрый рендеринг с DOM шаблонизаторами
    0

    Слайды презентации: http://www.slideshare.net/profyclub_ru/dom-aviasalesru (чтоб "руками" ссылки не набирать :) ).


  • Пишем микросервис на KoaJS 2 в стиле ES2017. Часть II: Минималистичный REST
    0

    В мире nodejs самая популярная ORM для mysql это драйвер MySQL :).


    У себя в компании мы не используем ORM. В этой статье мы говорим про микросервис, у которого, как правило, количество кода и таблиц небольшое, сам микросервис сильно "заточен" под базу с которой он работает. От него требуеться быстродействие и минимальное потребление ресурсов.


    Вот некоторые ORM, на которые когда-то смотрел:


  • Пишем микросервис на KoaJS 2 в стиле ES2017. Часть II: Минималистичный REST
    0

    Так в новой редакции у меня так и есть. Там роутер производит 2 разных middleware: 1 сами роуты, 2 заглушка, котрая правильно отвечает на вызов недопустимого метода. Но ее теретически можно не подключать, от этого REST сильно в функциональности не потеряет. В первой редакции это было не так, там эксортился инстанс роута, а он сам по себе middleware не является. Для генерации основного middleware у него надо вызвать метод router.routes()

  • Пишем микросервис на KoaJS 2 в стиле ES2017. Часть II: Минималистичный REST
    0
    GET /product — без пагинации, без вывода нужных полей, а сразу все…

    А вы что хотели чтоб я вам здесь фреймворк написал? В статье столько кода, сколько нужно для демонстрации подхода Koa 2.


    Сохранение данных модели без валидации.

    Вы, видимо, еще очень начинающий программист — там все есть. Если это не так напишите мне SQL-инъекцию для этого сервиса.


    Про модель Product я вообще молчу.

    Да вы не молчите, пишите, не стесняйтесь, может мы разберемся где у вас проблемы.

  • Такая разная асинхронность
    +1
    Примечательно, что этот модуль — обёртка над node-fibers.
    Так это еще один плюс в копилку async/await. Смысл для такой "крутой техногии" даунгрейдится в "более примитивную". Кроме того, из обсуждения ниже понятно, что замеры производительности сомнительны даже для babel.

    Лучше я напишу в одном месте Future.fromPromise( p ).wait(), чем буду по всему коду раскидывать async и await.
    Сомнительная красота.

    В том-то и дело, что он не добавляет никакого нового синтаксиса. Только апи для запуска и переключения волокон.
    А что api меняться не может?

    Как я обожаю эту толерантность. Обе технологии выполняют одну и ту же функцию. Только одна прямо, хоть и не стандарт, а другая криво, хоть и почти-вот-вот-стандарт.

    Тут "толерантность" не совсем подходит, синергия в случає с модулем обёрткой над node-fibers.


    У node-fibers есть сильные стороны, которые вы уже перечислили но есть проблемы:


    • Есть некий талантливый разработчик Marcel Laverdet, который это все кодит. Ему сейчас интересно, репозиторий живой, но сильная зависимость от одного разработчика это риск для технологии. Ведь не всем она нравиться и ваша голосовалка говорит о том что даже после ваших блестящих аргунетов лидирует async/await


    • Бинарный код модуля это тоже проблема, т.к. есть облачные хостинги и среды с ограниченными возможностями по компиляции, где Вы не сможете собрать node-fibers.


    • Изомофный код, который становиться популярным в современных фреймворках не может использовать fibers, т.к. нету для него транспайлера.
  • Такая разная асинхронность
    +1

    Дискуссия async/await vs fibers началась несколько дней назад в коментах к моей статье Пишем микросервис на KoaJS 2 в стиле ES2017. Часть I: Такая разная ассинхронность. (название похоже или мне показалось :) ). Там эта цепочка не вызвала бурного обсуждения, но как я вижу, дискуссия не окончена.


    • Стандарт Async Functions будет принят в конце ноября, сейчас он в стадии 'Stage 3 ("Candidate")'. Это означает что Ваш код, написанный под этим синтаксисом меняться не будет и Вас нету рисков что-то переписывать.


    • Неккоректно сравнивать быстродействие async/await в совокупности с транспайлером babel, так как это не самая быстрая реализация этого синтаксиса. Если использовать модуль asyncawait то, по утверждению автора модуля, производительность составлячет 79% от callback-стиля оформления кода. Другими словами потеря в скорости несущественная. Ситуация может измениться в нативной реализации, которая вот-вот, появится.

    • Огромное количество модулей уже описаны промисами, вам стоит просто написать await и ваше приложение ассинхронно подождет.


    • То что у Fibers нету стандарта означает что синтаксис может претерпевать изменения, это существенно повышает риски долгосрочной поддержки такого кода.

    Мне симпатична технология Fibers, но я не понимаю зачем ей противопоставлять async/await. Обе имеют свои плюсы и минусы.

  • Пишем микросервис на KoaJS 2 в стиле ES2017. Часть II: Минималистичный REST
    0
    Нет не принят, из ES 2017 тут используется только синтаксис async/await, который находиться в стадии 'Stage 3 («Candidate»)', ожидаемое время стадии 'Stage 4 («Finished»)' конец ноября, до принятия «Async Functions»|осталось ждать несколько месяцев.
    Все остальные синтаксические конструкции из стандарта ES 2015.
  • Пишем микросервис на KoaJS 2 в стиле ES2017. Часть II: Минималистичный REST
    0
    Ну да
    console.log(Boolean(1)) // true

    Немного сложнее с датой, обычно для этого используют Moment.js:
    console.log(moment("2016-08-07 22:48:37",'YYYY-MM-DD HH:mm:ss').toDate() instanceof Date) // true


  • Пишем микросервис на KoaJS 2 в стиле ES2017. Часть II: Минималистичный REST
    0

    Вы правы, хотел минимизировать. Поправил код, теперь экспортрую 2 функции.