2010-01-13 15 views
5

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

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

क्या मुझे अपना विजेट प्राप्त करना चाहिए? क्या वहां पहले से कुछ ऐसा है जो मुझे पता नहीं है? अगर मैं अपना खुद का कस्टम विजेट बनाता हूं, तो किस तरह की संरचना लेनी चाहिए और क्या डोजो/दिजिट के लिए कस्टम विजेट विकसित करने के लिए कोई अच्छा संसाधन है? कोई अन्य विचार?

उत्तर

1

This seems to be a tut on what you might need मैं सुझाव दूंगा कि आप ली का उपयोग करें, क्योंकि आप प्रत्येक पंक्ति पर कुछ क्रियाएं करने की इच्छा समाप्त कर देंगे, अधिकतर प्रत्येक पंक्ति प्रासंगिक होगी।

स्क्रॉल अच्छा है, लेकिन आप भी सिर्फ पृष्ठांकन के साथ इंटरफेस Blit सकते हैं, वे अगले पृष्ठ, पिछले पृष्ठ पर क्लिक करें जिसका अर्थ है, और आप इसे, तो दृश्य को अपडेट लाने। यह सबसे आसान तरीका है। स्क्रॉलिंग के साथ, आपको निर्बाध स्क्रॉलिंग के लिए मौजूदा दृश्यमान रेखाओं के ऊपर और नीचे जाना होगा।

उदाहरण के लिए, यदि आप 25 लाइनें दिखाना चाहते हैं, तो आपको पहले जाने पर 25 + नीचे पैड लाने की आवश्यकता होगी, और अतिरिक्त पैड को दिखाने के लिए एक नई घटना को सिग्नल करने के लिए थ्रेसहोल्ड के रूप में नीचे पैड में दिखाए गए लाइनों को परिभाषित करना होगा 25+ नीचे पैड आइटम।

एक 100 एमबी फ़ाइल के साथ, यह जल्द ही आलसी हो जाएगा, इसलिए आपको पिछली प्रविष्टियों को साफ़ करना होगा, और रिवर्स प्राप्त करने के अनुरोध को सिग्नल करने के लिए एक नया शीर्ष पैड परिभाषित करना होगा। यही कहना है, पहला req: 25 + नीचे पैड लाएं, दूसरा req fetch 25 + नीचे पैड पिछला 25 - शीर्ष पैड हटा दें।

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

कोई भी शिकायत नहीं करेगा कि उन्हें अगले पृष्ठ/पिछले पृष्ठ पर क्लिक करना होगा, यह तेज़ और साफ होगा, लेकिन आपकी स्क्रॉलिंग को गड़बड़ कर दें और कोई भी आपके विजेट का उपयोग नहीं करना चाहेंगे।

यहाँ विषय पर कुछ संसाधन हैं: Old Ajax Scrollable Table - Twitter like load more tut - Good scrolling example, read the source - Check out this googlecode project

+0

पेजिंग के बारे में दिलचस्प विचार। मैंने ईमानदारी से इसके बारे में सोचा नहीं था (और मुझे नहीं पता क्यों)। टट के लिए धन्यवाद, और एक मोटा रूपरेखा जो करने की आवश्यकता होगी और एक संभावित व्यवहार्य विकल्प। – Kitson

+0

मदद करने में खुशी हुई, और स्नैज़ी सुविधाओं के बारे में चिंता न करें, कार्यक्षमता पहले मेरा आदर्श वाक्य है। आपकी परियोजना के लिए शुभकामनाएं! –

0

लॉग फ़ाइल को एक सुसंगत लाइन अंत के साथ एक पाठ फ़ाइल है, तो हो सकता है आप यह लाइन संख्या से प्राप्त कर सके।

  1. जब पृष्ठ लोड किया, लाने फ़ाइल से पहले 100 पंक्ति:

    मैं इस तरह एल्गोरिथ्म के साथ विचार है। , शायद एक div, पाठ क्षेत्र, या का उपयोग कर <ul><li>

  2. एक ईवेंट हैंडलर रखो कि उपयोगकर्ता पता करने के लिए कंटेनर के अंतिम भाग तक स्क्रॉल है कुछ कंटेनर में रख दें।
  3. फ़ाइल से अगली 100 लाइनें प्राप्त करने के लिए AJAX अनुरोध भेजें। ithe लाइन पैरामीटर (GET या यूआरआई पैरामीटर) तो PHP स्क्रिप्ट के रूप में ऑफसेट दर्रा फ़ाइल
  4. AJAX ऑफसेट AJAX अनुरोध अगले कंटेनर के अंत के जवाब, अद्यतन रखो की सही हिस्सा मिल सकता है।
  5. यदि फ़ाइल में कोई और पंक्ति नहीं छोड़ी गई है, तो एक खाली प्रतिक्रिया दें। AJAX हैंडलर को फ़ाइल के अंत के रूप में इस पर विचार करना चाहिए ताकि ऊपर चरण 2 में ईवेंट हैंडलर को हटा दिया जा सके।

