2011-11-09 13 views
5

मैंने यह देखने के लिए एक JSFiddle बनाया है कि मैं अपने ब्राउज़र में कितना डेटा डाल सकता हूं।ब्राउजर में जावास्क्रिप्ट कितना डेटा रख सकता है?

लिंक http://jsfiddle.net/GWxAk/

कोड सरल है। यह सिर्फ एक सरणी में जितना संभव हो उतना तार धक्का देने की कोशिश कर रहा है। तारों की अनुमानित लंबाई 300-310 वर्ण है।

मेरा प्रश्न है: क्या परिणाम इस बात पर निर्भर करता है कि मेरे पीसी पर मुझे कितनी मेमोरी मिली है? क्या यह ब्राउज़र में ब्राउज़र को वास्तव में अलग करता है?

उदाहरण के लिए यदि मेरे पास 8 जीबी रैम है तो मुझे और अधिक मिलेगा यदि मेरे पास 4 जीबी है?

var s = ''; 
for (var i = 0; i < 300; i++) { 
    s += 'a'; 
} 

array = []; 
count = 0; 

function doMore() { 
    for (var i = 0; i < 1000; i++) { 
     count++; 
     array.push(s + count); 
    } 
}; 

function repeat() { 
    doMore(); 
    document.body.innerHTML = 'size:' + array.length; 
    setTimeout(repeat, 100); 
} 

repeat(); 

मेरे मामले क्रोम में 14,850,000 पर लटका हुआ है और मैं राम लगभग 15 लाख आइटम की एक सरणी है कि 4 जीबी की है। बुरा नहीं मुझे लगता है कि

क्या आप लोग समान हैं? किसी कैसे जितना संभव हो उतना स्मृति ब्राउज़र को

+3

क्या आपके पास इसके लिए वास्तविक जीवन की स्थिति है, या आप बस काम पर ऊब गए हैं? – Matt

+0

मेरे पास मेरी मशीन पर 16 जीबी रैम है और मैंने थोड़ा सा बिंदु थोड़ा सा हो गया जहां आपने किया था। आप यहां मेरे स्क्रीनशॉट में देख सकते हैं http://screencast.com/t/3Xl31yGgHWC –

+0

ब्राउज़र की किसी प्रकार की सुरक्षा सुविधा की तरह दिखता है। मेरा एक ही नंबर पर बंद हो जाता है भले ही यह मशीन पर जो कुछ भी तनाव न हो। क्रोम और 16 जीबी रैम के साथ। – Toast

उत्तर

7

फिर से, मेरी मशीन 16 जीबी रैम के साथ। मैं ब्राउज़र रैम उपयोग चढ़ाई देख सकता हूं क्योंकि यह बढ़ता है, इसलिए मुझे लगता है कि यह रैम द्वारा भी सीमित है।

IE crapped out at 16,840,000 
Chrome at 14,850,000 
Firefox 32,890,000 
Safari recycles itself around 8,720,000 (LOL @ Apple) 

यहाँ स्मृति के उपयोग का एक स्क्रीनशॉट है और फ़ायरफ़ॉक्स http://screencast.com/t/3Xl31yGgHWC

+0

बहुत बहुत धन्यवाद। आपका जवाब बहुत उपयोगी है। – Zo72

2

मैं क्रोम पर हूँ देने के लिए

धन्यवाद बता सकते हैं और मैं अपने परीक्षण करने की कोशिश की और यह एक ही 14,850,000 तुम भी उल्लेख पर लटकी हुई है अगर मैं केवल 2GB RAM के लिए है और मैं अपने लिनक्स इंस्टॉलेशन के अंदर विंडोज़ के साथ एक वीएम चला रहा हूं, मैंने 700 एमबी रैम दिया है, इसलिए मुझे लगता है कि हाँ क्रोम की सीमा

+0

