2012-08-06 18 views
32

मुझे एक समस्या है जहां मोबाइल सफारी क्रैश हो जाती है जब jQuery के साथ डीओएम लोड और मैनिपुलेट करते समय पृष्ठ बहुत बड़ा हो जाता है।आईओएस पर मोबाइल सफारी बड़े पृष्ठों पर क्रैश

मुझे आईफोन और आईपैड दोनों पर एक ही समस्या मिलती है।

त्रुटि खोजने के लिए मोबाइल पृष्ठों की समस्या निवारण का सबसे अच्छा तरीका क्या है? क्या कोई ज्ञात समस्याएं हैं जो मोबाइल सफारी को दुर्घटनाग्रस्त कर सकती हैं?

+0

बहुत बड़ा क्या है? क्या यह पुन: उत्पन्न करने योग्य है? क्या आपके पास दुर्घटना दिखाने के लिए एक कामकाजी उदाहरण है? क्या आपने अन्य ब्राउज़रों (क्रोम, एफएफ) पर परीक्षण किया या नहीं? वही मुद्दा? – rene

+0

यह एक मंच साइट है और यह तब होता है जब थ्रेड लगभग 100 टिप्पणियों से अधिक हो जाता है। मुझे यह किसी भी डेस्कटॉप ब्राउजर पर नहीं मिला है, लेकिन जब उपयोगकर्ता प्रमाणीकृत होता है तो हमेशा मोबाइल सफारी पर। –

+0

मुझे लगता है कि मैंने इसे जावास्क्रिप्ट कोड के एक हिस्से में संकुचित कर दिया है, लेकिन मुझे अभी भी यह समझ में नहीं आता कि इसका क्या कारण है। मुझे लगता है कि मुझे सब कुछ हटाना है और फिर थोड़ा सा बिट सक्षम करना है और यह टूटने पर देखें। –

उत्तर

27

मुझे वास्तव में समस्या मिली। जैसा कि मैंने सोचा था, जेएस के साथ नहीं था, लेकिन सीएसएस के साथ। मैंने कुछ तत्वों में फीका करने के लिए सीएसएस संक्रमण करने के लिए कक्षा को जोड़ा। अज्ञात उपयोगकर्ताओं के लिए इन तत्वों में display: none; था और शायद कभी अस्पष्टता संक्रमण नहीं चला।

अजीब बात यह है कि संक्रमण वास्तव में दो तत्वों पर था। तो यह 100+ टिप्पणियों के साथ लंबे धागे पर क्यों दुर्घटनाग्रस्त होगा?

तो नीचे की रेखा है: -वेबिट-संक्रमण ने मोबाइल सफारी पर पृष्ठ को क्रैश कर दिया।

12

किसी भी आईओएस ऐप के साथ मुख्य मुद्दा स्मृति उपयोग है। तो, यह संभावना है कि आपके पृष्ठ बहुत अधिक स्मृति का उपयोग कर रहे हैं।

मोबाइल सफारी कुछ चालाक तकनीक का उपयोग करें ताकि पूरे पृष्ठ को किसी भी समय स्मृति में रहना न पड़े, केवल इसका एक हिस्सा। हो सकता है कि आप जांच सकें कि आपके पृष्ठ में कुछ भी इस तंत्र को पराजित करता है या इसे कम प्रभावी बनाता है।

किसी भी मामले में, बिंदु सुझावों को और अधिक देने के लिए, आपके पृष्ठ के बारे में अधिक जानकारी वास्तव में महान होगी।

वैसे, आप डिवाइस स्टोर की क्रैश लॉग से कुछ संकेत प्राप्त कर सकते हैं।

  1. जनरल
  2. बारे
  3. निदान & प्रयोग
  4. निदान & उपयोग डेटा

यह एक स्मृति समस्या नहीं है, तो आप खोजना चाहिए: यदि आप सेटिंग्स के तहत इसे पा सकते हैं देखने के लिए जांचें कुछ "सिग्नल (0)" की तरह; सुनिश्चित नहीं है कि इसका मतलब केवल "स्मृति उपयोग के कारण मारा गया" हो सकता है, लेकिन मुझे आमतौर पर यह संकेत मिलता है जब मुझे सिग्नल (0) मिला।