मैं डोजो के बारे में ज्यादा पता नहीं है। मैं अपने आवेदन में jquery tools's scrollable का उपयोग करता हूं। स्क्रॉलर अंतिम पृष्ठ तक पहुंचने पर ईवेंट ईवेंट हैंडलर रखना आसान है, फिर अगला आइटम प्राप्त करें।

+0

हां, यह वही है जो मैं सोच रहा था, लेकिन यदि मैं ब्राउज़र की याद में वस्तुओं को लोड और लोड करना जारी रखता हूं, तो मैं अंततः इसे विस्फोट कर दूंगा। मुझे लगता है कि मुझे वस्तुओं को उतारने की चिंता करने की आवश्यकता होगी। डोजो की एक समान वस्तु है जिसे 'dojox.layout.ScrollPane' कहा जाता है। मैं उस से कुछ प्राप्त करने में सक्षम हो सकता है। – Kitson

1

मैं कैशिंग सलाह देते हैं।

यह ध्यान दिया जाना चाहिए कि इस समस्या का समाधान ध्यान में रखना चाहिए कि डिस्क से पर्याप्त रूप से बड़ी फ़ाइल (100 एमबी +) पढ़ने से डिस्क बाध्य होने जा रही है और आपके वेब सर्वर ने स्क्रिप्ट निष्पादन के लिए सेट किए गए किसी भी टाइमआउट को आगे बढ़ाने की संभावना है पहर। उपयोगकर्ता को फाइल के किसी हिस्से को लोड करने के लिए एक अनोखा समय प्रतीक्षा करने से बचने के लिए, मैं आपके सर्वर की टाइमआउट सीमाओं को बदलने जैसे हैक्स से बचूंगा।

यहां एक संभावित समाधान है जो दिमाग में आता है: 1) फ़ाइल को अलग फ़ाइलों में चिपकाकर कैश करें। आप इसे क्रॉन नौकरी में आसानी से कर सकते हैं या फ़ाइल लिखने पर इसे ट्रिगर भी कर सकते हैं। Readfile_chunked (http://cn2.php.net/manual/en/function.readfile.php#48683) या इसी तरह का उपयोग करें।

2) एक सेवा हैंडलर स्क्रिप्ट लिखें जो ब्राउज़र से आने पर (अनुरोध करें './readfile?chunk=##') अनुरोधित खंड लौटाता है।

3) AJAX के माध्यम से सेवा हैंडलर को कॉल करने के लिए अन्य योगदानकर्ता द्वारा सुझाए गए अनुसार एक पेजिनेशन चौड़ाई या स्क्रोलर का उपयोग करें।

विपक्ष: यह अनिवार्य रूप से डिस्क स्थान की मात्रा में वृद्धि करेगा। पेशेवर: डिस्क एक्सेस के रूप में खुश उपयोगकर्ताओं को अनुकूलित किया जाएगा और इसलिए स्क्रिप्ट निष्पादन समय होगा। इसके अलावा, यह अच्छी तरह से तराजू। (ओ (एन) के आदेश पर)।

+0

दिलचस्प हालांकि, विशेष रूप से "readfile_chunked", मैं इसे देख लूंगा। समस्या यह है कि 160,000 ऐसी लॉग फाइलों की सीमा में होगी, जिनमें से केवल 10-20 शायद 5-10 उपयोगकर्ताओं द्वारा देखे जाएंगे। मेरे पास पहले से ही एक प्रक्रिया है जो उन्हें सार्थक तरीके से अनुक्रमित करती है लेकिन मैं स्थानीय रूप से संग्रह को डाउनलोड करने की आवश्यकता के बिना लॉग देखने का तरीका प्रदान करना चाहता हूं और 20 या 30 लाइनों को उपयोगकर्ता ढूंढ रहा हूं। – Kitson

1

क्या आपने लॉग देखने के लिए डोजो ग्रिड का उपयोग करने पर विचार किया है? इसमें 'पृष्ठों' यानी डेटा की पंक्तियों की गतिशील लोडिंग के लिए अंतर्निहित समर्थन है।

+0

मैंने इसे माना ... यह मेरी आवश्यकता के लिए थोड़ा जटिल है और कुछ यूआई तत्व हैं जो मुझे जिस तरह से काम करने के लिए खुद को उधार नहीं देते हैं, लेकिन यह मजाकिया है कि आपको इसका जिक्र करना चाहिए, क्योंकि मैं एक कस्टम डोजो विजेट और डेटास्टोर लिखने के साथ आगे बढ़ने का फैसला किया जो मुझे चाहिए और मुझे पता चला कि 'dojox.grid._Scroller' जो ग्रिड का हिस्सा है, मुझे इसकी आवश्यकता के समान ही है और इससे बहुत सारे संकेत मिल रहे हैं। – Kitson

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