2012-10-16 16 views
13

मैं एक साधारण चार्टिंग टूल बना रहा हूं। जब कोई उपयोगकर्ता डेटा स्रोत और चार्ट प्रकार चुनता है, तो विशिष्ट चार्ट (.js) के लिए डेटा और स्क्रिप्ट दोनों लोड होते हैं और फिर कोड चार्ट प्रस्तुत करता है।वादे के हल्के कार्यान्वयन

वर्तमान में मैं निम्न क्रम का उपयोग करें:

  1. लोड चार्ट स्क्रिप्ट
  2. लोड डेटा
  3. चार्ट

प्रस्तुत प्रदर्शन में सुधार करने के लिए, मैं वादा करता है लागू करना चाहते हैं और समानांतर में स्क्रिप्ट और डेटा लोड करें। मेरी जरूरतों के लिए jQuery जैसी लाइब्रेरी बहुत बड़ी है (सवाल का मुद्दा इस पर बहस नहीं करना है), क्या अधिक हल्के समाधान हैं? शायद एक 1-2 केबी पुस्तकालय, या एक ट्यूटोरियल? फिर, यह समानांतर में केवल दो कार्यों के साथ एक बहुत ही बुनियादी कार्यान्वयन है।

[अपडेट] मैंने सभी उत्तरों को ऊपर उठाया क्योंकि वे सभी उत्कृष्ट दिखते हैं। मैं कुछ और परीक्षण करने के बाद वापस रिपोर्ट करूंगा।

+0

क्या आप केवल और विशेष रूप से वादे के बारे में जानना चाहते हैं? या आप समांतरता में सुधार करने के बजाय किसी भी तरीके से जानना चाहते हैं? यदि उत्तरार्द्ध कृपया शब्द को स्पष्ट करें। – hippietrail

उत्तर

4

मैंने कुछ समय पहले ऐसा कुछ बनाया जिसे मैंने "कब-फिर" कहा था। मैं कुछ ऐसा कहूंगा जो कहता है, "इन सभी चीजों को लोड करें, फिर कुछ करने के बाद कुछ करें"।

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

मैं वादे विचार से प्रेरित था, लेकिन सरल कार्य के लिए एक छोटे से सरल कुछ करना चाहता था।

+0

thx। मैंने आपके कोड की जांच की लेकिन पृष्ठ पर लोड होने पर एक स्क्रिप्ट समाप्त होने पर जांचने के लिए यह नहीं देखा गया था (मेरे अनुक्रम में सीएफ चरण 1)। – Christophe

+0