अन्यथा, यह आपको बता सकता है क्या गलत है ...

आशा इस मदद करता है।

+1

कृपया, क्रैश लॉग का निरीक्षण करने के बारे में मेरे संपादन की जांच करें ... – sergio

+0

आप कैसे कह सकते हैं, "यह जांच सकता है कि आपके पृष्ठ में कुछ भी [मोबाइल सफारी की चालाक स्मृति-बचत तंत्र] को पराजित करता है या इसे कम प्रभावी बनाता है"? – davidtheclark

3

मेमोरी सीमाएं और जावास्क्रिप्ट निष्पादन समय सीमा दोनों हैं, हालांकि यह थोड़ा अस्पष्ट है कि आप वास्तव में उन लोगों को कैसे मार सकते हैं। आम रिपोर्टें आती हैं कि 10 एमबी से अधिक आकार वाले पृष्ठ में समस्याएं होंगी, और जावास्क्रिप्ट निष्पादन 10 सेकंड तक सीमित है।

अधिक जानकारी के लिए Apple's documentation देखें।

+0

स्वैप किए बिना एम्बेडेड प्लेटफॉर्म का यह एक अनिवार्य परिणाम है। एक बार मुख्य मेमोरी भरने के बाद, आउट-ऑफ-मेमोरी त्रुटियां शुरू होने जा रही हैं। यदि 10 एमबी काफी छोटा लगता है, तो याद रखें कि सफारी किसी भी समय टैब में कुछ खुले हो सकते हैं - हालांकि यह चुपचाप स्मृति दबाव के जवाब में छिपे हुए टैब की पृष्ठ सामग्री को त्याग देता है। – marko

+0

@ मार्को यह एक स्पष्ट सफारी बग और संभावित सुरक्षा समस्या है। सिस्टम को जितना संभव हो उतना स्मृति मुक्त करने की आवश्यकता होती है जब सिस्टम उन्हें सूचित करता है और क्रैश नहीं होता है।सफारी को स्नैपशॉट्स लेना चाहिए और स्मृति से बाहर होने पर उन्हें प्रदर्शित करना चाहिए, या यहां तक ​​कि छवियों को अक्षम करना या पृष्ठों को छोटा करना बहुत अधिक है। (ऑफ-विषय नोट: एसएसडी के तहत स्वैपिंग डरावनी है। इसलिए मैंने अपने एसएसडी से सुसज्जित एमबीपी के लिए सबसे बड़ी रैम खरीदी है। इसलिए मैं जितना संभव हो उतना स्वैपिंग रोक सकता हूं। ऐप्पल के लिए अच्छा यह कभी भी हमारे मोबाइल उपकरणों पर सक्षम नहीं करता है।) –

+0

स्मृति और समय सीमा केवल जावास्क्रिप्ट पर लागू होती प्रतीत होती है। कैनवस और जेपीईजी पर कुछ सीमाएं भी हैं। सीमा को मारना सफारी नहीं, वेबपृष्ठ बंद कर देता है। स्पष्ट रूप से, ऐप्पल को दुर्घटनाओं को रोकने के लिए और सीमाएं रखनी चाहिए थीं। –

21

एक ही समस्या थी, मेरे लिए यह -webkit-transform: translateZ(0); था जो सफारी के दुर्घटना का कारण बन गया।

+0

उसने मेरे लिए चाल बनाई! – Mohammer

+0

वही बात, चाल चल रही थी। – Ben

19

मैं जानता हूँ कि इस सवाल का सफलतापूर्वक उत्तर दिया गया है, लेकिन मैं बस के रूप में मैं काफी कुछ समय के इस एक के ऊपर दीवार के खिलाफ मेरे सिर पीटने गया है भी में मेरी पाँच सेंट रखना चाहते थे:

के रूप में सबसे जवाब बताया है पहले से ही यह आमतौर पर स्मृति मुद्दों के लिए आता है। लगभग कुछ भी आखिरी बिट हो सकता है जो आखिरकार "मेमोरी ढेर" पर युक्तियाँ translateZ या किसी और चीज की तरह है।