जब तक [हाल ही में] (http://code.google.com/p/v8/issues/विस्तार? आईडी = 847), वी 8 (क्रोम के जेएस इंजन) में 1 जीबी की हार्ड ऊपरी सीमा थी। यह तय है, लेकिन 32/64-बिट बिल्ड पर डिफ़ॉल्ट सीमा 700/1400 एमबी है। – josh3736

0

32-बिट मशीन पर आपकी ऊपरी सीमा हमेशा 4 जीबी होगी, नहीं, अगर एंड्स या बट। व्यावहारिक रूप से, यह मशीन के लिए जंगली रूप से अलग मशीन होगी (10+ टैब खुले होने के लिए असामान्य नहीं)

जाने का सबसे अच्छा तरीका: केवल उस डेटा को रखें जहां आपका उपयोगकर्ता सक्रिय रूप से काम कर रहा है या कुछ भी जिसे आप जल्दी से पुनर्प्राप्त नहीं कर सकते सर्वर आसान है। बाकी सब कुछ, जब उपयोगकर्ता इसके लिए पूछता है।

+0

वास्तव में, आप केवल 32-बिट पता स्थान के लगभग 2-3 जीबी का उपयोग करने में सक्षम होंगे। यह 32-बिट प्रक्रियाओं पर भी लागू होता है (यही कारण है कि 16 जीबी मशीनों पर भी यह बहुत जल्दी बंद हो जाता है)। नोट: इस उदाहरण में सरणी को न केवल बड़ी मात्रा में स्मृति की आवश्यकता होती है, इसके लिए बड़ी मात्रा में संगत स्मृति की आवश्यकता होती है! –

2

चलें UTF8 मान, जिसका अर्थ है अपने 'एक' 2 बाइट्स/8bits है।

  • 14.850.000 * 300 = 4455000000 पात्रों

  • 14850000 * 300 * 2 = 8.910.000.000 बाइट्स

  • 8910000000/1024 = 8,701,171.875 KB
  • (8910000000/1024)/1024 = 8,497.238159179688 एमबी
  • ((8910000000/1024)/1024)/1024 = 8.298084139823914 जीबी

इस प्रकार हम आपके परीक्षण से अनुमान लगा सकते हैं कि क्रोम जेएस इंजन में एक स्ट्रिंग की अधिकतम लंबाई 4,455,000,000 वर्ण या ~ 8.3 जीबी मेमोरी है।

लेकिन यह नहीं हो रहा है कि क्या हो रहा है।आपके पास केवल 4 जीबी रैम है, आंकड़ों के मुताबिक ~ 42 9 8 एमबी कहीं भी दिखाई नहीं दे रहा है, और वहां सरणी चर के ढांचे और जावा वीएम और क्रोम स्वयं आदि के लिए खाता आदि हैं

उल्लेख नहीं है कि आप ' एस + गिनती को फिर से दबाएं, इसलिए स्ट्रिंग को जोड़ने की लंबाई बढ़ रही है क्योंकि गिनती में अंकों की संख्या बढ़ जाती है। यदि एस वही था, तो इसकी संभावना V8 इंजन द्वारा स्मृति को सहेजने के लिए मूल्य को प्रशिक्षित किया जाएगा। संदर्भ के लिए, गिनती चर के कारण जोड़े गए अतिरिक्त वर्णों की संख्या, और इसकी लंबाई में गैर रैखिक वृद्धि के कारण 9, 7438,889 वर्ण या 185.85 एमबी डेटा है।

तो यहां कुछ और हो रहा है।

वी 8 जे एस इंजन की सीमा का सवाल है:

http://code.google.com/p/v8/issues/detail?id=847

32 बिट स्मृति पता स्थान ऊपरी सीमा है, और 64 बिट के लिए, उस लिंक ~ 1.9GB सुझाव है, हालांकि यह बहुत ज्यादा होने की संभावना है आपके ओएस का समर्थन करने की ऊपरी सीमा और शारीरिक रूप से उपलब्ध है।

तो संक्षेप में प्रस्तुत करने के लिए:

  • 32 बिट हमेशा एक ऊपरी बाध्य, अपने विशिष्ट js चर का नहीं होगा, लेकिन जे एस वी एम, रेंडरर, पृष्ठ सामग्री की पूरी बंडल के, आदि
  • आपका परीक्षा है काफी विश्वसनीय नहीं के रूप में आइटम यह गणना कर रहा है समान
  • अगर वे समान थे, आप तार

संपादित करने के विशेष मामले से निपटने का बेईमानी से गिर जाएगा नहीं कर रहे हैं:

+0

मैं यह सुनिश्चित करने के लिए गिनती करता हूं कि प्रत्येक स्ट्रिंग अलग है। मेरा परीक्षण विश्वसनीय है क्योंकि प्रत्येक आइटम को अद्वितीय होना चाहिए। – Zo72

+0

काफी नहीं, पहला आइटम 11 वें की तुलना में 1 वर्ण छोटा होगा, जो 101 वें से छोटा एक वर्ण होगा जो 1001 से अधिक वर्णों से छोटा होगा, क्योंकि बहुत अंत में संख्या बराबर इकाइयों की गणना नहीं कर रही है आकार (सामग्री के बावजूद), जैसा कि सरणी में जोड़ा गया अंतिम स्ट्रिंग प्रारंभिक स्ट्रिंग से काफी बड़ा है। –

+0

उदा।मेरी वैन में 50 डॉगनट्स होते हैं और आपके 20 डोग्नट्स होते हैं, एक अर्थहीन तुलना है यदि डोगनट्स बराबर आकार –

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