2009-06-15 13 views
8

प्रस्तुत करने में क्रैश क्रैश करता है, मैं समझता हूं कि इस तालिका को प्रतिपादित करना किसी भी ब्राउज़र की सीमा को दबा रहा है। हालांकि, मैं उत्सुक था कि क्यों एक तालिका जो काफी बड़ी है (20,000+ पंक्तियां) फ़ायरफ़ॉक्स को दुर्घटनाग्रस्त करती है, जबकि अन्य सभी ब्राउज़र इसे अपेक्षाकृत तेज़ी से प्रस्तुत करते हैं।फ़ायरफ़ॉक्स बड़ी एचटीएमएल तालिका (20,000+ पंक्तियां)

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

फ़ायरफ़ॉक्स पहली (लगभग) 10,000 पंक्तियों को ठीक बनाता है। समस्या तब होती है जब तक कि स्मृति की बढ़ती मात्रा (300 एमबी +) का उपयोग करते समय, एप्लिकेशन धीरे-धीरे उत्तरदायी नहीं होने तक शेष पंक्तियों को धीरे-धीरे जोड़ता है। इंटरनेट एक्सप्लोरर केवल 30 एमबी का उपयोग करता है।

मैं फ़ायरफ़ॉक्स का सबसे वर्तमान संस्करण उपयोग कर रहा हूं और परीक्षण के दौरान मेरे सभी ऐड-ऑन अक्षम हैं। इसके अलावा, मैंने पृष्ठ से सभी सीएसएस और जावास्क्रिप्ट हटा दिया।

क्या यह फ़ायरफ़ॉक्स के साथ ज्ञात समस्या है? क्या किसी और को भी इसका अनुभव हुआ है? समस्या को ठीक करने के लिए या कम से कम समस्या निवारण शुरू करने के लिए क्या कदम उठाए जा सकते हैं?

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

+0

आप क्लाइंट-साइड गणना/मुद्रण आप के लिए चाहते हो सकता है के लिए डेटा भेज रहे हैं उनके लिए एक एक्सएमएल फ़ाइल/पीडीएफ डाउनलोड करें :) –

+8

मुझे यकीन नहीं है कि आप ब्राउज़र में 20,000 पंक्तियों को प्रदर्शित करने का प्रयास क्यों कर रहे हैं, लेकिन मेरा मानना ​​है कि यह एक अच्छा प्रोग्रामिंग अभ्यास नहीं है। आप परिणामों को परिशोधित करने, पृष्ठों का उपयोग करने, या एक डाउनलोड करने योग्य एक्सेल शीट में तालिका निर्यात करने के लिए एक खोज क्षेत्र का उपयोग कर सकते हैं। –

+0

@ वाडिह - मैं भी यहां बैठ रहा हूं कि क्या संभव कारण हो सकता है: पी –

उत्तर

4

आप इसे हल करने के लिए पेजिनेशन का उपयोग करना चाहेंगे :) मुझे लगता है कि फ़ायरफ़ॉक्स ने टेबल की 20k पंक्तियां प्रस्तुत करने का प्रयास किया है तो मेरा खराब पुराना लैपटॉप मर जाएगा। और इसके साथ 4GB RAM एक Core2 है: पी

+0

वैसे मैं जिस डेस्कटॉप का उपयोग कर रहा हूं वह 4 जीबी रैम है और आईई 7, सफारी और क्रोम में पसीना तोड़ने के बिना प्रस्तुत करता है। मुझे लगता है कि शुद्ध एचटीएमएल से निपटने के दौरान फ़ायरफ़ॉक्स इतना भयंकर नहीं होना चाहिए। –

+0

आपको लगता है :) –

+3

यह एक * भयानक डिजाइन * है। आप बिल्कुल इस बात पर ध्यान दिए बिना कि किसी ब्राउज़र को इसकी आवश्यकता है या नहीं, गलत समस्या को ठीक करने का प्रयास करने में समय बर्बाद न करें। – annakata

7

एक निश्चित चौड़ाई

<table style='table-layout:fixed'> 

यह ब्राउज़र यह प्रत्येक नई पंक्ति अलावा पर चौड़ाई recompute करने की कोशिश कर के बिना तालिका प्रस्तुत करना करने की अनुमति देगा के साथ तालिका को परिभाषित करने की कोशिश ।

[अद्यतन]

