Hôm nay tôi chạy thử nghiệm qua db của mình để khám phá sự khác biệt về tốc độ giữa việc truy cập khóa từ các tùy chọn, bảng tùy chỉnh & tạm thời. Tôi đã chạy thử nghiệm 1000 lần và sau đây là thời gian để chạy 1000 hoạt động:
Hãy nhớ rằng bảng tùy chọn được sử dụng cho cả tùy chọn và tạm thời trên hầu hết các hệ thống và bảng đó đã được tối ưu hóa, với các chỉ mục được thêm vào. Vì vậy, nó không phải là một so sánh công bằng
get_transient () 0,0245 giây get_option () 0,0068 giây thao tác chọn đơn giản từ Bảng tùy chỉnh 0,65 giây
Đây cũng là một so sánh không công bằng, các tùy chọn với bộ autoload
tùy chọn, sẽ được tải nâng cao trong một truy vấn sớm. Vì vậy, get_option
được kéo từ WP_Cache
, tùy chọn đã được lấy.
TLDR: Nó không thực sự tìm nạp tùy chọn, nó đã được tìm nạp, nó chỉ lấy nó từ bộ nhớ do autoload
tùy chọn
Tôi cũng đã kiểm tra rằng thoáng qua không hết hạn trong bài kiểm tra này.
Điều này không nên có tác động đến một hệ thống bình thường đối với truy xuất tạm thời, sau tất cả, nó không biết liệu nó đã hết hạn cho đến khi được truy xuất.
Vì vậy, câu hỏi là, get_option () nhanh hơn get_transient () hay tôi đã làm hỏng điều gì đó trong bài kiểm tra của mình?
Nó phụ thuộc:
- Trên hầu hết các hệ thống, các quá độ được lưu trữ bằng các tùy chọn, cả hai đều liên quan đến một
get_option
cuộc gọi
- Tất cả các tùy chọn
autoload
được đặt thành true đều được tải trong một cuộc gọi khi bắt đầu để chúng được giữ trong bộ nhớ, không có truy vấn nào xảy ra sau đó
- Bộ nhớ đệm đối tượng lưu trữ cả hai tùy chọn tự động tải và tạm thời
Là độ trễ bảng tùy chỉnh do các tùy chọn được lưu trong bộ nhớ cache của WordPress?
Rất có thể, nhưng việc chọn nhanh như thế nào phụ thuộc rất nhiều vào truy vấn và thiết kế bảng
Ngoài ra, các tùy chọn cũng được lưu trữ bởi các plugin lưu trữ khác nhau như các quá độ?
Có, WP_Cache
được sử dụng, sẽ lưu trữ nó trong bộ nhớ cho phần còn lại của yêu cầu. Các plugin bộ nhớ đệm có thể duy trì các giá trị này vì lý do hiệu suất.
Lặp lại
Tất cả đều được lưu trong bộ nhớ cache WP_Cache
nên lần thứ hai bạn yêu cầu, không có DB nào tham gia.
Sự thay đổi và nó phụ thuộc
Tất cả điều này giả định một cơ sở chung, nhưng đối với bộ đệm đối tượng thì sao?
Hãy giới thiệu một phiên bản MemcacheD hoặc Redis (Tôi thực sự khuyên bạn nên làm như vậy nếu bạn có tùy chọn, lợi ích hiệu suất HUGE cho các trang web được xây dựng tốt, đặc biệt là nếu bạn sử dụng chúng cho bộ nhớ đệm trang, trừ khi bạn có một cái gì đó như thiết lập Varnish)
Bây giờ chúng ta có một tình huống mới:
- Bây giờ dữ liệu được lưu trữ trong RAM và sau khi được tải xuống từ DB, nó đã được mồi và thời gian truy cập giảm đáng kể. Vẫn chậm hơn một biến, nhưng nhanh hơn đáng kể so với truy vấn cơ sở dữ liệu
- Rất nhiều dữ liệu mới được lưu trữ trong
WP_Cache
đó thường không có. Ví dụ: WP_Post
các đối tượng, bài meta, v.v.
WP_Cache
bây giờ vẫn tồn tại trên các yêu cầu
- MemcacheD vv có thể loại bỏ quá hạn quá hạn vv
Vì vậy, bây giờ tạm thời và các tùy chọn có cùng chi phí truy cập. Họ đã ở gần, nhưng giờ họ không đáng kể và có liên quan nhiều hơn đến tải CPU tại thời điểm yêu cầu được đưa ra.
Vì vậy, đối với hiệu suất tôi nên sử dụng Transents hoặc Tùy chọn?
Trong khi đó là một câu hỏi đáng để thắc mắc, câu trả lời là sự khác biệt là không đáng kể và trong phạm vi sai số
Vì vậy, hãy ngừng tối ưu hóa vi mô, chúng là cùng một phương tiện lưu trữ và điều này không xứng đáng với thời gian của bạn
- Sử dụng tùy chọn nếu bạn cần lưu trữ một cái gì đó rộng khắp trang web
- Sử dụng tạm thời để lưu trữ tạm thời những thứ đắt tiền để tính toán để bạn không phải đến lần sau
Không đáng để bạn dành thời gian để chọn cái khác dựa trên hiệu suất, không có sự khác biệt có ý nghĩa.
Có nhiều cách tốt hơn để tối ưu hóa giúp tiết kiệm đáng kể, ví dụ như sử dụng phân loại thay vì meta trong truy vấn bài đăng, không sử dụng __not
tham số kiểu, thực hiện ít việc hơn trên trang, cài đặt bộ đệm đối tượng, bài đăng thấp hơn trên mỗi trang, tránh yêu cầu từ xa Vân vân
Điều gì về một bảng tùy chỉnh sẽ ...
Không, bảng tùy chọn đã được tối ưu hóa tốt, sử dụng bảng tùy chỉnh sẽ đơn giản di chuyển các hoạt động bên ngoài hệ thống Bộ nhớ đệm WP, buộc bạn phải tự viết