Angular 5 - Promise vs Observable - контекст производительности

Он готов к событию, когда DOM (объектная модель документа) загружена.

Поскольку это событие происходит после того, как документ готов, это хорошее место для всех других событий и функций jQuery. Как и в примере выше.

Метод ready () указывает, что происходит, когда происходит событие готовности.

Совет. Метод ready () не должен использоваться вместе с.

1
задан levi 17 January 2019 в 11:54
поделиться

1 ответ

потому что вы меня заинтриговали. я создал такое же тестирование, которое выглядит следующим образом:

console.time('observable');
for(let i = 0; i < 10000; i++) {
  let user$ = of({
    name: 'yanis-git'
  });

  user$.subscribe(user => {
    // do something. Prefer not console.log because is ressource consuming.
  });
}
console.timeEnd('observable');

console.time('promise');
for(let i = 0; i < 10000; i++) {
  new Promise((resolve) => {
    resolve({
      name: 'promise'
    });
  }).then(user => {
    // do something. Prefer not console.log because is ressource consuming.
  });
}
console.timeEnd('promise');

и результат выглядит так (может отличаться в вашем браузере / настройке, но пропорция должна быть одинаковой:

observable: 34.060791015625ms
promise: 103.4609375ms

РЕДАКТИРОВАТЬ :

Другая реализация с асинхронной чертой внутри:

console.time('observable');
for(let i = 0; i < 10000; i++) {
  let user$ = Observable.create((o) => {
    setTimeout(() => {
      o.next({
        name: 'observable'
      });
    });
  });

  user$.subscribe(user => {
    // do something. Prefer not console.log because is ressource consuming.
  });
}
console.timeEnd('observable');

console.time('promise');
for(let i = 0; i < 10000; i++) {
  new Promise((resolve) => {
    setTimeout(() => resolve({
      name: 'promise'
    }))
  }).then(user => {
    // do something. Prefer not console.log because is ressource consuming.
  });
}
console.timeEnd('promise');

Результат близок, но раса побеждает благодаря наблюдаемой.

observable: 160.162353515625ms
promise: 213.40625ms

живая выборка [114 ]

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

0
ответ дан Yanis-git 17 January 2019 в 11:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: