Thứ Hai, ngày 9 tháng 12 năm 2024
Vui lòng cho phép chúng tôi thực hiện hoạt động lưu vào bộ nhớ cache.
Đi đôi với sự phát triển của Internet qua nhiều năm, lượng nội dung được Google thu thập dữ liệu cũng tăng lên. Mặc dù cơ sở hạ tầng thu thập dữ liệu của Google luôn hỗ trợ các cơ chế lưu vào bộ nhớ cache theo phương pháp phỏng đoán, nhưng số lượng yêu cầu có thể được trả về từ bộ nhớ cache cục bộ đã giảm: 10 năm trước, khoảng 0,026% tổng số lượt tìm nạp có thể lưu vào bộ nhớ cache (con số vốn đã không ấn tượng lắm); ngày nay, con số đó là 0,017%.
Tại sao hoạt động lưu vào bộ nhớ cache lại quan trọng?
Hoạt động lưu vào bộ nhớ cache là một phần quan trọng trong bức tranh lớn về Internet. Hoạt động lưu vào bộ nhớ cache cho phép các trang tải rất nhanh khi người dùng truy cập lại, giúp tiết kiệm tài nguyên điện toán và nhờ vậy cũng tiết kiệm tài nguyên thiên nhiên, đồng thời tiết kiệm một lượng lớn băng thông đắt đỏ cho cả phía ứng dụng khách và máy chủ.
Đặc biệt là nếu bạn có một trang web lớn với nội dung hiếm khi thay đổi trong các URL riêng biệt, thì việc cho phép lưu vào bộ nhớ cache cục bộ có thể giúp trang web của bạn được thu thập dữ liệu hiệu quả hơn. Cơ sở hạ tầng thu thập dữ liệu của Google hỗ trợ tính năng lưu vào bộ nhớ cache HTTP theo phương thức phỏng đoán được định nghĩa trong tiêu chuẩn lưu vào bộ nhớ cache HTTP, cụ thể là thông qua tiêu đề của yêu cầu phản hồi ETag
và If-None-Match
, cũng như tiêu đề của yêu cầu phản hồi Last-Modified
và If-Modified-Since
.
Bạn nên sử dụng ETag
vì như thế sẽ ít gặp lỗi hơn (giá trị này không có cấu trúc, không giống như giá trị Last-Modified
). Và nếu có thể, bạn hãy thiết lập cả hai: điều này sẽ mang lại lợi ích chung cho cả mạng lưới Internet. Có thể.
Còn việc bạn xem đâu là thay đổi đòi hỏi ứng dụng khách phải làm mới bộ nhớ cache là tuỳ ý bạn. Bạn nên yêu cầu làm mới bộ nhớ cache khi nội dung của mình có thay đổi đáng kể; nếu bạn chỉ cập nhật ngày đăng ký bản quyền ở cuối trang, thì có thể đó không phải là thay đổi đáng kể.
ETag
và If-None-Match
Trình thu thập dữ liệu của Google hỗ trợ các yêu cầu có điều kiện dựa trên ETag
chính xác được định nghĩa trong tiêu chuẩn lưu vào bộ nhớ cache HTTP.
Tức là để báo hiệu cho trình thu thập dữ liệu của Google về lựa chọn ưu tiên lưu vào bộ nhớ cache, hãy thiết lập giá trị Etag
thành một chuỗi ASCII tuỳ ý (thường là hàm băm của nội dung hoặc số phiên bản, nhưng cũng có thể là một phần của số π, tuỳ ý bạn) chỉ dành riêng cho việc thể hiện nội dung do URL được truy cập lưu trữ.
Ví dụ: nếu bạn lưu trữ nhiều phiên bản của cùng một nội dung trong cùng một URL (ví dụ: phiên bản dành cho thiết bị di động và phiên bản dành cho máy tính), thì từng phiên bản có thể có một giá trị ETag
duy nhất.
Các trình thu thập dữ liệu của Google có hỗ trợ hoạt động lưu vào bộ nhớ cache sẽ gửi giá trị ETag
được trả về đối với lần thu thập dữ liệu trước đó của URL đó trong If-None-Match header
. Nếu giá trị ETag
mà trình thu thập dữ liệu gửi khớp với giá trị hiện tại do máy chủ tạo, thì máy chủ của bạn sẽ trả về mã trạng thái HTTP 304
(Chưa được sửa đổi) không có nội dung HTTP. Bit sau cùng này (không có phần nội dung HTTP) là quan trọng vì một số lý do:
- máy chủ của bạn không phải hao tốn tài nguyên điện toán để tạo nội dung thực sự; tức là bạn sẽ tiết kiệm được tiền
- máy chủ của bạn không phải truyền nội dung HTTP; tức là bạn sẽ tiết kiệm được tiền
Ở phía ứng dụng khách (chẳng hạn như trình duyệt của người dùng hoặc Googlebot), nội dung trong URL đó sẽ được truy xuất từ bộ nhớ cache nội bộ của ứng dụng khách. Vì không có hoạt động truyền dữ liệu nào, nên việc này diễn ra cực nhanh, khiến người dùng hài lòng và có thể tiết kiệm một số tài nguyên cho họ.
Last-Modified
và If-Modified-Since
Tương tự như ETag
, trình thu thập dữ liệu của Google cũng hỗ trợ các yêu cầu có điều kiện Last-Modified based
, chính xác được định nghĩa trong tiêu chuẩn lưu vào bộ nhớ cache HTTP. Xét theo quan điểm ngữ nghĩa thì giá trị này hoạt động giống như ETag
(một giá trị nhận dạng được sử dụng để quyết định xem có lưu tài nguyên vào bộ nhớ cache hay không) và mang lại các lợi ích giống như ETag
ở phía ứng dụng khách.
Chúng tôi có một vài gợi ý cho bạn nếu bạn đang sử dụng Last-Modified
làm lệnh lưu vào bộ nhớ cache:
-
Ngày trong tiêu đề
Last-Modified
phải được định dạng theo tiêu chuẩn HTTP. Để tránh các vấn đề về phân tích cú pháp, bạn nên sử dụng định dạng ngày sau: "Ngày trong tuần, DD Mon YYYY HH:MM:SS Múi giờ". Ví dụ: "Fri, 4 Sep 1998 19:15:56 GMT". -
Mặc dù không bắt buộc, nhưng bạn cũng nên cân nhắc việc thiết lập trường
max-age
của tiêu đềCache-Control
nhằm giúp trình thu thập dữ liệu xác định thời điểm thu thập dữ liệu lại đối với một URL cụ thể. Thiết lập giá trị của trườngmax-age
thành số giây dự kiến mà nội dung sẽ không thay đổi. Ví dụ:Cache-Control: max-age=94043
.
Ví dụ
Chắc là bạn cũng cảm nhận giống như tôi, tìm hiểu cách hoạt động của cơ chế lưu vào bộ nhớ cache theo phương pháp phỏng đoán là một việc không dễ chút nào, tuy nhiên, có vẻ như việc đưa ra ví dụ về chuỗi yêu cầu và phản hồi sẽ có ích cho tôi. Dưới đây là hai chuỗi (một chuỗi cho ETag
/If-None-Match
và một chuỗi cho Last-Modified
/If-Modified-Since
) để minh hoạ cách thức hoạt động của cơ chế này:
ETag /If-None-Match |
Last-Modified /If-Modified-Since |
|
---|---|---|
Phản hồi của máy chủ đối với một hoạt động thu thập dữ liệu: Đây là phản hồi mà thông qua đó trình thu thập dữ liệu có thể lưu các trường tiêu đề tiền đề ETag và Last-Modified .
|
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT ETag: "34aa387-d-1568eb00" ... |
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT Last-Modified: Fri, 4 Sep 1998 19:15:56 GMT Cache-Control: max-age=94043 ... |
Yêu cầu có điều kiện của trình thu thập dữ liệu tiếp theo: Yêu cầu có điều kiện dựa trên các giá trị tiêu đề tiền đề được lưu từ một yêu cầu trước đó. Các giá trị này sẽ được gửi lại máy chủ để xác thực trong tiêu đề yêu cầu If-None-Match và If-Modified-Since .
|
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-None-Match: "34aa387-d-1568eb00" ... |
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
Phản hồi của máy chủ đối với yêu cầu có điều kiện: Vì các giá trị tiêu đề tiền đề mà trình thu thập dữ liệu gửi đi sẽ được xác thực ở phía máy chủ, nên máy chủ sẽ trả về một mã trạng thái HTTP 304 (không có nội dung HTTP) cho trình thu thập dữ liệu. Điều này sẽ xảy ra với mọi yêu cầu tiếp theo cho đến khi không xác thực được các tiền đề (ngày ETag hoặc Last-Modified thay đổi ở phía máy chủ).
|
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:52 GMT Vary: Accept-Encoding If-None-Match: "34aa387-d-1568eb00" ... |
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:51 GMT Vary: Accept-Encoding If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
Nếu bạn đang nỗ lực để làm hài lòng người dùng và cũng muốn tiết kiệm một chút tiền đối với hoá đơn dịch vụ lưu trữ, hãy trao đổi với nhà cung cấp dịch vụ lưu trữ hoặc CMS hoặc nhà phát triển của mình về cách bật tính năng lưu vào bộ nhớ cache HTTP cho trang web của bạn. Ít nhất thì người dùng sẽ có cảm tình hơn một chút với bạn.
Nếu bạn muốn trao đổi về hoạt động lưu vào bộ nhớ cache, hãy truy cập vào cộng đồng trợ giúp của Trung tâm Tìm kiếm gần nơi bạn ở nhất. Nếu bạn có ý kiến về cách thức chúng tôi thực hiện hoạt động lưu vào bộ nhớ cache, hãy để lại ý kiến phản hồi đối với tài liệu về Hoạt động lưu vào bộ nhớ cache mà chúng tôi đã xuất bản cùng với bài đăng trên blog này.