TurboGears - Bộ nhớ đệm
Để nâng cao hiệu suất của một ứng dụng web, đặc biệt là nếu nó liên quan đến các hoạt động dài, các kỹ thuật bộ nhớ đệm được sử dụng. TurboGears cung cấp hai loại kỹ thuật bộ nhớ đệm:
Whole-page Caching
Nó hoạt động ở cấp giao thức HTTP để tránh toàn bộ yêu cầu đến máy chủ bằng cách trình duyệt của người dùng hoặc máy chủ proxy trung gian (chẳng hạn như Squid) chặn yêu cầu và trả lại bản sao được lưu trong bộ nhớ cache của tệp.
Application-level Caching
Điều này hoạt động trong máy chủ ứng dụng để lưu vào bộ nhớ cache các giá trị đã tính toán, thường là kết quả của các truy vấn cơ sở dữ liệu phức tạp, để các yêu cầu trong tương lai có thể tránh phải tính toán lại các giá trị. Đối với các ứng dụng web, bộ nhớ đệm cấp ứng dụng cung cấp một cách linh hoạt để lưu vào bộ nhớ cache kết quả của các truy vấn phức tạp để tổng tải của một phương pháp bộ điều khiển nhất định có thể được giảm xuống một số truy vấn dành riêng cho người dùng hoặc theo trường hợp cụ thể và chi phí hiển thị của một mẫu .
Bộ nhớ đệm cấp ứng dụng
Như đã đề cập trước đó, dự án TurboGears 'khởi động nhanh' được định cấu hình để kích hoạt gói Beaker hỗ trợ bộ nhớ đệm. Beaker hỗ trợ các kết thúc sau được sử dụng để lưu trữ bộ nhớ cache -
memory- Được sử dụng để lưu trữ theo quy trình. Nó là cực kỳ nhanh chóng.
filesystem - lưu trữ trên mỗi quá trình cũng như nhiều quá trình.
DBM database - per-process, multi-process, khá nhanh.
SQLAlchemy database- lưu trữ trên mỗi cơ sở dữ liệu-máy chủ. Chậm hơn so với các tùy chọn đã cho ở trên.
Memcached - bộ nhớ đệm dựa trên bộ nhớ đa máy chủ.
Bộ đệm điều khiển
Để lưu vào bộ nhớ đệm bộ điều khiển nhanh chóng, cached()trang trí có sẵn. Toàn bộ phần thân bộ điều khiển được lưu vào bộ nhớ đệm tùy thuộc vào các thông số khác nhau của yêu cầu. Định nghĩa củatg.decorators.cached() trang trí như sau
tg.decorators.cached(key, expire, type,
query-args, cache_headers, invalidate_on_startup, cache_response)
Mô tả các thông số như sau:
Sr.No. | Thông số & Mô tả |
---|---|
1 | key Chỉ định các tham số bộ điều khiển được sử dụng để tạo khóa bộ nhớ cache. |
2 | expire Thời gian tính bằng giây trước khi bộ nhớ cache hết hạn, Mặc định là “không bao giờ”. |
3 | Type dbm, memory, file, memcached, hoặc None. |
4 | cache_headers Một loạt tên tiêu đề cho biết tiêu đề phản hồi. |
5 | invalidate_on_startup Nếu Đúng, bộ nhớ cache bị vô hiệu mỗi khi ứng dụng khởi động hoặc được khởi động lại. |
6 | cache_response phản hồi có nên được lưu vào bộ nhớ đệm hay không, mặc định là True. |
Sau đây là một ví dụ về bộ nhớ đệm của bộ điều khiển:
@cached(expire = 100, type = 'memory')
@expose()
def simple(self):
return "This is a cached controller!"
Bộ nhớ đệm cấp mẫu
Công cụ mẫu Genshi lấy mẫu từ bộ nhớ cache nếu nội dung của nó không thay đổi. Kích thước mặc định của bộ đệm này là 25. Theo mặc định, tự động tải lại các mẫu là true. Để cải thiện hiệu suất, các cài đặt sau có thể được thực hiện trongapp_cfg.py -
[app:main]
genshi.max_cache_size = 100
auto_reload_templates = false
Để lưu mẫu vào bộ nhớ cache, bạn chỉ cần trả về tg_cache tùy chọn từ bộ điều khiển hiển thị mẫu đã lưu trong bộ nhớ cache.
Tg_cache là một từ điển chấp nhận các khóa sau:
key - Chìa khóa bộ nhớ đệm. Default: Không ai.
expire - bộ nhớ đệm phải tồn tại trong bao lâu. Default: không bao giờ hết hạn
type - bộ nhớ, dbm, memcached. Default: dbm.
Ví dụ sau minh họa bộ nhớ đệm mẫu -
@expose(hello.templates.user')
def user(self, username):
return dict(user = username, tg_cache = dict(key = user, expire = 900))