2012-08-10 11 views
5

मुझे एक वेब-स्तरीय सार्वजनिक साइट बनाने की आवश्यकता है जो 100 प्रश्न/सेकेंड को संभाल सकता है। मैं इसे इंटरएक्टिव बनाने के लिए अजाक्स का उपयोग करना चाहता हूं। अजाक्स सभी प्रमुख ब्राउज़रों और सभी उचित परिस्थितियों में बुलेटप्रूफ होना चाहिए (क्लाइंट के पक्ष से पृष्ठ को पुनरारंभ करना; पूरे रात टर्मिनल छोड़ने के बाद अगले दिन वापस आना; आदि) सर्वर एक वितरित लिनक्स फार्म होगा।

Jquery $ .post() ऐसा लगता है कि यह बिल फिट कर सकता है।

पुराने दिनों में, अजाक्स को सर्वर और क्लाइंट के बीच सॉकेट खोलने के लिए चालाक योजनाओं द्वारा कार्यान्वित किया गया था। यह दृष्टिकोण तब "अजाक्स पुश", ए.के.ए. "HTTP सर्वर पुश" या "धूमकेतु" का समर्थन करता है, जो एक दो-तरफा संचार पाइप है जो सर्वर को क्लाइंट को पैकेट शुरू करने की अनुमति देता है।

इस अजाक्स दृष्टिकोण के साथ मुख्य समस्या यह है कि यह अनिश्चित काल के लिए सर्वर पर एक सॉकेट से जुड़ा हुआ है। यह स्केल प्रतीत नहीं होता है। माध्यमिक समस्याएं हैं कि रात भर मॉडेम कनेक्शन तोड़ने से पाइप टूट जाएगी; एक सहेजे गए स्थानीय संस्करण से पृष्ठ को पुनः लोड करने से शायद लाइव पाइप फिर से स्थापित नहीं होगा; और अजाक्स को पहले स्थान पर काम करने के लिए विभिन्न ब्राउज़रों को विभिन्न अविश्वसनीय हैक्स की आवश्यकता होती है।

पोस्ट अनुरोधों के आधार पर अजाक्स के सख्त "क्लाइंट पुल" मॉडल का उपयोग करके, इन सभी कमियों को ठीक करने लगते हैं। अगर मैं बुलेटप्रूफ कार्यान्वयन सब्सट्रेट प्राप्त कर सकता हूं, तो मुझे अनिश्चित सर्वर पुश की क्षमता छोड़ने में प्रसन्नता हो रही है।

तो मैं एक साधारण
$.post('serverAjaxModule.php' ,
{mydata: Dataword },
function(output){ do_handle_results(output); });

मंगलाचरण है, जो कम से कम फ़ायरफ़ॉक्स और सफारी के लिए बहुत अच्छी तरह से काम करने के लिए लगता है का उपयोग कर रहा हूँ।

हालांकि, मुझे नहीं पता कि यह हुड के तहत क्या कर रहा है। मैं सीखता हूं कि .post .ajax के लिए एक मैक्रो है, और ऐसा लगता है कि .ajaxSetup और .ajaxStart जैसे कुछ कमांड हैं, जिनके नाम उन्हें आवश्यकताएं बनाने लगते हैं। और उसके बाद jquery-ui.min.js शामिल है, जो सेटअप के रूप में लगभग कुछ भी चल रहा है।

