web-dev-qa-db-ja.com

非同期/ノンブロッキングプロセスにwp_schedule_single_eventを使用する場合

私は最近いくつかのプラグインでこのパターンに気づいた。

<?php
function MY_CRON(){
  wp_schedule_single_event(time(), 'MY_ACTION');
}
add_action('save_post', 'MY_CRON');

function MY_FUNCTION(){
  // YOUR CODE HERE
}
add_action('MY_ACTION', 'MY_FUNCTION');

それはあなたが賢くなりたいフックで複雑な関数を実行することを避けます。それは 'save_post'、AJAXを介した呼び出し、または私の場合はWoocommerceの新しい注文のようなものです。それはこれらの記事でより詳しく概説されています:

  1. Wordpressの非同期関数
  2. 保存後または更新後にWordPressでWP Cronを使用して非同期バックグラウンドタスクを開始する

このパターンについて他の開発者から意見を得たいと思っていました。

このアプローチに関する私の問題は、a)あなたのサイト上のトラフィックが少ない場合、WP Cronがどのように機能するかによって、決して実行されないかもしれないということです。そしてb)あなたがしていることが本当に複雑なことであれば、例えば10秒で完了しても、次にページがロードされてWP Cronが起動されるときにページのレンダリングが遅れることはありませんか?だから私の管理者の操作は本当に賢いと私はブラウザを閉じますが、サイトを訪問している次のユーザーはさらに10秒の読み込み時間を取得している?だから私がしているのは他の人に待ち時間を渡すことだけですか?いくつかのケースでは、これは私自身でさえあり得ます。

だから私の結論はWP Cronを無効にしてcrontabでwp-cron.php?doing_cronへの呼び出しをスケジュールすることでした。しかし、それが実行中に私のサイトをブロックすることはありませんか?

1
Jan Beck

...あなたのサイトのトラフィックが少ない場合は、WP Cronの動作方法によっては実行されない可能性があります。

あなたの特定の例では、それは常に燃えるべきです。 save_postはブラウザのリダイレクト直前に実行されるので、その後の編集画面へのリクエストはcronスケジュールを起動します。

... WP Cronがページの読み込みによってトリガーされたときに、ページのレンダリングが遅れることはありませんか?

いいえ。 spawn_cron() をチェックアウトすると、スケジュールを処理するための並列要求が起動されます。

コーデックスから:

ページの読み込みを停止しないHTTPリクエストを介してcronを実行するリクエストを送信します。 60秒ごとに複数回実行されることはありません。

1
TheDeadMedic