Trên một hệ thống, tôi đã nhìn thấy một quá trình nền độc lập làm cho hình thu nhỏ:
- mẫu được xử lý bình thường, mà không tạo ra bất kỳ hình ảnh thu nhỏ ở tất cả
- hình ảnh được đưa ra một cái tên độc đáo và sao chép vào một thư mục đặc biệt.
- một mục cơ sở dữ liệu được tạo ra trong một bảng
thumbnails
, liên kết hình ảnh ban đầu và tên độc đáo mới, đánh dấu là "được thu nhỏ" kịch bản xử lý
- dạng dừng lại để chăm sóc và tiếp tục với bất cứ điều gì khác nó cần phải làm.
Có quy trình nền độc lập (và cơ quan giám sát) liên tục xem thư mục đặc biệt đó (hầu hết các hệ điều hành đều có các công cụ khác nhau thông báo cho bạn khi nội dung của thư mục thay đổi); nếu nó tìm thấy một hình ảnh đó, nó sẽ:
- tạo ra một hình ảnh thu nhỏ (chúng tôi đang sử dụng CLI ImageMagick cho rằng)
- tiết kiệm nó ở một nơi khác
- cập nhật cơ sở dữ liệu, thiết lập tình trạng hình ảnh như "thu nhỏ OK "(hay 'thất bại', nếu nó không có thể làm cho một)
Khi bạn cần hình thu nhỏ, đánh dấu vào bảng thumbnails
- nếu hình ảnh không phải là 'thu nhỏ OK', cho thấy một giữ chỗ, nếu không có được sự chính xác tên hình thu nhỏ và hiển thị tên này.
Điều đó hiệu quả - hầu hết các hình thu nhỏ được tạo trong vòng vài giây, mà không làm chậm các tập lệnh hướng đến người dùng. Lưu ý rằng bạn sẽ cần phải bắt đầu kịch bản nền bằng cách nào đó - trong trường hợp này, có một cơ quan giám sát trong cron, khởi động lại kịch bản thu nhỏ nếu nó chết.
@yankee đối tượng rằng một số yếu tố phổ biến:
- nó không phải là cần thiết cho quá trình Thumbnailer để chạy như một kịch bản nền - nếu bạn có thể sống với một phút của độ trễ trước khi bạn nhận được hình thu nhỏ, bạn có thể chạy nó như là một kịch bản cron, loại bỏ hoàn toàn cơ quan giám sát.
- ImageMagick được chọn trên GD vì lý do hiệu suất cụ thể; trình thu nhỏ có thể sử dụng bất kỳ phương thức nào khả dụng.
Chỉnh sửa: Tôi đã kiểm tra trang web và có thêm một cơ chế nữa - điều này là không cần thiết và bổ sung thêm chút tải, nhưng trông rất tuyệt, đặc biệt nếu bạn không mong đợi tải trang đầy đủ. trên các trang web AJAX-driven):
- nơi một "không-không-nhưng-không-thumbnail" giữ chỗ là đầu ra, hình thu nhỏ được hiển thị trong một
img
với class="nothumb"
- một hàm JS kiểm tra cho hình ảnh với này lớp
- nếu tìm thấy, nó sẽ định kỳ kiểm tra xem hình thu nhỏ có đã có sẵn chưa
- giữ chỗ tĩnh được thay thế bằng placeholders "tải"
- nếu tìm thấy, nó sẽ thay thế các placeholder với thumbnail
này nạp hình thu nhỏ ngay sau khi họ đã sẵn sàng, với chi phí một số tài nguyên. Đối với một quá trình nền liên tục, nó không thực sự cần thiết; nhưng nếu bạn muốn đảm bảo rằng người dùng sẽ thấy hình thu nhỏ khi chúng trở nên có sẵn thay vì trên lần tải trang tiếp theo của họ, đây là một bổ sung hữu ích.
liên quan, không nhất thiết phải là một bản sao: http://stackoverflow.com/questions/124462/asynchronous-php-calls – Bobby