TurboGears - कैशिंग

एक वेब एप्लिकेशन के प्रदर्शन को बढ़ाने के लिए, खासकर अगर यह लंबे ऑपरेशन में शामिल है, तो कैशिंग तकनीकों का उपयोग किया जाता है। TurboGears दो प्रकार की कैशिंग तकनीक प्रदान करता है -

Whole-page Caching

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

Application-level Caching

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

अनुप्रयोग-स्तरीय कैशिंग

जैसा कि पहले उल्लेख किया गया है, कैशिंग समर्थन के लिए बीकर पैकेज को सक्षम करने के लिए 'क्विकस्टार्टेड' टर्बोगियर्स परियोजना को कॉन्फ़िगर किया गया है। बीकर कैश संग्रहण के लिए उपयोग किए जाने वाले निम्नलिखित बैक-एंड का समर्थन करता है -

  • memory- प्रति-प्रक्रिया भंडारण के लिए उपयोग किया जाता है। यह बेहद तेज है।

  • filesystem - प्रति-प्रक्रिया भंडारण के साथ-साथ बहु-प्रक्रिया।

  • DBM database - प्रति-प्रक्रिया, बहु-प्रक्रिया, काफी तेज।

  • SQLAlchemy database- प्रति-डेटाबेस-सर्वर भंडारण। ऊपर दिए गए विकल्पों की तुलना में धीमी।

  • Memcached - मल्टी-सर्वर मेमोरी आधारित कैश।

नियंत्रक कैशिंग

त्वरित नियंत्रक कैशिंग के लिए, ए cached()डेकोरेटर उपलब्ध है। अनुरोध के विभिन्न मापदंडों के आधार पर पूरे नियंत्रक निकाय को कैश किया जाता है। की परिभाषाtg.decorators.cached() डेकोरेटर इस प्रकार है

tg.decorators.cached(key, expire, type, 
   query-args, cache_headers, invalidate_on_startup, cache_response)

मापदंडों का विवरण इस प्रकार है -

अनु क्रमांक। पैरामीटर और विवरण
1

key

कैश कुंजी उत्पन्न करने के लिए उपयोग किए जाने वाले नियंत्रक मापदंडों को निर्दिष्ट करता है।

2

expire

कैश समाप्त होने से पहले सेकंड में समय, "कभी नहीं" के लिए चूक।

3

Type

dbm, मेमोरी, फ़ाइल, मेम्केड या कोई नहीं।

4

cache_headers

हेडर के नामों का एक टपल प्रतिक्रिया हेडर दर्शाता है।

5

invalidate_on_startup

यदि सही है, तो हर बार एप्लिकेशन प्रारंभ होने या फिर से चालू होने पर कैश को अमान्य कर दिया जाता है।

6

cache_response

प्रतिक्रिया को कैश किया जाना चाहिए या नहीं, ट्रू को डिफॉल्ट करना चाहिए।

निम्नलिखित नियंत्रक कैशिंग का एक उदाहरण है -

@cached(expire = 100, type = 'memory')
@expose()
def simple(self):
   return "This is a cached controller!"

टेम्पलेट स्तर कैशिंग

जेनशी टेम्प्लेट इंजन कैश से टेम्प्लेट प्राप्त करता है यदि इसकी सामग्री नहीं बदली है। इस कैश का डिफ़ॉल्ट आकार 25 है। डिफ़ॉल्ट रूप से, टेम्प्लेट का स्वत: लोड होना सत्य है। प्रदर्शन में सुधार करने के लिए, निम्नलिखित सेटिंग्स में बनाया जा सकता हैapp_cfg.py -

[app:main]
genshi.max_cache_size = 100
auto_reload_templates = false

टेम्पलेट को कैश करने के लिए, आपको बस वापस लौटना होगा tg_cache नियंत्रक से विकल्प जो कैश्ड टेम्पलेट को प्रस्तुत करता है।

Tg_cache एक शब्दकोष है जो निम्नलिखित कुंजियों को स्वीकार करता है -

  • key - कैश कुंजी। Default: कोई नहीं।

  • expire - कैश को कितने समय तक जीवित रहना चाहिए। Default: कभी समाप्त नहीं होता हैं

  • type - मेमोरी, डीबीएम, मेमकेड। Default: डी बी एम।

निम्न उदाहरण टेम्पलेट कैशिंग दिखाता है -

@expose(hello.templates.user')
def user(self, username):
   return dict(user = username, tg_cache = dict(key = user, expire = 900))