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))