मेरे सवालों का है, तो:

  1. jQuery $ .post अच्छी तरह से पैमाने है बड़े पैमाने पर उपयोग करने के लिए?

  2. पुराना निरंतर-मुक्त सॉकेट प्रतिमान के साथ $ .post लागू किया गया है, या जब भी मैं क्लाइंट-पुल AJAX संदेश करता हूं तो यह एक नया सॉकेट कनेक्शन स्थापित करता है? निहितार्थ?

  3. मैं सही सोच कर कि मैं नहीं की जरूरत ऐसे .ajaxSetup है और न ही .ajaxStart, आदि के रूप में अतिरिक्त कुछ भी, कॉल करने के लिए कर में हूँ, और मैं बस आगे बढ़ो और किसी भी असामान्य परिणामों के बिना .post सफलतापूर्वक $ कॉल कर सकते हैं ?

  4. इस सुविधा के लिए jquery क्रॉस-ब्राउज़र कार्यक्षमता कितनी अच्छी है? क्या मैं बस मूल रूप से सभी उचित आधुनिक ब्राउज़रों के लिए काम कर रहा हूं, या क्या ऐसे ज्ञात हैं जिन्हें मुझे देखना है?

  5. प्राचीन ब्राउज़र के लिए अजाक्स प्रौद्योगिकी के लिए यह दृष्टिकोण कितना पीछे आता है? । पोस्ट राउंड-ट्रिप पोस्ट तकनीक का उपयोग कर रहा है, जो पूरी तरह से सार्वभौमिक और बुलेटप्रूफ होना चाहिए; फिर भी मुझे पुरानी तकनीक के साथ मामलों को याद आ रहा है जहां कुछ ब्राउज़र अजाक्स का समर्थन करने के लिए बहुत पुराने थे, और हमें श्रमिक रूप से इसके आसपास कोड करना पड़ा। क्या वे दिन चले गए हैं, अब, नई jquery के साथ? सभ्य अंतरराष्ट्रीय दुनिया में, गैर-अजाक्स समर्थन के बारे में मुझे चिंता करने की कितनी चिंता है?

  6. कुछ और देखने के लिए बाहर? यदि आप बड़े पैमाने पर स्केलेबल कार्यान्वयन का निर्माण शुरू कर रहे थे, तो सबसे महत्वपूर्ण बात यह है कि आप चाहते हैं कि किसी ने आपको गतिशील, इंटरैक्टिव वेब अनुभव बनाने के बारे में बताया हो?

आपकी तरह की सहायता के लिए बहुत बहुत धन्यवाद।

+0

+1 दिलचस्प प्रश्न –

+0

दोस्तों, कृपया अभी भी 5 और 6 जवाब दें ... रायडे क्या सोचते हैं? लोगों को पता चलो। चीयर्स। – DragonLord

उत्तर

3

$.ajaxSetup की आवश्यकता नहीं है, लेकिन यह उपयोगी है:

  • आप एक $.post आप समारोह और डिबगिंग से निपटने मुश्किल हो जाएगा एक त्रुटि को परिभाषित नहीं कर सकते हैं चलाते हैं - इस मामले में आप में एक सामान्य त्रुटि फ़ंक्शन परिभाषित कर सकते हैं $.ajaxSetup;
  • आप एक $.post और प्राप्त एचटीएमएल डेटा है कि आप दिखाने की जरूरत है चलाने के लिए और आप उन्हें करने के लिए घटनाओं के लिए बाध्य है, उसके तत्वों की जरूरत है - आप क्या ईवेंट हैंडलर्स इन नई वस्तुओं को फिर से लागू किया जाना चाहिए परिभाषित करने के लिए सक्षम हो जाएगा;

$.ajaxStart या तो आवश्यक नहीं है।

jQuery यूआई एक यूजर इंटरफेस कोर लाइब्रेरी है जो आमतौर पर कुछ अन्य पुस्तकालयों जैसे ड्रैग & ड्रॉप तत्व व्यवहार, क्रमबद्ध तत्व व्यवहार और कुछ विजेट जैसे accordion मेनू, मोडल संदेश बॉक्स इत्यादि के साथ पैक आता है .. यह तब तक जरूरी नहीं है जब तक इसकी आवश्यकता नहीं होती आप वास्तव में अपने फ्रंट-एंड बनाने के लिए अपने एपीआई का उपयोग करना चाहते हैं।

1 इसमें स्केलिंग के लिए कोई रचनात्मक कारण नहीं है (जिसे मैं जानता हूं); बेशक आप इसे सेट अप अनुरोध के साथ सर्वर हर मिलीसेकंड बल्लेबाज के लिए यदि आप कर सकते हैं सर्वर क्रैश (कई समवर्ती उपयोगकर्ताओं के साथ) कर सकते हैं या ब्राउज़र क्रैश (कनेक्शन खोलने की एक अनंत लूप के साथ) या दोनों करते हैं, लेकिन किसी भी मामले में कि बुरा शिल्प कौशल है

