メインコンテンツへスキップ

PHP ワーカースレッド

PHP ランタイムによってメイン Web サイトのユーザー インターフェイスの速度が低下しないように、PHP は常に Web ワーカー で実行されます。

次のコードを想像してください。

<button onclick="for(let i=0;i<100000000;i++>) {}">ページをフリーズする</button>
<input type="text" />

ボタンをクリックするとすぐにブラウザがフリーズし、入力できなくなります。これはブラウザの仕組みです。forループであれPHPサーバーであれ、負荷の高いタスクを実行するとユーザーインターフェースの動作が遅くなります。

Web ワーカーの起動

Web ワーカーは、メインアプリケーションの外部で負荷の高いタスクを処理できる独立したプログラムです。ブラウザタブ内のメインの JavaScript プログラムから起動する必要があります。手順は以下のとおりです。

const phpClient = consumeAPI<PHPClient>(
spawnPHPWorkerThread(
'/worker-thread.js' // Valid Worker script URL
)
);
await phpClient.isReady();
await phpClient.run({ code: `<?php echo "Hello from the thread!";` });

Web ワーカーの制御

Web Worker を制御する唯一の方法は、メッセージの交換です。メインアプリケーションは、Web Worker 内の関数や変数にアクセスできません。worker.postMessageworker.onmessage = function(msg) { } を使用してのみメッセージを送受信できます。

これは面倒な作業になる可能性があるため、Playground では便利な consumeAPI 関数を提供しています。この関数はメッセージ交換を抽象化し、Web Worker から特定の関数を公開します。そのため、上記の例では phpClient.run を呼び出すことができます。