आपको तब-समय पर उपयोग करने की आवश्यकता नहीं है। असल में, इसका सेटअप इसलिए आपको करना है जब (function1, function2, function3) .then (function() {// func1-3 यहां किया जाता है}); पेज पर उदाहरण देखें। =) – Geuis

+0

क्षमा करें, मुझे अभी भी यह नहीं मिला है। मुझे कार्यों को लोड करने की आवश्यकता है, उन्हें निष्पादित न करें। उदाहरण के लिए: जब (jQuery लोड होता है और data.json लोड होता है) तब (रन कोड जो jQuery पर निर्भर करता है और data.json का उपयोग करता है)। – Christophe

0

async आज़माएं।

इसमें समानांतर और श्रृंखला में संचालन करने के तरीके हैं। इसे मूल रूप से नोड में चलाने के लिए डिज़ाइन किया गया था, लेकिन अब ब्राउज़र में भी काम करता है।

संपादित करने के लिए संपादित करें: उनके पास एक छोटा संस्करण नहीं है, इसलिए पूर्ण enchilada ~ 42kb है।

+2

Async वादे को लागू नहीं करता है। यह एक निरंतर प्रतिमान का उपयोग करता है जिसे "निरंतरता उत्तीर्ण" कहा जाता है। – hippietrail

+1

सच है, हालांकि, async फ़ंक्शंस के "समांतर" निष्पादन की अनुमति देता है, जो ओपी चाहता था (वादे इसे प्राप्त करने का एक ही तरीका है)। – Alan

+1

@hippietrail mea culpa, मैं वास्तव में समवर्ती भार का मतलब था। वायदा/स्थगित/वादे सबसे आम पैटर्न हैं और मैंने यह भी विचार नहीं किया कि अन्य तरीके भी हो सकते हैं। – Christophe

3

Deferred चेक करें इसमें मॉड्यूलर बिल्ड है, और आप केवल कोर लेने का निर्णय ले सकते हैं और यह 1kb से बड़ा नहीं होना चाहिए।

Browser install instructions कुछ ही आसान चरणों

13

मैं दृढ़ता से Promises/A specification है, जो JavaScript में वादे करने का मानक तरीका बनता जा रहा है के एक कार्यान्वयन उपयोग करने का सुझाव में इस तरह के बंडल बनाने का तरीका बताते हैं। वादे बेहतर काम करते हैं जब हर कोई एक ही स्वाद का उपयोग करता है, इसलिए यह संगत कार्यान्वयन का उपयोग करने के लिए हर किसी के हित में है।

Q शायद सबसे लोकप्रिय और पूरी तरह से विशेषताओं कार्यान्वयन है (यह भी jQuery और अन्य असंगत वादों ढल जाएगा) है, जबकि when और rsvp अधिक "हल्के" होना चाहिए रहे हैं।

+2

यह समझ में आता है, लेकिन मुझे वास्तव में उपयोगी होने के लिए विनिर्देश बहुत अस्पष्ट लगता है। उदाहरण के लिए jQuery क्या इसका पालन करता है स्पष्ट नहीं है। साथ ही, यह वास्तव में यह नहीं बताता कि लौटाया गया वस्तु (स्थिति और परिणाम) कैसे संरचित किया जाता है, इसलिए अभ्यास में आप विभिन्न स्वाद देखते हैं। – Christophe

+1

अब हमारे पास मानक का मसौदा है, और जाहिर है यह वादे/ए + विनिर्देश पर आधारित है। – Christophe

0

मैंने बहुत हल्का वादा पुस्तकालय बनाया है। यह एक अनुपालन नहीं है, लेकिन मुझे कुछ 2,000 लाइन लंबी नहीं चाहिए।

यह वादेज का एक कांटा है, लेकिन मैंने कुछ अच्छे जोड़े किए हैं।

रेपो का एक लिंक यहां दिया गया है। https://github.com/taylorhakes/promise-light

7

मेरे 2 ¢ में फेंकना चाहता था क्योंकि यहां एक विकास हुआ है।Promises have arrived natively in JavaScript और एफएफ 30 और क्रोम 33 के लिए लागू किया जाएगा (this table के अनुसार)।

हालांकि कि मुश्किल से एक जगह है कि आम तौर से भर रहा है में उल्लेख के लायक है "लेकिन यह IE6 का समर्थन करता है?", वहाँ एक 2KB न्यूनतम किया गया और gzipped polyfill here कि है "rsvp.js के मूल रूप से एक एपीआई remapping।"

चूंकि jQuery aren't really promises का वादा करता है, और मैं this guy से सहमत हूं कि वादा सिंटैक्स पुस्तकालयों में असंगत है, मेरा विचार यह है कि मूल वादे पहले से ही कार्यान्वित करने योग्य हैं, भले ही आपके उपयोगकर्ता के ब्राउज़र शायद उनका समर्थन नहीं करते हैं।


संपादित करें: कोणीय के संदर्भ और Firefox ऐड-ऑन-एसडीके, जो दोनों के बहुत Q के समान हैं में वादे इस्तेमाल करने के बाद, मैं पसंद है कि वाक्य रचना और पढ़ा है कि यह अभी भी तेजी से देशी कार्यान्वयन की तुलना में है।

1

यदि आप इसे वास्तव में हल्के वजन चाहते हैं, तो आपको sb-promise का प्रयास करना चाहिए, यह एमआईटी लाइसेंस के तहत है। यह केवल कुछ केबीएस है और मूल वादे के साथ एपीआई संगत है।

function myFunction(){ 
    return new Promise(function(resolve,reject){ 
    resolve({some:"data"}); 
    } 
} 
myFunction().then(function(result){ 
    console.log(result); // {some:"data"} 
}); 
संबंधित मुद्दे