Bạn đã bao giờ tự hỏi tại sao một số trang web tải nhanh đến vậy, ngay cả khi có rất nhiều người đang sử dụng chúng cùng một lúc? Một trong những bí mật là thứ gọi là "web caching." Hôm nay, chúng ta sẽ khám phá cách web caching hoạt động trong một số framework phát triển web phổ biến.
Web Caching là gì?
Đọc bài viết trước của chúng tôi tại https://vulehuan.com/vi/blog/2024/6/web-caching-tang-toc-do-trang-web-cua-ban-6670f19ce71a6f1c6fb3761c.html
Ruby on Rails
Rails, một framework để xây dựng trang web bằng ngôn ngữ lập trình Ruby, có các tính năng caching tích hợp. Nó có thể cache toàn bộ trang web, các phần của trang, hoặc thậm chí các truy vấn cơ sở dữ liệu cụ thể.
Laravel (PHP)
Laravel, một framework cho PHP, cung cấp nhiều tùy chọn caching ngay từ đầu. Nó hỗ trợ caching dựa trên tệp, caching cơ sở dữ liệu và có thể làm việc với các hệ thống caching dựa trên bộ nhớ.
Django (Python)
Django là một framework Python phổ biến cung cấp hệ thống caching linh hoạt. Nó cho phép các nhà phát triển cache toàn bộ trang web, các view cụ thể, hoặc các đoạn template.
ASP.NET (C#)
Framework ASP.NET của Microsoft bao gồm các tính năng caching có thể cải thiện đáng kể hiệu suất của ứng dụng web. Nó hỗ trợ cả caching trong bộ nhớ và caching phân tán.
Express.js (JavaScript)
Trong khi Express.js không có tính năng caching tích hợp, việc thêm caching vào ứng dụng Express rất dễ dàng bằng cách sử dụng middleware như node-cache hoặc memory-cache.
Hầu hết các framework cho phép bạn thiết lập các tùy chọn caching trong tệp cấu hình.
Ví dụ, trong một tệp cấu hình Laravel, bạn có thể thấy như sau:
'default' => env('CACHE_DRIVER', 'file'),
'stores' => [
'file' => [
'driver' => 'file',
'path' => storage_path('framework/cache/data'),
],
'redis' => [
'driver' => 'redis',
'connection' => 'cache',
],
],
Điều này cho Laravel biết sử dụng caching dựa trên tệp theo mặc định, nhưng cũng thiết lập Redis như một tùy chọn khác.
Một trong những điều thú vị về các framework hiện đại là chúng làm cho việc chuyển đổi giữa các giải pháp caching trở nên dễ dàng.
Ví dụ, bạn có thể bắt đầu với caching dựa trên tệp vì nó đơn giản để thiết lập. Nhưng khi trang web của bạn phát triển, bạn có thể muốn chuyển sang cache dựa trên bộ nhớ như Redis để có hiệu suất nhanh hơn. Trong nhiều framework, bạn có thể thực hiện chuyển đổi này chỉ bằng cách thay đổi một dòng trong tệp cấu hình! Framework sẽ xử lý tất cả các vấn đề phức tạp phía sau.
Ví dụ Laravel:
// Lấy giá trị từ cache
$value = Cache::get('key');
// Ghi giá trị vào cache (hết hạn sau 60 phút)
Cache::put('key', 'value', 60);
// Kiểm tra nếu khóa tồn tại trong cache
if (Cache::has('key')) {
// Thực hiện gì đó
}
// Xóa giá trị khỏi cache
Cache::forget('key');
// Lưu trữ giá trị mãi mãi
Cache::forever('key', 'value');
// Lấy và lưu trữ (nếu không có)
$value = Cache::remember('key', 60, function() {
return 'default value';
});
Ví dụ Rails:
# Lấy giá trị từ cache
value = Rails.cache.read('key')
# Ghi giá trị vào cache (hết hạn sau 1 giờ)
Rails.cache.write('key', 'value', expires_in: 1.hour)
# Kiểm tra nếu khóa tồn tại trong cache
if Rails.cache.exist?('key')
# Thực hiện gì đó
end
# Xóa giá trị khỏi cache
Rails.cache.delete('key')
# Lấy và lưu trữ (nếu không có)
value = Rails.cache.fetch('key', expires_in: 1.hour) do
'default value'
end
Dù cú pháp có thể khác nhau, hầu hết các framework đều tuân theo các mẫu tương tự cho các hoạt động caching. Dưới đây là một cách tiếp cận chung mà bạn có thể áp dụng cho các framework khác:
Khi làm việc với một framework mới, hãy tham khảo tài liệu của nó để biết các phương thức caching cụ thể và các thực tiễn tốt nhất. Các khái niệm cốt lõi (get, set, delete, expire) vẫn nhất quán trên hầu hết các framework, ngay cả khi tên phương thức hoặc tham số cụ thể có khác nhau.