हालांकि मेरे अनुभव में इसका वास्तविक सीएसएस (या जेएस) कमांड के साथ कुछ भी नहीं है। ऐसा लगता है कि आखिरी संक्रमण एक बहुत अधिक था।

display: none के तहत इस समय दिखाई देने वाली किसी भी चीज को रखने में मेरी मदद करने के लिए क्या बहुत कुछ है। यह आदिम लग सकता है लेकिन वास्तव में चाल करता है। ब्राउज़र के प्रस्तुतकर्ता को यह बताने का एक आसान तरीका है कि आपको इस समय इस तत्व की आवश्यकता नहीं है और इसलिए स्मृति जारी करता है। यह आपको 3 डी प्रभावों के सभी प्रकार के साथ मील लंबे वर्टिकल स्क्रॉलर बनाने की अनुमति देता है जब तक कि आप उन तत्वों को छुपाएं जिन्हें आप इस समय उपयोग नहीं कर रहे हैं।

+0

प्रदर्शन: मेरे लिए कोई समाधान नहीं था। धन्यवाद – Crerem

+0

उस समय आप जो कुछ भी दिखाई नहीं दे रहे हैं उसे कैसे छिपाते हैं? क्या ऐसा करने के लिए कुछ जेएस तरीका है? – bphilipnyc

+0

@bphilipnyc है, लेकिन आपको इसे मैन्युअल रूप से प्रबंधित करना होगा। सभी किसी भी दृश्यमान वस्तुओं को आसानी से छिपाने के लिए कोई सुपर सीधा आगे नहीं है। अनिवार्य रूप से आपको उस तर्क को लिखना होगा जो स्क्रीन पर क्या है और क्या नहीं है इसका ट्रैक रखता है। अपनी सामान्य साइट संरचना को जानने के बिना, यह कहना मुश्किल है कि ऐसा करने का सबसे तेज़ तरीका क्या है। – Mathias

0

मुझे एक ही समस्या थी, वेब पेज एंड्रॉइड उपकरणों पर एक आकर्षण की तरह काम करता था और आईओएस (आईफोन और सिम्युलेटर) पर दुर्घटनाग्रस्त हो गया था।

बहुत सारे शोध के बाद (ios_webkit_debug_proxy का उपयोग करके) मैंने पाया कि समस्या jQuery तैयार घटना से जुड़ी हुई थी।

थोड़ा समय निकालने से समस्या हल हो गई। मेरा आवेदन iframes का भी उपयोग कर रहा था।

$(document).ready(function() { 
    window.setTimeout(function() { ready(); }, 10); 
}); 
+2

यदि तैयार है तो कोई फ़ंक्शन नहीं है जो कोई तर्क नहीं लेता है, तो आप बस कर सकते हैं: window.setTimeout (तैयार, 10); – Dtipson

+0

'ios_webkit_debug_proxy' का उल्लेख करने के लिए धन्यवाद, यह एक शानदार परियोजना है! – ken

1

मैं हाल ही में वेब ऐप्लिकेशन छवियों का एक बहुत (30+ पर्याप्त थे) वाले पृष्ठों और मेनू के लिए कुछ परिवर्तनों पर दुर्घटनाग्रस्त मोबाइल सफारी के साथ एक समस्या हुई। बहुत सारे परीक्षण और त्रुटि के बाद, मैं LinkedIn के समान समाधान के साथ बस गया, लेकिन कोणीय का उपयोग करके अनंत स्क्रॉलिंग के लिए। मैंने अनुरोधएनिमफ्रेम और दो सभी छवि कंटेनरों को हटाने के लिए सूची के शीर्ष और निचले हिस्से में divs (जेएस स्टाइल विशेषताओं के साथ) को विस्तार/संकीर्ण करने के लिए उपयोग किया है (कुछ अन्य चीजों के साथ शीर्ष पर ओवरलेड किया गया है) व्यूपोर्ट। स्क्रॉलिंग प्रदर्शन (मूल, कोई जेएस) ठीक है और स्मृति खपत जांच में है।

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