Đây có thể coi là phần cuối của seri , tổng thể mình thấy bài viết đó khá ổn, đầy đủ các bước, thứ duy nhất còn thiếu là bước nén lại ảnh gốc khi upload lên
Ngẫm tới ngẫm lui vẫn thấy thuần tuý liên quan tới tối ưu ảnh Jetpack vẫn là vô đối, bất kể định dạng gì, chất lượng ảnh của Jetpack vẫn là hàng đầu, quan trọng nhất là họ miễn phí nữa, nên sử dụng nó để tạo ra Jetpack WebP CDN Replacer
Do bước cuối cùng còn thiếu là nén lại ảnh gốc (FULL), plugin này giải quyết duy nhất vấn đề đó, công dụng của nó có thể viết trong 1 dòng 😀
Cách làm này mang hơi hướng tiểu xảo khá nhiều, đôi phần có thể gọi là lạm dụng, vì Jetpack CDN không hướng tới cách hoạt động như thế
Plugin hoạt động qua WP-Cron nên cấu hình sử dụng Linux’s cronjob, tắt WP-Cron mặc định đi để đạt hiệu quả tối ưu nhất
Cài đặt dạng plugin, gặp lỗi gì chỉ việc vào thư mục /wp-content/plugins
xóa đi, hạn chế và dễ xử lý lỗi hơn
Phương thức hoạt động
Mình khá thích nguyên tắc “cài xong quên”, không cần chỉnh gì, nên cố gắng vận hành theo nguyên tắc này, đảm bảo tính khả dụng, chỉ dùng các hàm có sẵn WordPress mặc định: wp_remote_get
, wp_update_attachment_metadata
, wp_generate_attachment_metadata
Để không ảnh hưởng tới trải nghiệm sử dụng, mỗi khi upload phải chờ chạy đủ các bước thì hơi mất thời gian, phần này khoán hết cho WP-Cron chạy sau
- Tạo 1 Cron Events (
jetpack_webp_cdn_replacer_process
) ngay lập tức sau khi upload ảnh lên (còn chuyện bao lâu cron thực sự mới chạy thì tùy thuộc thời gian WordPress xử lý, nếu cấu hình theo bài Linux’s cronjob thường sau khoảng 1 phút là cron sẽ chạy) - Công đoạn này bao gồm download ảnh WebP, chép đè lên ảnh ảnh cũ sau đó cập nhập lại meta dữ liệu
- Trong trường hợp bạn upload 100 hay 1000 tấm ảnh cùng 1 thời điểm, tối đa xử lý 20 tấm ảnh cùng 1 lúc, thử nghiệm thấy khi chạy không ăn CPU là mấy nên vẫn đang duy trì con số này
- Kiểm tra log tại
wp-content/jetpack-webp-cdn-replacer
Bước nặng nhất của toàn bộ quá trình mình nghĩ là phần tạo lại meta cho bức ảnh, nó ghi thông tin vào database, mà thấy xử lý 20 tấm ảnh cùng lúc khá thoải mái, thậm chí nó còn nhẹ hơn so với cách WordPress mặc định tự tạo nhiều thumbnail từ 1 tấm ảnh gốc
Các lỗi có thể xảy ra
Mọi tấm ảnh dù đang là .png hay .jpg, thực tế nó đều là WebP, nên nếu ai dùng 1 trình duyệt đời quá cũ, tới mức không hỗ trợ WebP thì sẽ không thấy ảnh 😀 khoản này thì mình cũng kệ, vì không nghĩ ai vào thèng bibica.net mà dùng trình duyệt bản cũ tới mức đấy được, phần vì thực tế mình vẫn chạy các link ảnh thông qua Jetpack, ảnh sẽ tự được điều chỉnh theo trình duyệt phù hợp
Lú nhất là khi chạy qua môi trường WP-Cron trên WordPress, khá giống vấn đề chạy cron ở môi trường Docker, vài hàm kiểu wp_generate_attachment_metadata
nó không chịu chạy :]]
Về vấn đề logic mình cũng cố xử lý, đảm bảo tất cả các file ảnh không bị sót, dù upload 1 lần 1 ảnh hay 1 lần 100-1000 ảnh, thử nghiệm sơ bộ thì ở phiên bản v1.2 đang chạy khá ổn, mình có thử upload 100 ảnh, sau đó xóa đi, upload lại 100 ảnh, đều thấy xử lý chính xác
Vấn đề lỗi liên quan tới hệ thống từ Jetpack thì chịu, không test được, vì nó trâu bò kinh hoàng, mình dùng chắc cũng 5-7 năm nay, chưa bao giờ thấy sập hay lỗi
Không quá chắc tất cả tình huống lỗi phát sinh ở nhiều cấu hình khác nhau, bạn nào dùng, thấy lỗi gì thì cứ comment bên dưới, mình sẽ cố xử lý nếu có thể
Ảnh trên không liên quan tới bài viết, up thử coi nó nó tự giảm dung lượng hay không thôi 😛
GIPHY App Key not set. Please check settings