Tôi đang nhìn chằm chằm vào báo cáo Lighthouse của mình như thể nó nợ tôi tiền.
Hiệu suất: 62.
Thủ phạm? Hình ảnh. Hàng trăm hình ảnh rải rác trong các tệp markdown, được lưu trữ trên Flickr, Imgur, GitHub… tất cả ở định dạng JPEG và PNG chưa được tối ưu hóa.
Cách sửa thủ công sẽ là:
- Tải xuống từng hình ảnh
- Chuyển đổi sang WebP
- Tải lên CDN của tôi
- Tìm và thay thế mọi URL trong mọi tệp markdown
Với 500 hình ảnh duy nhất? Đó không phải là dự án cuối tuần. Đó là án tù.
Vì vậy, tôi đã làm điều mà bất kỳ kỹ sư lười biếng nào cũng làm: Tôi tự động hóa nó.
Vấn Đề
Blog của tôi sử dụng Hugo với các tệp markdown. Hình ảnh được tham chiếu ở khắp nơi:
| |
Mỗi hình ảnh phải được:
- Tải xuống từ nguồn gốc
- Chuyển đổi sang WebP (nhỏ hơn, nhanh hơn)
- Tải lên CDN mới của tôi
- URL được thay thế trong tệp markdown
Nhân với 500. Không cảm ơn.
Giải Pháp: Pipeline ETL
Tôi đã xây dựng bulk-webp-url-replacer—một công cụ Python làm chính xác những gì nó nói:
| |
Nó làm gì:
- Extract — Quét tất cả tệp
.mdđể tìm URL hình ảnh (frontmatter, galleries, inline) - Transform — Tải xuống từng hình ảnh và chuyển đổi sang WebP
- Load — Thay thế tất cả URL cũ bằng đường dẫn CDN mới
Một lệnh. 500 hình ảnh. Xong.
Các Chi Tiết Kỹ Thuật
Mẫu Regex Để Trích Xuất URL
Markdown có nhiều cách nhúng hình ảnh. Trình trích xuất của tôi xử lý tất cả:
| |
Tải Xuống Song Song
Tải xuống 500 hình ảnh tuần tự? Chậm. Với ThreadPoolExecutor:
| |
8 luồng = nhanh hơn 8 lần. Toán học đơn giản.
Giới Hạn Tốc Độ & Thử Lại
Imgur không vui với sự nhiệt tình của tôi. Lỗi HTTP 429 khắp nơi.
Cách sửa: backoff theo cấp số nhân với headers giống trình duyệt.
| |
Bỏ Qua Thông Minh
Công cụ lưu mapping.json sau mỗi lần chạy:
| |
Lần chạy tiếp theo? Nó bỏ qua các hình ảnh đã xử lý. Di chuyển gia tăng FTW.
Kết Quả
Trước:
- 612 tham chiếu hình ảnh trên 72 tệp markdown
- Hình ảnh rải rác trên Flickr, Imgur, GitHub
- Lighthouse van xin lòng thương
Sau:
- Tất cả hình ảnh được chuyển đổi sang WebP
- Được lưu trữ trên một CDN duy nhất
- URL được cập nhật tự động
- Một giờ làm việc (chủ yếu xem thanh tiến trình)
Cải thiện hiệu suất:
- Kích thước hình ảnh trung bình: nhỏ hơn 60-80%
- Hiệu suất Lighthouse: 62 → 89
Bài Học Rút Ra
Tự động hóa mở rộng. Những gì mất vài ngày thủ công chỉ mất một giờ để xây dựng và vài phút để chạy.
Giới hạn tốc độ là thực tế. Luôn thêm thử lại và backoff. Các trang như Imgur sẽ hạn chế bạn.
Chạy thử trước. Cờ
--dry-runđã cứu tôi khỏi vô tình phá hỏng 72 tệp.WebP đáng giá. Chất lượng giống nhau, kích thước nhỏ hơn nhiều. Không có lý do gì để phục vụ JPEG vào năm 2026.
Hãy Tự Thử
Công cụ mã nguồn mở trên GitHub.
| |
Điểm Lighthouse của bạn sẽ cảm ơn bạn. 🚀
Ví Dụ Đầu Ra
Sau khi chạy công cụ di chuyển, các URL được cập nhật tự động để trỏ đến các phiên bản WebP được tối ưu hóa:
| |
