2010-03-02 15 views
15

में क्लाइंट साइड कैशिंग हमारे पास एक gwt-client है, जो हमारे सर्वर से काफी सारे डेटा प्राप्त करता है। तर्कसंगत रूप से, मैं क्लाइंट पक्ष पर डेटा को कैश करना चाहता हूं, सर्वर को अनावश्यक अनुरोधों से अलग करना चाहता हूं।जीडब्ल्यूटी

आज तक मैंने डेटा के कैशिंग को संभालने के लिए इसे अपने मॉडल तक छोड़ दिया है, जो बहुत अच्छी तरह से स्केल नहीं करता है। यह भी एक समस्या बन गई है क्योंकि हमारी टीम में विभिन्न डेवलपर्स अपनी "कैशिंग" कार्यक्षमता विकसित करते हैं, जो परियोजना को डुप्लीकेट के साथ बाढ़ देता है।

मैं इस बारे में सोच रहा हूं कि कोई "प्रवेश बिंदु का एक बिंदु" कैसे कार्यान्वित कर सकता है, जो सभी कैशिंग को संभालता है, जिससे मॉडल को कैशिंग को संभालने के बारे में अनजान छोड़ दिया जाता है।

क्या किसी को भी जीडब्ल्यूटी में क्लाइंट साइड कैशिंग के साथ कोई अनुभव है? क्या कोई मानक दृष्टिकोण लागू किया जा सकता है?

उत्तर

10

मेरा सुझाव है कि आप gwt-presenter और CachingDispatchAsync देखें। यह दूरस्थ आदेश निष्पादित करने के लिए प्रविष्टि का एक बिंदु प्रदान करता है और इसलिए कैशिंग के लिए एक सही अवसर प्रदान करता है।

recent blog post एक संभावित दृष्टिकोण की रूपरेखा तैयार करता है।

6

आप कमांड पैटर्न पर एक नज़र रखना चाहते हैं; रे रयान ने Google आईओ में जीडब्ल्यूटी में सर्वोत्तम प्रथाओं के बारे में एक वार्ता आयोजित की, यहां एक प्रतिलेख है: http://extgwt-mvp4g-gae.blogspot.com/2009/10/gwt-app-architecture-best-practices.html

वह एक्शन और रिस्पॉन्स/परिणाम ऑब्जेक्ट्स का उपयोग करके कमांड पैटर्न के उपयोग का प्रस्ताव करता है जो सेवा प्रॉक्सी में और बाहर फेंक दिया जाता है। क्लाइंट पर आप जो भी कैशिंग करना चाहते हैं, उसे समाहित करने के लिए ये उत्कृष्ट वस्तुएं हैं।

यहां एक अंश दिया गया है: "मुझे कैशिंग नीतियों को लागू करने के लिए मुद्रा की एक अच्छी इकाई मिली है। जब भी मुझे दो बार एक ही अनुरोध मिल जाए, तो मैं पिछली बार मिली प्रतिक्रिया को कैश कर दूंगा और बस इसे वापस कर दूंगा खुद को तुरंत। सर्वर-साइड ट्रिप से परेशान नहीं है। "

काफी बड़ी परियोजना में, मैंने एक और दिशा ली। मैंने एक DtoCache ऑब्जेक्ट विकसित किया जो अनिवार्य रूप से प्रत्येक AsyncCallback का संदर्भ रखता था जो प्रतीक्षा कतार में किसी सेवा कॉल से प्रतिक्रिया की अपेक्षा करता था। एक बार DtoCache सर्वर से ऑब्जेक्ट प्राप्त करने के बाद, उन्हें DtoCache के अंदर कैश किया गया। कैश किए गए परिणाम अब उसी सेवा कॉल के लिए सभी कतारबद्ध और नव निर्मित AsyncCallbacks पर वापस आ गए थे।

1

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

http://www.smartclient.com/smartgwt/showcase/#grid_adaptive_filter_featured_category

यह व्यवहार ResultSet वर्ग अगर आप अपने लगाने की जरूरत है के माध्यम से सामने आ रहा है: इस उदाहरण बड़े डेटासेट के लिए adaptively क्लाइंट साइड संचालन करने के लिए (जब कैश यह अनुमति देता है), जबकि अभी भी समर्थन पेजिंग की क्षमता दर्शाता है इसके शीर्ष पर स्वयं के विजेट:

http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/data/ResultSet.html

0

मैंने सोचा था कि Itemscript तरह का साफ था। यह एक विश्वसनीय JSON डेटाबेस है जो क्लाइंट (GWT) और सर्वर दोनों पर काम करता है।

इसे देखें!

-JP

1

कैशिंग के दो स्तर हैं:

  • एक ब्राउज़र सत्र के दौरान कैशिंग।
  • कैशिंग क्रॉस ब्राउज़र सत्र, उदाहरण के लिए कैश किए गए डेटा को ब्राउज़र पुनरारंभ करने के बाद उपलब्ध होना चाहिए।

क्या कैश करने के लिए: आपके आवेदन पर निर्भर करते हैं, तो आप कैश करने के लिए

  • लोक स्थिर विशेष उपयोगकर्ता के लिए
  • संरक्षित डेटा (या अर्द्ध स्थिर, जैसे शायद ही कभी बदलने के लिए) डेटा
  • चाहते हो सकता है

कैश करने के लिए कैसे:

  • पहले कैशिंग के लिए स्तर, हम उत्तर में सुझाए गए अनुसार या अपना खुद का लिखने के रूप में जीडब्ल्यूटी कोड का उपयोग कर सकते हैं।
  • दूसरे के लिए, हमें ब्राउज़र कैशिंग सुविधाओं का उपयोग करना होगा। मानक दृष्टिकोण आपके डेटा को एचटीएमएल के अंदर रखा जाता है (चाहे स्थिर एचटीएमएल फाइलें या उदाहरण के लिए जेएसपी/सर्वलेट द्वारा उत्पन्न गतिशील)। आपका आवेदन डेटा प्राप्त करने के लिए http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsOverlay.html तकनीकों का उपयोग करें।