2012-10-16 2 views
13

저는 간단한 차트 작성 도구를 구축 중입니다. 사용자가 데이터 소스와 차트 유형을 선택하면 특정 차트 (.js)에 대한 데이터와 스크립트가 모두로드 된 다음 코드가 차트를 렌더링합니다.가벼운 구현 약속

가 현재 나는 다음과 같은 순서로 사용 성능을 향상시키기 위해 차트

렌더링

  1. 로드 차트 스크립트
  2. 로드 데이터
  3. 을, 나는 약속을 구현하고 싶습니다 스크립트와 데이터를 동시에로드 할 수 있습니다. jQuery와 같은 라이브러리가 내 요구에 너무 큽니다. (질문의 요점은이 문제에 대한 논쟁이 아닙니다.) 더 가벼운 솔루션이 있습니까? 1-2kb 라이브러리 또는 튜토리얼일까요? 다시 말하지만,이 작업은 병렬로 두 가지 동작 만있는 매우 기본적인 구현입니다.

    [업데이트] 모든 답장이 모두 훌륭해 보였습니다. 더 많은 테스트를 한 후에 다시보고하겠습니다.

+0

약속에 대해서만 구체적으로 알고 싶습니까? 또는 병렬 처리를 향상시킬 수있는 방법을 알고 싶습니까? 후자의 경우 문구를 분명히하십시오. – hippietrail

답변

4

"나는 그때"라고 불렀다. 나는 "이 모든 것들을로드하고 완료되면 무언가를하십시오"라고 말할 수있는 것을 원했습니다.

https://github.com/geuis/when-then

내가 약속 아이디어에서 영감을하지만, 간단한 작업을위한 약간의 간단한 무언가를 원했다.

+0

thx. 귀하의 코드를 체크 아웃했지만 스크립트가 페이지에서 로딩을 완료했는지 확인하는 방법을 보지 못했습니다 (cf. 단계 1 참조). – Christophe

+0

when-then을 사용하여 확인할 필요가 없습니다. 기본적으로 설정은 (function1, function2, function3) .then (function() {// func1-3 여기에서 완료})입니다. 이 페이지의 예제를보십시오. =) – Geuis

+0

미안하지만, 아직 이해가 안갑니다. 함수를로드하고 실행하지 않아야합니다. 예를 들면 : (jQuery가로드되고 data.json이로드 될 때) (jQuery에 의존하고 data.json을 사용하는 코드를 실행한다). – Christophe

0

시도 async.

작업을 병렬로, 그리고 연속적으로 처리하는 방법이 있습니다. 원래는 노드에서 실행되도록 설계되었지만 지금은 브라우저에서도 작동합니다.

편집 할 항목 : 확장 버전이 없으므로 전체 엔칠 랜드는 ~ 42kb입니다.

+2

Async가 약속을 전혀 구현하지 않습니다. 그것은 "연속 통과"와 관련이없는 관련없는 패러다임을 사용합니다. – hippietrail

+1

사실, async는 OP의 "병렬"실행을 허용합니다. 이것은 OP가 원했던 것입니다 (약속은이를 달성하는 한 가지 방법 일뿐입니다). – Alan

+1

@hippietrail mea culpa, 나는 동시로드를 의미했다. 선물/이연/약속이 가장 일반적인 패턴이며 다른 방법이있을 수 있다고 생각조차하지 않았습니다. – Christophe

3

확인하십시오. Deferred에 모듈러 빌드가 있고, 코어를 가져 가도록 결정할 수 있으며 1kb보다 크지 않아야합니다.

Browser install instructions 내가 강력하게 자바 스크립트로 약속을하는 표준 방법이되고있는 Promises/A specification의 구현을 사용하는 것이 좋습니다 몇 가지 간단한 단계

13

이러한 번들을 작성하는 방법에 대해 설명합니다. 약속은 모든 사람이 같은 맛을 사용할 때 더 잘 작동하므로 호환되는 구현을 사용하는 것이 모든 사람의 관심사입니다. whenrsvp 더 "경량"있어야하는 동안

Q 아마 가장 인기있는 완벽한 기능 구현, (그것은 또한 jQuery를 다른 호환되지 않는 약속을 적용한다).

+2

이것은 의미가 있지만 스펙이 너무 모호하여 실제로 유용하지 않습니다. 예를 들어 jQuery가 그것을 준수하는지 여부는 명확하지 않습니다. 또한 반환 된 객체 (상태 및 결과)가 어떻게 구성되어 있는지 실제로 알려주지 않으므로 실제로는 다른 맛을 보게됩니다. – Christophe

+1

이제 표준 초안을 작성했으며, 이는 약속/A + 사양을 기반으로합니다. – Christophe

0

매우 가벼운 약속 라이브러리를 만들었습니다. A 호환이 아니지만 2,000 라인 정도의 길이를 원하지 않았습니다.

그것은 promisejs의 포크이지만, 몇 가지 좋은 추가했다.

여기에 repo에 대한 링크가 있습니다. https://github.com/taylorhakes/promise-light

7

여기에 발전이 있었으므로 제 2 ¢를 던져달라고했습니다.Promises have arrived natively in JavaScript이며 FF 30 및 Chrome 33 (this table에 따라)에 대해 구현됩니다.

일반적으로 "IE6를 지원합니까?"라고 물들어있는 곳에서는 거의 언급 할 가치가 없지만 "기본적으로 API 매핑을 rsvp.js"인 2 킬로바이트 및 gzip으로 압축 된 polyfill here이 있습니다.

jQuery가 약속 한 aren't really promises이고 약속 구문이 라이브러리간에 일치하지 않는다고 동의하는 바에 의하면 사용자의 브라우저가 아직 지원하지 않을지라도 네이티브 약속은 이미 구현할 가치가 있다고 생각합니다.


편집 : Q 매우 유사 둘 다 각도의 맥락과 파이어 폭스 부가 기능-SDK에 약속을 사용한 후, 나는 구문과이 빠른 네이티브 구현에 비해 여전히 읽었습니다 것을 선호합니다.

1

정말로 가볍게하려면 sb-promise을 시도해야합니다. MIT 라이센스에 속합니다. 그것은 단지 몇 kbs이고 API는 기본 약속과 호환됩니다.

function myFunction(){ 
    return new Promise(function(resolve,reject){ 
    resolve({some:"data"}); 
    } 
} 
myFunction().then(function(result){ 
    console.log(result); // {some:"data"} 
});