TurboGears - การแคช

เพื่อเพิ่มประสิทธิภาพการทำงานของเว็บแอปพลิเคชันโดยเฉพาะอย่างยิ่งหากเกี่ยวข้องกับการดำเนินการที่ยาวนานจะใช้เทคนิคการแคช TurboGears มีเทคนิคการแคชสองประเภท -

Whole-page Caching

ทำงานในระดับโปรโตคอล HTTP เพื่อหลีกเลี่ยงคำขอทั้งหมดไปยังเซิร์ฟเวอร์โดยให้เบราว์เซอร์ของผู้ใช้หรือพร็อกซีเซิร์ฟเวอร์ระดับกลาง (เช่น Squid) สกัดกั้นคำขอและส่งคืนสำเนาของไฟล์ที่แคชไว้

Application-level Caching

สิ่งนี้ทำงานภายในแอ็พพลิเคชันเซิร์ฟเวอร์เพื่อแคชค่าที่คำนวณซึ่งมักเป็นผลลัพธ์ของการสืบค้นฐานข้อมูลที่ซับซ้อนเพื่อให้คำขอในอนาคตสามารถหลีกเลี่ยงไม่ต้องคำนวณค่าใหม่ สำหรับเว็บแอปพลิเคชันการแคชระดับแอปพลิเคชันจะมอบวิธีที่ยืดหยุ่นในการแคชผลลัพธ์ของการสืบค้นที่ซับซ้อนเพื่อให้สามารถลดภาระทั้งหมดของวิธีการควบคุมที่กำหนดให้เป็นแบบสอบถามเฉพาะผู้ใช้เพียงไม่กี่รายการหรือแบบสอบถามเฉพาะกรณีและการแสดงค่าใช้จ่ายของเทมเพลต .

การแคชระดับแอปพลิเคชัน

ดังที่ได้กล่าวไว้ก่อนหน้านี้โครงการ TurboGears 'เริ่มต้นอย่างรวดเร็ว' ได้รับการกำหนดค่าให้เปิดใช้งานแพ็คเกจ Beaker สำหรับการสนับสนุนการแคช Beaker รองรับส่วนหลังต่อไปนี้ที่ใช้สำหรับการจัดเก็บแคช -

  • memory- ใช้สำหรับการจัดเก็บต่อกระบวนการ มันเร็วมาก

  • filesystem - การจัดเก็บต่อกระบวนการและหลายกระบวนการ

  • DBM database - ต่อกระบวนการหลายกระบวนการรวดเร็วพอสมควร

  • SQLAlchemy database- ที่เก็บข้อมูลต่อฐานข้อมูลเซิร์ฟเวอร์ ช้ากว่าเมื่อเทียบกับตัวเลือกที่ระบุข้างต้น

  • Memcached - แคชที่ใช้หน่วยความจำหลายเซิร์ฟเวอร์

แคชคอนโทรลเลอร์

สำหรับการแคชคอนโทรลเลอร์อย่างรวดเร็ว a 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, หน่วยความจำ, ไฟล์, memcached หรือไม่มี

4

cache_headers

tuple ของชื่อส่วนหัวที่ระบุส่วนหัวการตอบกลับ

5

invalidate_on_startup

หากเป็นจริงแคชจะไม่ถูกต้องทุกครั้งที่แอปพลิเคชันเริ่มทำงานหรือรีสตาร์ท

6

cache_response

ควรแคชการตอบกลับหรือไม่โดยมีค่าเริ่มต้นเป็น True

ต่อไปนี้เป็นตัวอย่างของการแคชคอนโทรลเลอร์ -

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

การแคชระดับเทมเพลต

เอ็นจินแม่แบบ Genshi ดึงเทมเพลตจากแคชหากเนื้อหาไม่เปลี่ยนแปลง ขนาดเริ่มต้นของแคชนี้คือ 25 โดยค่าเริ่มต้นการโหลดเทมเพลตใหม่โดยอัตโนมัติจะเป็นจริง เพื่อปรับปรุงประสิทธิภาพการทำงานสามารถทำการตั้งค่าต่อไปนี้ได้app_cfg.py -

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

ในการแคชเทมเพลตคุณต้องส่งคืนไฟล์ tg_cache ตัวเลือกจากคอนโทรลเลอร์ที่แสดงเทมเพลตแคช

tg_cache เป็นพจนานุกรมที่ยอมรับคีย์ต่อไปนี้ -

  • key - คีย์แคช Default: ไม่มี.

  • expire - แคชจะต้องมีชีวิตอยู่นานแค่ไหน Default: ไม่มีวันหมดอายุ

  • type - หน่วยความจำ, dbm, memcached Default: dbm.

ตัวอย่างต่อไปนี้แสดงการแคชเทมเพลต -

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