Tôi vừa viết một loạt các lớp gửi email hàng loạt để xử lý lượng email khổng lồ và phân tích cú pháp nội dung của chúng theo các thông số đã qua. Nếu tôi kiểm tra email trên 1000 người nhận ngẫu nhiên và 1000 người gửi ngẫu nhiên từ cơ sở dữ liệu của tôi, cho đến thời điểm tập lệnh chạm vào phần send() (tôi đã nhận xét), tôi nhận được hiệu suất khoảng 2 giây và bộ nhớ cao nhất 20 MB , điều đó thật tuyệt.PHP, sendmail và vận chuyển - cách tăng tốc độ gửi thư
Tuy nhiên, nếu tôi bỏ ghi chú phần gửi, quá trình gửi mất 30 giây. Điều này là không thể chấp nhận được, và tôi muốn tăng tốc nó bằng cách nào đó. Rõ ràng là từ thử nghiệm rằng sự chậm trễ là do không có gì khác hơn so với cuộc gọi $ mail-> send(), như thể nó đang chờ nó trả lại một cái gì đó trước khi tiếp tục vòng lặp và gửi email tiếp theo.
Điều tôi đang thắc mắc là: làm thế nào để tăng tốc độ gọi send()? Tôi có thể làm gì để làm cho nó nhanh hơn? Tôi đã thử sử dụng hai phương thức gửi:
- Zend Truyền tải SMTP, kết nối trực tiếp với máy chủ và chỉ gửi. Điều này mất 30 giây cho mỗi 1000 email.
- Sendmail qua Zend_Mail. Chỉ cần gọi hàm gửi của Zend_Mail sau khi chuẩn bị từng email. Điều này mất 60 giây.
Xin lưu ý rằng xếp hàng chắc chắn là một tùy chọn và tôi đã xây dựng nó vào các lớp học của mình. Tất cả phải mất là kích hoạt một cron và nó hoạt động như một say mê. Nhưng tôi tự hỏi về việc gửi thực tế và làm thế nào để tăng tốc độ đó. Vì vậy, thực tế gửi() gọi.
Sửa lỗi nếu tôi sai, nhưng một truy vấn MySQL tốt sẽ luôn vượt qua việc đọc tệp. Cơ chế xếp hàng đã được thực hiện theo cách nào đó và không cần cải thiện ngay bây giờ. Tương tự, các email của chúng tôi đều có nội dung khác nhau. Vì vậy, trong khi chúng tôi đang gửi 1000 email trong 2 giây, mỗi email có một người nhận khác nhau, người gửi khác nhau và nội dung khác nhau. Tôi tin rằng khía cạnh này bạn hiển thị ở đây có thể hữu ích trong việc gửi email hàng loạt, đúng không? Trường hợp nội dung giống hệt nhau trong tất cả các tin nhắn? Nếu không, câu hỏi vẫn còn - điều này có thể nhanh hơn xếp hàng trong cơ sở dữ liệu không? Tôi hoài nghi. – Swader
Tôi nghĩ rằng vấn đề là SENDING không phát sinh! :) Có thể có một số máy chủ thư được tối ưu hóa, có thể tải các gazzilions hàng loạt của thư. Anycase - nó sẽ nhanh hơn phương thức sendmail của php. Truy cập máy chủ trực tiếp nên được nhiều lần fater hơn php sẽ bao giờ được (nó có thể ví dụ sử dụng kết nối liên tục). –
Hmmm, hoàn toàn đúng. Một email chuẩn bị có thể dễ dàng được lưu vào đĩa ở định dạng eml, và từ đó trên một kịch bản sẽ tiếp quản. Điều này cũng có thể phục vụ như một hàng đợi thay thế. Bạn có bất kỳ ví dụ về việc này đang được thực hiện một cách hiệu quả? Tôi rất muốn có một cái nhìn tại một số. – Swader