2012-07-11 15 views
13

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

  1. गूगल क्रोम का उपयोग करना:: मैं दो अलग अलग प्रणालियों, जो दोनों के बैकएंड के रूप में वेबकिट का उपयोग लागू कर दिया है मैं गूगल क्रोम शुरू करने और दूरस्थ डीबगिंग (debugging over wire) के लिए क्रोम द्वारा उजागर WebSockets का उपयोग कर प्रत्येक टैब के साथ संवाद करेंगे। इस तरह से मैं प्रत्येक टैब को नियंत्रित कर सकता हूं, एक नया पेज लोड कर सकता हूं और पृष्ठ लोड होने के बाद मैं लोड किए गए वेबपृष्ठ के डीओएम को लाता हूं।
  2. phantomjs का उपयोग करना: phantomjs पृष्ठों को लोड करने के लिए वेबकिट का उपयोग करता है और एक हेडलेस ब्राउज़िंग विकल्प प्रदान करता है। जैसा कि phantomjs के उदाहरणों में बताया गया है, मैं पृष्ठ पर नए URL को खोलने के लिए पेज.ऑपेन का उपयोग करता हूं और पृष्ठ पर जावास्क्रिप्ट का मूल्यांकन करके पेज लोड होने के बाद डोम को लाता हूं।

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

  1. अगर मैं क्रोम/20 phantomjs उदाहरणों, ऊपर CPU उपयोग रॉकेट में 20 से अधिक टैब खोलने: निम्नलिखित प्रदर्शन है कि मैं का पालन है।
  2. उच्च CPU उपयोग के कारण, पृष्ठों की एक बहुत अधिक 10seconds लोड करने के लिए की तुलना में लेने के लिए और इसलिए मैं एक उच्च असफलता की दर है (~ में नाकाम रहने के पृष्ठ लोड अनुरोधों का 80%)
  3. मैं रखने के लिए करना चाहते हैं कम करने में विफल रहता कुल अनुरोधों में से 5% से अधिक, मैं प्रति सेकंड 1 से अधिक यूआरएल लोड नहीं कर सकता।

दोनों वेबकिट आधारित सिस्टम बाहर की कोशिश कर के बाद, यह महसूस करता है प्रदर्शन टोंटी की तरह वेबकिट प्रतिपादन इंजन है और इसलिए यहां अन्य उपयोगकर्ताओं से समझने के लिए चाहते हैं, प्रति सेकंड URL की संख्या है कि मैं क्रॉल करने के लिए उम्मीद कर सकते हैं। मेरे हार्डवेयर विन्यास है:

  1. प्रोसेसर: Intel® Core ™ i7-2635QM (1 प्रोसेसर, 4 कोर)
  2. ग्राफिक्स कार्ड: AMD Radeon HD 6490M (256MB)
  3. मेमोरी: 4GB
  4. नेटवर्क बैंडविड्थ काफी अच्छा प्रदर्शन से अधिक पृष्ठों है कि मैं

सवाल को देख रहा हूँ मैं इस मेलिंग सूची है पूछने के लिए कोशिश कर रहा हूँ लोड करने के लिए सक्षम होने के लिए है, किसी भी एक एक यादृच्छिक के लिए वेब पृष्ठों रेंगने के लिए वेबकिट के प्रयोग में अनुभवी करता है समुच्चय यूआरएल (ट्विटर स्ट्रीम से 10k यूआरएल चुनना), मैं कितने यूआरएल प्रति सेकंड क्रॉल करने की उम्मीद कर सकता हूं?

धन्यवाद

+1

मैं एक महीने या तो में अपने प्रश्न का जवाब पता चल जाएगा :) मैं ऐसी ही कुछ कर रहा हूँ (लेकिन मैं कुछ और मूल्यांकन करना चाहते हैं) 'Node.js' और' PhantomJS' का उपयोग कर। इस बीच, मुझे आपके द्वारा प्राप्त उत्तरों से लाभ होगा! –

उत्तर

3

यह सवाल वास्तव में अधिक सॉफ्टवेयर की तुलना में हार्डवेयर से संबंधित है लेकिन मुझे वैसे भी कुछ बेहतर दिशाओं में आप इंगित कर सकती है।

