Pull to refresh
4
0
Auru @Auru

User

Send message
Хотелось бы, чтобы шаблонизатор отдавал в этом случае пустую строку и избежать постоянного <% if (some.variable) { %>
Бизнес логика здесь непричем. Правильный инструмент для правильных задач, вот и все :) + валидация форм на клиенте и сервере одним кодом + переучить верстака со средним js и посадить на серверсайд в случае чего. Вся высшая математика и рассуждения идут лесом, если это некоммерческая инициатива :)
То есть вы не понимаете бонусов неболкирующего сервера, но для раздачи статики предлагаете на фронтенд неблок. сервер? :)
Да, и это проблема. Которая перетерта сотни раз :) Cluster уже включен в дистриб nodejs. частично решает проблему. Теперь 1 физический сервер можно загрузить вертикально и горизонтально.
Хорошая связка nodejs + mongodb с его шардингом — решение. Вот вам еще пример — 300 одновременных скачек фильма. Неблокирующий процесс будет ограничен жирностью канала, блокирующий памятью и количеством потоков в пуле. Пусть 280 подождут, пока первые 20 фильм скачают?
В задачи веб сервера не входит балансировка загрузки бд, бд имеет встроенные механизмы. Более того, пока бд думает, nodejs может также нагрузить файловую систему и остальное. И не обосрется на десятках тысяч одновременных соединений ( простейший пример — comet чат), как это сделает блокирующий сервер.
Очень хорошо ответ расписан здесь: habrahabr.ru/blogs/nodejs/128772/ с достоинствами и недостатками асинхронной событийной модели. Грубо говоря, при одновременном подключении 10000 пользователей томкат скушает память (при условии блокирующего IO, не знаю, может он неблокирующий, как nginx) посмотрите там графики расхода памяти для nginx и apache на одновременное количество подключений.

Вы говорите про горизонтальное масштабирование, я про вертикальное. С приходом модуля claster, (это типа серверный вебворкер) nodejs еще и горизонтально неплохо масштабируется.
Любая статья для ознакомления с nodejs начинается с объяснения этого :). В кратце — для того, чтобы не блокировать процесс ожиданием ответа бд или фс или любого другого внешнего ресурса.

Если перенести на клиент — представьте что вы выполняете синхронный ajax request (в jquery .ajax выставьте опцию async: false) Пока запрос сходит на сервер и вернется, ваш браузер подвиснет — вы ничего не сможете нажать, поскроллить и тп. Остановится выполнение js.

Асинхронный же вызов не блокирует среду. На сервере это особенно актуально — запросы к бд, чтение из файла, ресайз картинки — все отдается наружу, результат приходит в коллбеки. Пока наружные утилиты работают ваш js сервер продолжает обслуживать реквесты и раздавать задачи внешним утилитам.
Ну, это не беда. Раньше в node вместо обычных колбеков использовальсь промисы. Когда переходили на коллбеки, сделали convention — один коллбек, передавать два параметра — ошибку и респонс. Все библиотеки работают по этому принципу, но если вы привыкли иметь по индивидуальному коллбеку на ошибку и на респонс — пишется обертка в 5 строчек и вы пишете в своем привычном стиле:

Либо посмотрите модуль Do — Все высокоуровневые чейны, параллелы и индивидуальные коллбеки для ошибок и ответов.

Вы можете писать в любом удобном для вас стиле, оборачивать все, как вам удобно.
По слухам, Sync пока нестабилен. Буду рад, если опровергнете.
Работает Async и в браузере. Чем хуже JS приведенной выше вами Java при работе с SQL? Поясните разницу.
Ссылочки по теме: Async, Step
1. Проблема преувеличена, согласен.
2. Превеликое множество flow-control библиотек. Async в свое время очень помог, а сейчас появилась еще более красивая вещь — Step

Вот что Step c вашим кодом делает:

exports.processRequest = function (request, response) {
    Step(
        function getBookCount(){
            db.query('SELECT COUNT(id) FROM books', this);
        },
        function getBooks(err, count){
             if(err) throw err;
             db.query('SELECT * FROM bookData WHERE bookId IN (' + ids.join(', ') + ')', this);
        },
        function getMetaData(err, ids){
             if(err) throw err;
             db.query('SELECT * FROM bookData WHERE bookId IN (' + ids.join(', ') + ')', this);
        },
        function result(err, meta){
              return response(err, meta);
        }
    );


параллельный запуск еще красивее:
Step(
    // Loads two files in parallel
    function loadStuff() {
        fs.readFile(__filename, this.parallel());
        fs.readFile("/etc/passwd", this.parallel());
    },
    // Show the result when done
      function showStuff(err, code, users) {
          if (err) throw err;
          console.log(code);
          console.log(users);
    }
)


Также есть инструмент для параллельного запуска неизвестного заранее количества асинхронных методов и автоматический перехват ошибок степом внутри функций, которые мы можно отдать в финальный коллбек. Но самое лучшее, что происходит при использовании степа — это то, что эта библиотека окончательно формирует понятие о контексте в JS. Ну, при условии, что разработчик разобрался, как она работает :)
В Беларуси за два года ученые разработали уникальный комбайн для сборки огурцов, куда там испанскому клубничному харвестеру: www.youtube.com/watch?v=0CYQWxBjOaA&feature=player_detailpage#t=67s
Какая версия Mongoose текла и коматозила? В комментах вы упоминали, что все было написано за 8 месяцев. Вторая версия mongoose была выпущена меньше 2х месяцев назад, вроде переделали ее хорошо. Я сам отказался от первой — она не так сильно тормозила, как была сырая. Если у вас не взлетела вторая, значит, не стоит переходить на нее?
{
    title : "My First Post", author: "Jane",
    comments : [
        { by: "Abe", text: "First" },
        { by : "Ada", text : "Good post" }
    ]
}
db.blogposts.find( { "comments.by" : "Ada" } )
db.posts.find({}, {comments:{$slice: [20, 10]}}) // skip 20, limit 10
Что тут понимать, вы сами ответили на свой вопрос в первом комменте — я как раз frontend разработчик, так что nodejs + mongodb это мое все :) По поводу стабильности — plurk давно уже запустил свои realtime чаты на ноде, потом трезвонили на весь свет как все быстро летает, по тыщам блогов разошлось. В итоге вроде бы через год поменяли технологию, не подошла она чем-то. Хоть это и дела давно минувших, но даже сейчас не посоветовал бы запускать что-то нагруженное в продакшн на ноде. Но для быстрых проектов для разработчиков с фронтенд бекграундом — nodejs + expressjs + mongodb очень советую.
Я рад был бы узнать такую волшебную строчку.
Висит несколько сайтов, в основном магазины, на нодовском expressjs. Аптайм — полгода, не протекло ни капли, летает все отлично. Технология молодая, но уже не сырая. Модули добавляются и правятся постоянно, на гитхабе многие топовые пользователи — именно нодовские контрибьюторы.
1
23 ...

Information

Rating
Does not participate
Location
Беларусь
Registered
Activity