Golang - Iris Web Framework #17: Cache (Bộ nhớ đệm)

18 tháng 02, 2020 - 2347 lượt xem

Đôi khi điều quan trọng là các tuyến bộ đệm phục vụ nội dung tĩnh để làm cho ứng dụng web của bạn hoạt động nhanh hơn và không mất thời gian xây dựng lại phản hồi cho khách hàng.

Có hai cách để đạt được bộ nhớ đệm HTTP. Một là lưu trữ nội dung trên mỗi trình xử lý ở phía máy chủ và cách khác là kiểm tra một số tiêu đề và gửi 304 not modified để cho phép trinh duyệt hoặc bất kỳ máy khách tương thích nào tự xử lý bộ nhớ đệm.

Iris cung cấp cả bộ nhớ đệm của máy chủ và máy khách thông qua gói con iris/cache của nó để xuất các phần mềm trung gian iris.Cache và iris.Cache304.

Chúng ta hãy xem phác thảo của họ.

 


Cache

Bộ nhớ cache là phần mềm trung gian cung cấp chức năng bộ đệm phía máy chủ cho các trình xử lý tiếp theo, có thể được sử dụng như: app.Get("/", iris.Cache, aboutHandler).

Bộ nhớ cache chấp nhận một tham số duy nhất: thời gian hết hạn bộ đệm. Nếu hết hạn là giá trị không hợp lệ, <= 2 giây, thì hết hạn được lấy bởi tiêu đề "cache-control's maxage".

Tất cả các loại phản hồi có thể được lưu trữ, mẫu, json, văn bản, bất kỳ điều gì.

Sử dụng nó cho bộ nhớ đệm phía máy chủ, xem Cache304 để biết cách tiếp cận khác có thể phù hợp hơn với yêu cầu của bạn.

func Cache(expiration time.Duration) Handler

Để có thêm tùy chọn và tùy chỉnh, hãy sử dụng kataras/iris/cache.Cache để trả về cấu trúc mà từ đó bạn có thể thêm hoặc xóa "Rules".

 


NoCache

Nocache là một phần mềm trung gian ghi đè lên các tiêu đề Cache-Control, Pragma và Expires để vô hiệu hóa bộ đệm trong tính năng quay lại và chuyển tiếp của trình duyệt.

Việc sử dụng tốt phần mềm trung gian này là trên các tuyến HTML; để làm mới trang ngay cả trên các nút mũi tên của trình duyệt "back" và "forward".

func NoCache(Context)

Xem StaticCache cho hành vi ngược lại.

 


StaticCache

StaticCache trả về một phần mềm trung gian để lưu các tệp tĩnh bằng cách gửi các tiêu đề "Cache-Control" và "Expires" cho máy khách. Nó chấp nhận một tham số đầu vào duy nhất, "cacheDur", một time.Duration mà nó sử dụng để tính hết hạn.

Nếu "cacheDur" <=0 thì nó trả về phần mềm trung gian NoCache được cài đặt để vô hiệu hóa bộ đệm giữa các hành động "back" và "forward" của trình duyệt.

Cách sử dụng: app.Use(iris.StaticCache(24 * time.Hour)) hoặc app.Use(iris.StaticCache(-1)).

func StaticCache(cacheDur time.Duration)Handler

Một phần mềm trung gian, là một trình xử lý đơn giản có thể được gọi bên trong một trình xử lý khác, ví dụ:

 cacheMiddleware := iris.StaticCache(...)

 func(ctx iris.Context){
  cacheMiddleware(ctx)
  [...]
}

 


Cache304

Cache304 trả về một phần mềm trung gian gửi StatusNotModified (304) bất kỳ khi nào "If-Modified-Since" yêu cầu (thời gian) trước time.Now() + expiresEvery (luôn được so sánh với các giá trị UTC của chúng).

Các máy khách tương thích với HTTP RCF (tất cả các trình duyệt và các công cụ như một người đưa thư) sẽ xử lý chính xác bộ nhớ đệm.

Nhược điểm duy nhất của việc sử dụng đó thay vì bộ nhớ đệm phía máy chủ là phương pháp này sẽ gửi mã trạng thái 304 thay vì 200, vì vậy, nếu bạn sử dụng nó cùng với microservices khác, bạn cũng phỉa kiểm tra mã trạng thái đó cho một response hợp lệ.

Các nhà phát triển có thể mở rộng hành vi của phương thức này bằng cách xem các thay đổi thư mục hệ thống theo cách thủ công và sử dụng ctx.WriteWithExpiration với "modtime" dựa trên ngày sửa đổi tệp, tương tự như HandleDir (sẽ gửi trạng thái OK(200) và bộ đệm đĩa trình duyệt thay vì 304).

func Cache304(expiresEvery time.Duration) Handler

Xem ví dụ tại: https://github.com/kataras/iris/tree/master/_examples/cache.

Phần tiếp theo chúng ta sẽ tìm hiểu về File Server.

 

Bình luận

avatar
Netmaxims Technologies 2020-02-18 11:07:03.63724 +0000 UTC
Thank you for this informative article
Avatar
* Vui lòng trước khi bình luận.
Ảnh đại diện
  0 Thích
0