Тема: Node.JS + MongoDB
Показать сообщение отдельно
Старый 04.09.2013, 18:32   #14
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Node.JS + MongoDB

Сообщение от pax Посмотреть сообщение
Бенефит: в базе либо Int32 если секунды, либо double если миллисекунды.
Исходя из того как бд хранит данные и создаёт файлы с зазорами - это не даст практически никакой разницы, если конечно у тебя документы не просто _id и timestamp.
http://stackoverflow.com/questions/6...tes-in-mongodb

Сообщение от pax Посмотреть сообщение
PS: начинаю втягиваться, на первый взгляд сложнее чем на php, потому что надо писать асинхронный код, с другой стороны вроде как и интереснее получается.
На самом деле как привыкнешь, потом будет даже не сложнее.

Правда появяться некоторые "трудности", например запустить сразу 3 асинхронных функции, и потом финальную функцию, или сделать очередь асинхронных функций. Есть promise и async.js, но я как обычно юзаю свой вариант решения простой задачи:

function jobsQueue(jobs) {
  if (
jobs && jobs instanceof Array && jobs.length 0) {
    var 
count jobs.length;
    var 
= -1;
    var 
next = function() {
      if (++
count) {
        
jobs[i](next);
      }
    }
    
next();
  }
}

function 
jobsQueueAsync(jobscomplete) {
  if (
jobs && jobs instanceof Array && jobs.length 0) {
    var 
count jobs.length;
    var 
done = function() {
      if (--
count == && complete) {
        
complete();
      }
    }
    for(var 
0len jobs.lengthlen; ++i) {
      
jobs[i](done)
    }
  }

Первая запускает поочерёдно функции.
Вторая запускает все асинхронно и финальную когда все закончили.

Пользоваться так:
jobsQueue([
  function(
next) {
    ...
    
next();
  }, function() {
    ...
  }
]);

jobsQueueAsync([
  function(
next) {
    ...
    
next();
  },
  function(
next) {
    ...
    
next();
  }
], function() {
  ... 
done
}); 
Ну и тесты:
jobsQueue([
  function(
next) {
    
console.log('1');
    
next();
  },
  function(
next) {
    
console.log('2a')
    
setTimeout(function() {
      
console.log('2b');
      
next();
    }, 
400);
  },
  function(
next) {
    
console.log('3a');
    
setTimeout(function() {
      
console.log('3b');
      
next();
    }, 
100);
  },
  function() {
    
console.log('4');
  }
]); 
Выдаст: 1 2a 2b 3a 3b 4
Как видишь он даже не начинает выполнение следующей функции до выполнения прошлой.

jobsQueueAsync([
  function(
next) {
    
console.log('1');
    
next();
  },
  function(
next) {
    
console.log('2a')
    
setTimeout(function() {
      
console.log('2b');
      
next();
    }, 
400);
  },
  function(
next) {
    
console.log('3a');
    
setTimeout(function() {
      
console.log('3b');
      
next();
    }, 
100);
  } ],
  function() {
    
console.log('4');
  }
); 
Выдаст: 1 2a 3a 3b 2b 4
И тут видно что он запускает все сразу, но финальную только когда каждая функция запустит next() по завершению (асинхронно или нет).
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
pax (05.09.2013), SpiritSound (28.11.2015)