सबसे पहले, समझें कि प्रत्येक पृष्ठ स्वयं कई धागे पैदा कर रहा है। यह पृष्ठ डाउनलोड करेगा, और उसके बाद पृष्ठ पर तत्वों जैसे जावास्क्रिप्ट फ़ाइलों, सीएसएस फ़ाइलों और छवियों के लिए नए डाउनलोड थ्रेड को शुरू करना शुरू कर देगा।[रेफरी: http://blog.marcchung.com/2008/09/05/chromes-process-model-explained.html]

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

Optimal number of threads per core एटी स्टैक ओवरफ़्लो धागा स्थिति आप अनुभव कर रहे पर आगे की जानकारी देता है। आपका सीपीयू ओवरलोडिंग।

आपका प्रोसेसर 4 शारीरिक 8 लॉजिकल कोर है। मैं एक समय में 4 से अधिक कनेक्शनों को फैलाने की सलाह नहीं दूंगा, जिससे वहां कुछ थ्रेडिंग को संभालने के लिए माध्यमिक लॉजिकल कोर छोड़ दिए जाएंगे। आप पाते हैं कि आपको इस नंबर को कम करने की भी आवश्यकता है, लेकिन 4 एक अच्छा प्रारंभिक बिंदु है। 20 प्रस्तुत करने की कोशिश कर रहे अपने पूरे सिस्टम को अधिभारित करने के बजाय एक समय में पेज 4 को प्रतिपादित करके आप वास्तव में अपनी समग्र गति को बढ़ाएंगे क्योंकि आप बहुत कम कैश स्वैपिंग के साथ समाप्त होते हैं। कई आसानी से समय के स्थानों के खिलाफ अपना समय घड़ी से शुरू करें। फिर कम से कम कोशिश करें। एक मीठा जगह होगी। ध्यान दें, फ़ैंटॉमजेएस का हेडलेस ब्राउज़र संस्करण आपके लिए बेहतर होगा क्योंकि हेडलेस मोड में यह शायद छवियों (एक प्लस) डाउनलोड नहीं करेगा।

आपका सबसे अच्छा समग्र यहाँ हालांकि विकल्प खुद के प्रतिपादन http://www.webkit.org/ पर वेबकिट स्रोत का उपयोग एक आंशिक पेज करना है। चूंकि ऐसा लगता है कि आपको प्रस्तुत करना होगा HTML और जावास्क्रिप्ट। यह आपके कनेक्शन की संख्या को कम कर देता है और आपको अपने धागे को अधिक दक्षता के साथ नियंत्रित करने की अनुमति देता है। आप उस मामले में एक इवेंट कतार बना सकते हैं, अपने सभी प्राथमिक यूआरएल को वहां घुमाएं। 4 कार्यकर्ता धागे से बाहर निकलें कि सभी कार्यकर्ता कतार से काम करते हैं, क्योंकि वे एक पृष्ठ को संसाधित करते हैं और आगे स्रोत डाउनलोड करने की आवश्यकता होती है, वे कतार में उन और डाउनलोड जोड़ सकते हैं। एक बार एक पृष्ठ के लिए सभी फ़ाइलें (या डिस्क के बारे में राम अपने चिंतित हैं) एक विशेष यूआरएल के लिए स्मृति में डाउनलोड कर रहे हैं, तो आप एक आइटम घटना कतार में पेज प्रस्तुत करना और उसके बाद जो कुछ भी आप की जरूरत के लिए यह पार्स करने के लिए जोड़ सकते हैं।

0

कि आप किस डेटा पार्स करने के लिए, यदि आप केवल परवाह है कि जावास्क्रिप्ट और एचटीएमएल, तो हाइपरटेक्स्ट क्वेरी langage एक विशाल speedup, की पेशकश करेगा http://htql.net/, या आप क्लाउड में कुछ की स्थापना करने के लिए देख सकते हैं कोशिश कर रहे हैं पर निर्भर करता है जैसे http://watirmelon.com/2011/08/29/running-your-watir-webdriver-tests-in-the-cloud-for-free/

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