• Правильно ли я понимаю принцип работы cluster в NodeJS?

    icelaba
    @icelaba
    Знаю и умею всё
    cluster.isWorker равен в ноде !cluster.isMaster
    об этом прямо сказано в доках (it is the negation of cluster.isMaster) поэтому оборачивать не обязательно раз уже есть if(cluster.isMaster){}else

    child процессы понимают что они не мастера по переменной process.env.NODE_UNIQUE_ID если определена то я worker.

    Все это можно посмотреть напрямую в коде cluster тут https://github.com/joyent/node/blob/master/lib/clu...
    см. function createWorkerProcess(id, env)
    Ответ написан
    Комментировать
  • Есть ли лучше способ перейти от event-ов к callback-у в NodeJS?

    Вот ещё варианты:
    var SuperModule = require('SuperModule');
    var start_ = SuperModule.prototype.start;
    
    SuperModule.prototype.start = function(cb){
        var fn = onceDelegate(cb);
        this
            .once('started', fn)
            .once('error', fn)
            ;
        start_.call(this);
    };
    
    function onceDelegate(fn) {
        return function(){
            var x_ = fn;
            fn = null;
            x_ && x_.apply(null, arguments);
        };
    }
    
    
    // ИЛИ, если сделать более общим:
    function callbackInjector(Ctor, method, events) {
        var orig_ = Ctor.prototype[method];
        
        Ctor.prototype[method] = function(){
            var args = Array.prototype.slice.call(arguments),
                cb = args.pop(),
                listener = onceDelegate(cb),
                imax = events.length,
                i = -1
                ;
            while(++i < imax) this.once(events[i], listener);
            return orig_.apply(this, args);
        }
    };
    
    callbackInjector(SuperModule, 'start', ['started', 'error']);
    Ответ написан
    Комментировать
  • Есть ли лучше способ перейти от event-ов к callback-у в NodeJS?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Используйте адаптер. Типа такого:
    var SuperModuleAdapter = function () {
        this.adapted = new SuperModule() 
    }
    
    SuperModuleAdapter.prototype = {
        start: function (callback) {
            var cb = function(err){
                this.adapted.removeListener('error', cb);
                this.adapted.removeListener('started', cb);
                callback(err); // err == null при started
            }
            this.adapted.on('started', cb);
            this.adapted.on('error', cb);
            this.adapted.start();
        }
    }
    Ответ написан
    1 комментарий
  • Есть ли смысл кешировать "локально" результаты запросов mongodb в NodeJS?

    mahnunchik
    @mahnunchik
    https://about.me/vlasenko
    Если появилось желание написать свой кэш, то стоит сделать шаг назад и ещё раз подумать над архитектурой.

    Ответ: Локально кешировать результаты из монги однозначно не стоит.

    А теперь подробнее:
    В монге кэш достаточно хитрее чем сохранение последнего результата. (docs.mongodb.org/manual/faq/fundamentals/#does-mon...) Мога может хранить в оперативке только индексы и прирост в производительности "кеширование" происходит только когда все необходимые запросу поля входят в индекс, а индекс в свою очередь в оперативке после предыдущего запроса к этой же коллекции.

    Варианты решения:
    1) Если данные меняются часто (минуты) - то как вариант монга, соответственно без "своего" кеширования. Но если данные (строки локализации, меню) ложатся на структуру ключ/значение, то целесообразно использовать что-то более предназначенное для "быстрого" чтения типо redis или при мультинодовой архитектуре то etcd
    2) Если данные меняются редко (дни) - то обычные файлы с локализациями (загрузка при старте апы) будут оптимальным вариантом=)
    Ответ написан
    1 комментарий
  • Использование display: table - зло?

    @stas3572
    Потому что в сети куча старой информации, переписанной и перепощенной 100500 раз.

    Если вкратце, и отбрасываем flex'ы:

    Есть float - он справляется на ура, нужно только не забывать его очищать.

    Есть inline-block - он прекрасен, до тех пор пока вы не сталкиваетесь с проблемой появления отступов между колонками (пробелов между блоками) - вам приходится обнулять font-size у row + display table для сафари на него вешать, а после объявлять font-size у дочерних col'а элементов (хотя есть и другие способы, но этот оптимальный).

    А можно и просто верстать теплыми ламповыми "таблицами", только по-человечески, на display table, table-row, table-cell. Нюансы - нюансы таблиц, больше к сожалению не подскажу, на деле сам сильно не завязывался на таблицах, всех нюансов не знаю.

    Попробуйте каждый, почитайте познакомьтесь и выберите тот, что вам удобнее
    Ответ написан
    Комментировать
  • Использование display: table - зло?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Если не смущает поддержка старых версий браузеров, то почему сразу не flex-box?
    Ответ написан
    2 комментария
  • Как лучше организовать доступ к REST API

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ключи передаются в заголовках, а не в get/post параметрах. Так что с кешированием никаких проблем.
    Ответ написан
    Комментировать