Re: Fetch API, Promises Polyfill

안녕하세요.

좋은 내용을 소개해 주셔서 감사합니다.

얼마전에 Promise를 적용하려고 조사했던 polyfills 관련 정보 몇가지를 공유해드립니다.

1. 성능

아래는 성능 관련된 benchmark 링크입니다.

https://github.com/petkaantonov/bluebird/tree/master/benchmark


results for 10000 parallel executions, 1 ms per I/O op

file                                     time(ms)  memory(MB)
callbacks-baseline.js                         232       35.86
promises-bluebird-generator.js                235       38.04
promises-bluebird.js                          335       52.08
promises-cujojs-when.js                       405       75.77
promises-tildeio-rsvp.js                      468       87.56
promises-dfilatov-vow.js                      578      125.98
callbacks-caolan-async-waterfall.js           634       88.64
promises-lvivski-davy.js                      653      109.64
promises-calvinmetcalf-lie.js                 732      165.41
promises-obvious-kew.js                      1346      261.69
promises-ecmascript6-native.js               1348      189.29
generators-tj-co.js                          1419      164.03
promises-then-promise.js                     1571      294.45
promises-medikoo-deferred.js                 2091      262.18
observables-Reactive-Extensions-RxJS.js      3201      356.76
observables-caolan-highland.js               7429      616.78
promises-kriskowal-q.js                      9952      694.23
observables-baconjs-bacon.js.js             25805      885.55

Platform info:
Windows_NT 6.1.7601 x64
Node.JS 1.1.0
V8 4.1.0.14
Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz × 4


브라우저 별 성능 테스트 자료는 찾지 못해서 HTML5ROCKS 샘플(
http://www.html5rocks.com/ko/tutorials/es6/promises/ )을
이용해서 직접 수행했습니다. 대상 라이브러리는 rsvp, bluebird를 이용했고, XHR 구현도 같이 테스트 했습니다. 값이 작을
수록 더 나은 성능입니다.
참고로 아래 메일에 있는 Promises Polyfill은 rsvp의 subset입니다.

 RSVP  Bluebird  XHR
 IE6  427  776  422
 IE8  304  367  553
 IE9  347  291  494
 Chrome  109  115  286


2. 브라우저 하위호환성

Internet Explorer는 최신 버전인 11에서도 promise를 지원하지 않아 polyfill을 사용해야 합니다.
하지만, 대표적인 polyfill인 rsvp, bluebird의 경우 Internet explorer 9부터 지원되는
Array.reduce, Array.map, Array.forEach를 사용하고 있어서 IE6~8과 같은 구형 버전 Internet
Explorer를 지원해야 하면
es5-shims ( https://github.com/es-shims/es5-shim/blob/master/es5-shim.js )를
포함시켜야 합니다.

또한 구형 버전에서는 Promise 메소드 중 catch가 ECMAScript 예약어 catch와 충돌이 발생됩니다.
.catch()대신 ["catch"]()를 사용하면 회피할 수 있습니다.


감사합니다.
김욱래
-------------------------------------------------
김욱래 이사 / 연구개발본부, (주)인스웨이브 시스템즈
-------------------------------------------------
Tel    : 02-2082-1431     Mobile : 010-3791-6175
Fax    : 02-2082-1410     Email  : wlkim@inswave.com
Addr  : 152-790
         서울특별시 구로구 구로 3동 182-13 대륭포스트타워 2차 414호
홈페이지 : http://www.inswave.com

웹스퀘어 : http://www.websquare.co.kr

기술지원 : https://www.inswave.com/support

-------------------------------------------------


2015년 4월 29일 오후 5:08, Sangwhan Moon <sangwhan@iki.fi>님이 작성:

> 추가 내용입니다.
>
> Fetch: https://github.com/github/fetch

> Promises: https://github.com/jakearchibald/es6-promise

>
> (개인적으로 사용을 해본적이 없어, 라이브러리 자체에 대한 질문은 깃헙 프로젝트 오너한테 하시는게 빠를겁니다. ^^)
>
> 감사합니다.

Received on Saturday, 2 May 2015 22:30:28 UTC