मुझे यकीन है कि अपने डेटा की तरह दिखता है क्या नहीं कर रहा हूँ, लेकिन मैं फ़ायरफ़ॉक्स 3.0.11 भीतर

<table style='table-layout:fixed'> 
<tr><td style="width:150px;"></td><td style="width:150px;"></td><td style="width:150px;"></td><td style="width:150px;"></td><td style="width:150px;"></td></tr> 
<% 
    for (int ix = 0; ix < 30000; ix++) 
    { 
     Response.Write("<tr>"); 
     Response.Write("<td><img src='stickman1.bmp'></td>"); 
     Response.Write("<td>" + RandomString() + "</td>"); 
     Response.Write("<td><img src='stickman2.bmp'></td>"); 
     Response.Write("<td>" + RandomString() + "</td>"); 
     Response.Write("<td><img src='stickman3.bmp'></td>"); 
     Response.Write("<td><a href='#' onclick='blah();'>stick man!</a></td>"); 
     Response.Write("</tr>"); 
    } 

%> 
</table> 

कर सकते हैं। हालांकि इसमें थोड़ी देर लगती है फ़ायरफ़ॉक्स इसे प्रदर्शित करेगा। यह 23 9 एमबी रैम का उपभोग किया। RandomString() बस 0 - 22 अक्षरों के बीच एक स्ट्रिंग देता है।

+2

ऐसा करने से सभी कॉलम चौड़ाई समान रूप से विभाजित हो जाएंगी। आप उस कॉलम की पहली पंक्ति की चौड़ाई निर्धारित करके "तालिका-लेआउट: निश्चित" तालिका में कॉलम की चौड़ाई बदल सकते हैं। प्रत्येक पंक्ति पर चौड़ाई निर्धारित करने की जरूरत नहीं है। –

+0

सुझाव के लिए धन्यवाद। हालांकि, फ़ायरफ़ॉक्स अभी भी अप्रतिबंधित बनने लगता है। इस बार किसी भी पंक्तियों को प्रदर्शित किए बिना। क्या ऐसा कोई कारण होगा कि एप्लिकेशन को चलाने के लिए बहुत मेमोरी चाहिए? मुझे पता है कि अतीत में खराब स्मृति प्रबंधन के साथ फ़ायरफ़ॉक्स में समस्याएं थीं। –

+0

इसे बहुत मेमोरी चाहिए क्योंकि यह फ़ायरफ़ॉक्स है। प्रत्येक पंक्ति में शायद इसके पीछे एक संपूर्ण ऑब्जेक्ट-आवृत्ति पदानुक्रम है ... जावास्क्रिप्ट में; पी –

3

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

  • ऑब्जेक्ट, आईफ्रेम या मूल तत्व (फॉर्म तत्वों सहित)।
  • डुप्लीकेट आईडी गुणों
  • नहीं छोड़ा जाएगा संस्थाओं डेटा स्ट्रीम में
  • टैग, विशेष रूप से </td>, </tr> and </table>
  • colspans

हममम .. एक संकेत है आप मान्य एचटीएमएल उपयोग नहीं कर रहे की तरह लगता है (बंद करने नहीं पंक्तियों या कुछ और)। एक वैधकर्ता के माध्यम से अपनी तालिका का एक सबसेट चलाएं।

तालिका-लेआउट: निश्चित (प्रति जैक का जवाब) क्रैश होने तक प्रतिपादन करना चाहिए। ऐसा लगता है जैसे यह पहले से टेबल (इसकी चौड़ाई की तरह) के बारे में कुछ नहीं जानता है। चौड़ाई को पिक्सेल मान पर सेट करने का प्रयास करें और कर्नल तत्वों का उपयोग करें।

<table style='table-layout:fixed; width:800px'> 
    <col style="width:200px"> 
    <col style="width:600px"> 
    <tr> 
    ... 
+0

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

+0

पृष्ठ भी डब्ल्यू 3 सी वैलिडेटर में ठीक है। –

+0

यह संभावना है कि आप फॉर्म तत्वों पर कुछ हार्ड-कोडित सीमा से अधिक हो सकते हैं। उन्हें हटाने का प्रयास करें और देखें कि – SpliFF

3

क्या यह संभवतः आपके डेटा के साथ कुछ करना है? मैंने बस एक साधारण एएसपी.नेट पेज को चाबुक किया जो 50k पंक्ति तालिका बनाता है और फ़ायरफ़ॉक्स इसे ठीक करता है।