2 नहीं यह एक खुला सॉकेट

3 हाँ

4 यह अच्छी तरह से काम करता है IE6 सहित किसी भी ब्राउज़र रखना नहीं करता है - लेकिन कुछ ब्राउज़रों (जैसे IE6 के रूप में) की वजह से एक बड़ा मंदी का अनुभव हो सकता जावास्क्रिप्ट कोड की बड़ी मात्रा (और उनकी मेमोरी लीक)

5 IE6

  • ब्राउज़र एक लंबे समय के लिए खुला होने मूंगफली का मक्खन की तरह स्मृति खा;
  • JSON अपने दोस्त है -, मन में सामने के अंत तर्क के साथ अपने ऐप्लिकेशन का निर्माण HTML के साथ इसे बनाने नहीं है तार यह चीजों को पेचीदा पर भेजा (आप हर नई वस्तु को ईवेंट हैंडलर्स rebind करने की जरूरत है AJAX के माध्यम से प्राप्त किया, आपके पास एचटीएमएल के एक बड़े ब्लॉग के लिए थोड़ी स्वरूपण पहुंच जिसे आपने अभी प्राप्त किया है);
  • जेएसओएन के रूप में डेटा प्राप्त करें, JSON का उपयोग कर डेटा लिखने के लिए Mustache.js जैसे फ्रंट-एंड टेम्पलेट इंजन का उपयोग करें;

मेमोरी लीक और/या भरी हुई और अप्रयुक्त सामग्री आम तौर पर एक ताज़ा के बाद साफ़ हो जाते हैं - विशेष रूप से क्रोम में - यह बिना किसी गतिविधि के भी खोलने होने के, दूसरे हाथ पर फ़ायरफ़ॉक्स एक वास्तविक स्मृति muncher पर है 6-12 घंटे आप स्मृति उपयोग में वृद्धि देखेंगे।

+0

आपके विचारशील उत्तरों के लिए धन्यवाद, और उत्तर देने वाले पहले व्यक्ति होने के लिए धन्यवाद। – DragonLord

+0

प्रति पेज मेमोरी लीक, या प्रति ब्राउज़र निष्पादन सत्र हैं? यही है, अगर मैं किसी पृष्ठ को फिर से लोड या प्रतिस्थापित करता हूं, तो क्या यह पुराने बंद पृष्ठ के लिए उन लीक को मिटा देगा (या जीसी), या क्या वे बस ब्राउज़र के उदाहरण को मारने तक बस रहते हैं? [विशुद्ध सोच लेकिन मुझे पूछना है।] कोई बल्लेबाजी नहीं, लेकिन शायद 500 अजाक्स 2-3 घंटे में खींचती है। जेएस कचरा अप्रयुक्त वस्तुओं से आता है। यदि मैं संदर्भों को अनलिंक और साफ़ करता हूं, तो क्या जेएस जीसी उनकी देखभाल नहीं करेगा, या jQuery पुराने AJAX ऑब्जेक्ट्स के संदर्भ बनाए रखता है? यह ब्राउज़र जेएस कार्यान्वयन पर निर्भर करता है? इस मुद्दे पर अच्छा पकड़ो। जेएस/जेक्यू कमांड, रिसाव के लिए बाहर देखने के लिए आदेश? धन्यवाद। – DragonLord

+0

मैंने अपने शुरुआती उत्तर में एक प्रतिक्रिया संलग्न की है। –

0

ब्राउज़र पुरातत्व में एक विशेषज्ञ होने के बिना, मुझे लगता है कि पुराने ब्राउज़र के लिए कामकाज के रूप में धूमकेतु की यादें उचित अजाक्स का समर्थन नहीं कर रही हैं। धूमकेतु एक विदेशी विशेष मामला था, और आप सही हैं कि यह अक्सर खराब पैमाने पर स्केल करता है। हालांकि, मैं आज भी उपयोग में आने वाले ब्राउज़र में अजाक्स समर्थन के बारे में चिंता नहीं करता, यह एक हल समस्या होनी चाहिए।

+1

यह एक टिप्पणी नहीं होना चाहिए एक जवाब नहीं। –

संबंधित मुद्दे