2015-10-17 8 views
9

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

ओरेकल प्रलेखन कहा गया है कि: "जब WebView घटक के साथ काम करने के लिए, आप को याद रखना चाहिए यह डिफ़ॉल्ट रूप में स्मृति कैश है कि इसका मतलब है कि किसी भी कैश की गई सामग्री एक बार WebView घटक युक्त आवेदन बंद कर दिया है खो दिया है। हालांकि, डेवलपर java.net.ResponseCache क्लास के माध्यम से एप्लिकेशन स्तर पर कैश लागू कर सकते हैं। "

लेकिन ऐसा नहीं है। मैंने java.net का उपयोग करके एक इन-मेमोरी कैश लागू किया। रेस्पॉन्स कैश क्लास लेकिन इसका उपयोग शायद ही कभी वेबव्यू द्वारा किया जाता है - समय-समय पर यह कैश से favicon.png को संग्रहीत करता है और पुनर्प्राप्त करता है - कोई प्रदर्शन लाभ नहीं।

मैं शुद्ध यातायात कि WebView कैशिंग नहीं है का विश्लेषण करने, इस प्रकार की पुष्टि क्या JDK-8,014,501 में कहा गया है द्वारा की पुष्टि की: " JavaFX WebView घटक javafx.scene.web.WebView साथ नेविगेट करते समय, यह पाया गया, है कि हर अनुरोध हर बार सर्वर से सभी संसाधनों को पुनर्प्राप्त करता है, भले ही पिछली गतिविधियों ने संसाधनों को अभी पुनर्प्राप्त कर लिया हो। इस व्यवहार को नेटवर्क यातायात को कैप्चर और विश्लेषण करके सत्यापित किया गया था। प्रदर्शन प्रभाव काफी है। "

कुछ भी नहीं निकला है जेडीके -8014501, इसलिए मैंने डिफ़ॉल्ट URL हैंडलर पर सभी URLConnections को रोकने के लिए "URL.setURLStreamHandlerFactory" का उपयोग करके कैश हैंडलर लिखा था। मुझे इसके साथ कुछ सफलता मिली और वह .js जावास्क्रिप्ट फ़ाइलों को कैश करने और प्रदर्शन में उल्लेखनीय रूप से वृद्धि करने में सक्षम था, लेकिन कुछ वेब साइटों को संभालने वाली बग्स थी, विशेष रूप से आउटलुक का ईमेल।

मेरे कोड को संभालने के तरीके को देखने पर, मुझे उदाहरण के लिए मिला कि URLLoader कोड कोड में निम्नलिखित टिप्पणियों के साथ setUsesCaches (झूठा) सेट कर रहा था (वर्तमान 1.8.0_66 कोड में URLLoader.java की लाइन 279 पर) :
// यह देखते हुए कि वेबकिट का अपना कैश है,
// किसी भी URL कनेक्शन कैश का उपयोग न करें, भले ही कोई उन्हें इंस्टॉल करता हो।
// साइड इफेक्ट के रूप में, यह वेबपैन की समस्या को हल करता है
// प्लग-इन कैश के साथ अच्छी तरह से काम करना, जो
// RT-11880 के कारणों में से एक था।

तो क्या कोई वहां से बाहर निकल सकता है कृपया मुझे वास्तव में क्या चल रहा है पर एक सिर दें?

  • ओरेकल प्रलेखन का कहना है कि वेबकिट में एक मेमोरी कैश है जिसे ResponseCache द्वारा ओवरराइड किया जा सकता है, ऐसा नहीं है।
  • जेडीके -8014501 समस्या बताता है, लेकिन "कोई मुद्दा नहीं" ध्वजांकित किया गया है। यह कोई मुद्दा क्यों नहीं है?
  • "URL.setURLStreamHandlerFactory" और "URLConnection" अवरोध के आसपास संकेतक कोडिंग महत्वपूर्ण प्रदर्शन लाभ के साथ एक कार्यात्मक कैश उत्पन्न करता है, लेकिन जानबूझकर URLLoader कोड में पेश की गई समस्याओं से पूर्ववत किया जाता है।

किसी भी प्रतिक्रिया के लिए अग्रिम धन्यवाद,

+1

मेरे विपरीत प्रभाव/समस्या है। मेरी सीएसएस-फाइलें वेबव्यू द्वारा कैश की गई हैं और मैं इसे रोक नहीं सकता! मेरे सीएसएस में परिवर्तन पूरे जावा (एफएक्स) - एप्लिकेशन (या प्रत्येक परिवर्तन पर सीएसएस-फाइल का नाम बदलते समय) को फिर से शुरू करने के बाद ही दिखाई दे रहे हैं। 'ResponseCache' को ओवरराइड करना मेरे लिए काम नहीं करता है (मेरी प्रतिक्रिया-कैश कभी नहीं बुलाया जाएगा) ... – Ben

+0

अजीब, यहां आपकी समस्या का सटीक विपरीत भी है: http://stackoverflow.com/q/16211920/3887073 – Ben

+0

@ बेन को हल करने में आपकी कोई किस्मत है? मेरी भी यही समस्या है। –

उत्तर

1

मैं HttpUrlConnection और HttpsUrlConnection से ली गई मेरी अपनी कक्षाओं को लागू करने से और URLStreamHandlerFactory के अपने खुद के कार्यान्वयन का उपयोग करके गैर कैशिंग WebView के आसपास काम कर रहा है।

मूल रूप से मैं सभी आउटगोइंग http और https अनुरोधों को रोकता हूं, जांचता हूं कि मेरे पास मेरे कैश में डेटा है या नहीं। यदि नहीं, तो मैं मूल संसाधन से डेटा लोड करता हूं और कैश निर्देशिका में स्टोर करता हूं। यदि मेरे पास पहले से डेटा है, तो मैं इसे अपने कैश से वितरित करता हूं।

मैंने कैश हेडर इत्यादि को लागू नहीं किया है, क्योंकि मेरे उपयोग के मामले में यह आवश्यक नहीं था।

यहां पोस्ट करने के लिए बहुत अधिक कोड है, लेकिन यदि आप रुचि रखते हैं, तो आप mapjfx पर कोड देख सकते हैं और com.sothawo.mapjfx.offline पैकेज में विशेष रूप से कक्षाओं की जांच कर सकते हैं।

यह समाधान वेबव्यू को पूरी तरह से कैशिंग कार्यान्वयन से अनजान छोड़ देता है।

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