protected void Page_Load(object sender, EventArgs e) 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.Append("<table><tbody>"); 
    for (int i = 0; i < 50000; i++) 
    { 
     sb.Append("<tr><td>My Name</td><td>[email protected]</td></tr>"); 
    } 
    sb.Append("</tbody></table>"); 
    Response.Write(sb.ToString()); 
} 
+0

क्या होता है मुझे लगता है कि एडेन की तरह लगातार सभी पंक्तियों का आकार बदलने के साथ कुछ और करना है। – eaglei22

1

मैं आकार के डेटासेट के लिए पेजिनेशन का उपयोग करने का सुझाव दूंगा। ExtJS में बहुत अच्छा ग्रिडपैनल है, जो कार्यान्वित करना आसान है (आप मार्गदर्शन के लिए उदाहरणों के स्रोत कोड को देख सकते हैं), और यदि आप कुछ ऐसा नहीं चाहते हैं तो "चरम" (जैसा कि, यह देखने को नहीं बदलता है- तालिका का -फेल), jQuery में कुछ AJAX पेजिनेशन सामान भी हैं।

+1

जावास्क्रिप्ट डॉम मैनिपुलेशन जोड़ना अधिक प्रतिपादन गति समस्याओं का कारण बन सकता है। – edeverett

+2

हालांकि एक समय में केवल ~ 50 पंक्तियां प्राप्त की जाती हैं तो यह काफी तेज होगी। –

1

एक और सोचा

कब तक जानकारी भेजने के लिए ले करता है? क्या यह सर्वर-साइड पर बफर किया गया है? को प्रस्तुत करने के बजाय फ़ायरफ़ॉक्स के कनेक्शन हैंडलिंग के साथ किया जा सकता है।

0

मुझे लगता है कि समस्या का एक बड़ा हिस्सा यह है कि फ़ायरफ़ॉक्स (कम से कम पिछले संस्करण, यह इस संदेश को पढ़ने के समय तय किया गया हो सकता है) जब भी कुछ भी नहीं हो रहा है तब भी बहुत सारी यादें उपयोग कर सकते हैं ।

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

मुझे लगता है कि यदि आप बहुत कम अंतराल प्रणाली पर बहुत मेमोरी और तेज CPU के साथ उच्च अंत प्रणाली बनाते हैं तो प्रदर्शन अलग-अलग होगा।

बेशक यह भी निर्भर करता है कि आप दुर्घटना से क्या मतलब है। दुर्घटना का सटीक अर्थ यह है कि यह काम करना बंद कर देता है और छोड़ देता है, जबकि आप इसके बारे में बात कर सकते हैं बस लटकते हैं (यह काम करना बंद कर देता है लेकिन छोड़ नहीं जाता है) इस मामले में यह संभव है कि यह अभी भी काम कर रहा है लेकिन आपके सामने पृष्ठ प्रस्तुत करने के लिए संघर्ष कर रहा है धैर्य खोना

यदि आप पेज को प्रस्तुत करने से पहले फ़ायरफ़ॉक्स को मैन्युअल रूप से बंद करते हैं, तो यह तकनीकी रूप से क्रैश के रूप में नहीं गिना जाता है, बस एक लटकता है या उपयोगकर्ता पृष्ठ लोड होने की प्रतीक्षा करने के लिए पर्याप्त धीरज नहीं रखता है (बेशक एक सीमा है किसी के धैर्य के लिए!)।

0

मेरे पास एक ही समस्या है। तालिका दिखाए जाने पर मूल रूप से फ़ायरफ़ॉक्स बहुत धीमी होती है (30 पंक्तियां और लगभग 50 कॉलम)। जैसे ही तालिका अब दिखाई नहीं दे रही है, ब्राउज़र फिर से तेज़ी से स्क्रॉल करता है। तो मुझे लगता है कि यह एक प्रदर्शन प्रतिपादन या अद्यतन समस्या है।

0

इसके अलावा फ़ायरफ़ॉक्स वास्तव में प्राथमिकता नहीं दी जाती ब्राउज़र - एचटीएमएल 5 मानक है कि पूरी तरह से क्रोम और ओपेरा पर काम करता है, वास्तव में Firefox पर नहीं काम करता है

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