大量の電子メールを処理し、渡されたパラメータに従ってコンテンツを解析するための一括メール送信クラスを作成しました。私が1000のランダムな受信者と1000人のランダムな送信者の電子メールをデータベースから試してみると、スクリプトがsend()の部分に当たるまで(私は今コメントしています)、約2秒のパフォーマンスと20 MBのピークメモリこれは素晴らしいことです。PHP、sendmail、transports - メール送信を高速化する方法
ただし、送信部分のコメントを外すと、送信に30秒かかります。これは容認できないものです。私は何とかそれをスピードアップしたいと思います。テストから、$ mail-> send()以外の呼び出しによって遅延が発生していることは明らかです。ループを続行して次の電子メールを送信する前に何かを返すのを待っているかのようです。
私が思っているのは、send()コールをスピードアップするにはどうすればいいですか?それをより速くするために私は何ができますか?私は2つの送信方法を試しました。
- Zend SMTPトランスポート、サーバーに直接接続して送信するだけです。これには、電子メール1000件につき30秒かかります。
- Sendmail経由でZend_Mail。 Zend_Mailのsend関数は、各メールを準備した後で呼び出すだけです。これには60秒かかります。
キューイングは間違いなくオプションであり、クラスに組み込んでいます。それが必要なのはクーロンを活性化することであり、それは魅力のように機能します。しかし、私は実際の送信とそれをスピードアップする方法について不思議です。つまり、実際のsend()呼び出しです。
私が間違っている場合は私を修正してください。ただし、良いMySQLクエリは常にファイルの読み込みを上回ります。キューイングの仕組みは既にどちらの方法でも行われており、今は改善の必要はありません。同様に、私たちの電子メールはそれぞれ異なる内容を持っています。だから私たちは2秒で1000の電子メールを送信している間、それらのそれぞれは異なる受信者、異なる送信者と異なるコンテンツを持っています。私はあなたがここに表示されたこの側面は大量の電子メールでのみ役に立つと思う、はい?すべてのメッセージでコンテンツが同一の場合そうでない場合、質問はまだ残っています - これは、データベースのキューに入れるよりも速いでしょうか?私は懐疑的だ。 – Swader
私は問題が発生していないと思った! :)いくつかの最適化されたメールサーバーがあり、メッセージのgazzilionsを大量に読み込むことができます。 Anycase - phpのsendmailよりも高速です。直接サーバーへのアクセスは、phpがこれまで以上に多くの時間を費やす必要があります(たとえば、永続的な接続を使用することができます)。 –
うん、まあまあ。準備された電子メールはeml形式でディスクに簡単に保存でき、その後はスクリプトが引き継がれます。これは代替キューとしても有効です。効率的なやり方でこのような事例がありますか?私はいくつかを見てみたい。 – Swader