2009-05-22 26 views
9

प्रारंभ करने के लिए एक और सामान्य प्रश्न। अगर यह एक JSON अनुरोध है, तो AJAX अनुरोध के प्रतिक्रिया आकार की कोई सीमा है?AJAX अनुरोध ब्राउज़र सीमा

मैं जेएसओएन अनुरोध के माध्यम से बड़ी मात्रा में डेटा पास कर रहा हूं और एफएफ 3 में 'स्क्रिप्ट स्टैक कोटा थका हुआ' संदेश में चल रहा हूं। अब एफएफ 2 में कोटा 4 एमबी था लेकिन एफएफ 3 में यह 640 केबी है। मैं सोच रहा हूं कि यह किसी भी तरह JSON विशिष्ट है या नहीं। क्या सामान्य AJAX अनुरोधों में प्रतिक्रिया आकार सीमा होती है? एक ब्राउज़र द्वारा लगाया जा सकता है? यदि गैर-JSON अनुरोध में स्क्रिप्ट स्टैक कोटा के साथ समान समस्याएं नहीं हैं, तो मैं वापस आने वाले डेटा को कैसे वर्गीकृत कर सकता हूं? एक्सएमएल शायद ... मुझे यकीन नहीं है कि अगर मैं ऐसा करने के लिए अपने डेटा के साथ w3c spec की सीमाओं के भीतर होगा।

उत्तर

2

मुझे संदेह है कि यदि आप डेटा प्राप्त कर रहे हैं तो सीमाएं अलग हैं, इसलिए मुझे लगता है कि यह क्लाइंट को डेटा भेजने के आसपास है। JSON वास्तव में एक डेटा प्रकार है, वास्तव में। आप वास्तव में क्या कर रहे हैं, संदेह है, जावास्क्रिप्ट स्क्रिप्ट के लिए एक GET अनुरोध कर रहा है जो उचित आकार तक सीमित होना चाहिए। JSON के लिए विकी यह भी कहता है कि XMLHTTPRequest विधि का उपयोग करें, जो आपकी सीमा के आसपास हो सकता है, लेकिन आपको अभी भी क्रॉस-डोमेन स्क्रिप्टिंग सीमाओं से बचने के लिए प्रॉक्सी की आवश्यकता होगी और एक अधिक समझदार माइम-प्रकार, जैसे HTML, xml, बाइनरी इत्यादि का उपयोग करना होगा। यदि आप JSON में कोई भी चित्र डाल रहे हैं तो याद रखें कि वे लिंक हो सकते हैं क्योंकि उन अनुरोधों के साथ कोई क्रॉस-डोमेन समस्या नहीं है।

डबल चेक के साथ-साथ यह आपको परेशानी के कारण अनुरोधों की संख्या नहीं है, ब्राउज़र में भी सीमाएं हैं। कभी-कभी 2.

1

सामान्य नियम के रूप में मैं अपना AJAX डेटा छोटा रखने की कोशिश करता हूं। अगर मुझे बड़ी मात्रा में डेटा पास करना है तो मैं इसे कई कॉल के साथ पुनर्प्राप्त कर दूंगा। इसलिए यदि मैं एक टेबल लोड कर रहा हूं, तो मेरे पास एक विधि होगी जो मुझे बताएगी कि कितने रिकॉर्ड लौटाए जा रहे हैं, और मुझे # (आमतौर पर मेरे लिए 20) के समूहों में रिकॉर्ड वापस करने के लिए एक और तरीका है।

ऐसा करने का अच्छा हिस्सा यह है कि मैं पृष्ठ को लोड कर सकता हूं क्योंकि मैं डेटा पुनर्प्राप्त करता हूं, और उपयोगकर्ता एक बड़े पेलोड की प्रतीक्षा नहीं कर रहा है।

इसके अलावा, XML के बजाय JSON का उपयोग करना बेहतर होगा। जेएसओएन आमतौर पर एक्सएमएल की तुलना में एक छोटा पेलोड होता है, और कई परीक्षणों से पता चलता है कि ब्राउज़र को इसे लोड करना आसान है।

3

आईआईआरसी यह पिछले साल एफएफ 3 पर एक बग था लेकिन मुझे विश्वास है (हाँ, इसे here चेक किया गया है) तय की।

Note: this test is dependent upon architecture and available memory. On a x86_64 machine with 2G and a 64bit build, it will fail with InternalError: script stack space quota is exhausted however on a x86_64 with 4G and a 64bit build it will pass.

टिप्पणियों को भी पढ़ा है कि यह एक शुद्ध जे एस समस्या है, जिसका अर्थ है, हालांकि डेटा स्वरूप सख्ती से कोई फर्क नहीं होगा, JSON के बहुत बड़े हिस्से जे एस ढेर झटका हो सकता है: टिप्पणियाँ हालांकि नीचे देखते हुए, इस टिप्पणी है जहां एक्सएमएल तार नहीं हो सकता है। मुझे लगता है कि आपको बस कोशिश करनी है।

ओटीओएच, यह निश्चित चिह्नित है, इसलिए यह सुनिश्चित करने का एक प्रश्न है कि आप एफएफ के नवीनतम संस्करण पर भी हैं।

1

मुझे किसी भी वास्तविक सीमा का सामना नहीं हुआ है, लेकिन आपकी उपयोगकर्ता इंटरएक्टिविटी, बड़े डेटा को एकाधिक कॉल में तोड़ देती है। बड़ी टेबल हमेशा AJAX के माध्यम से स्थानांतरित करने के लिए लेती हैं, खासकर यदि उपयोगकर्ता आईई चला रहा है। बड़ा डेटा + अजाक्स + आईई = आईई दुर्घटना।

2

मुझे लगता है कि अन्नकाटा सही है।

त्रुटि संदेश का पाठ यह भी सुझाव देता है कि समस्या आपके जेसन संरचना की गहराई के कारण होती है, न कि केबी आकार।

इसका अर्थ यह है कि जब आप अपने जेसन को eval करते हैं, तो जावास्क्रिप्ट इंजन जेसन को पार्स करने के दौरान एक ढेर का उपयोग करता है। यह स्टैक आपकी जेसन संरचना में गहराई (नेस्टेड तत्वों की संख्या) के कारण अपनी अधिकतम सीमा को मार रहा है।

आप यह जांचना चाहेंगे कि आपकी आवश्यकताओं के लिए कुछ हद तक चापलूसी संरचना संभव है या नहीं।

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