インターネットアプリケーションの人気により、ユーザーがウェブサイトやアプリケーションで頻繁にリクエストやフォームを送信することがますます一般的になっています。頻繁なクリックと送信は、ユーザーエクスペリエンスに影響するだけでなく、サーバーの負担の増加を引き起こす可能性もあります。これらの問題を回避し、運用効率を向上させるために、揺れ防止および繰り返しの提出技術が登場しています。
アンチシェイクは、操作の実行を遅らせて無効な要求を減らすことにより、ユーザーの連続トリガーイベントを組み合わせた手法です。たとえば、ユーザーが検索ボックスに継続的に入力すると、通常、各入力が検索リクエストをトリガーする必要はありませんが、代わりにユーザーが一定期間入力を停止した後に検索を実行しません。
PHPでは、同様のアンチシェイク効果をシミュレートできます。次のコードは、静的変数を使用してタイマーを保存して検索ロジックの実行を遅らせる方法を示しています。
function debounceSearch($keywords) {
// 前回検索をトリガーしたタイマーを保存します ID
static $timer = null;
// 最後の遅延操作をクリアします
if ($timer) {
clearTimeout($timer);
}
// 新しい遅延操作を作成します
$timer = setTimeout(function() use ($keywords) {
// これが実際の検索ロジックです
searchKeywords($keywords);
}, 500); // 遅れ 500ms
}
実際のプロジェクトでは、この関数を入力ボックスのイベント監視で呼び出して、入力防止防止を実現して、短時間で検索要求の複数のトリガーを避けることができます。
反復防止提出は、主に、フォームを送信するときにネットワークの遅延または誤操作のためにユーザーが[提出]ボタンを複数回クリックしないようにするために使用され、同じフォームを繰り返し処理します。一般的な慣行は、一意のトークンを使用して、リクエストの一意性を確認することです。
次の例は、トークンを検証して重複提出を実装する方法を示しています。
function verifyToken($token) {
// 診る token 有効かどうか,通常から Session または、データベースで比較します
if ($token == $_SESSION['token']) {
// token 効率的
return true;
} else {
// token 無効
return false;
}
}
function processForm($data, $token) {
// 最初に確認します token
if (!verifyToken($token)) {
// token 無効,繰り返し提出されているとみなされます,直接返す
return;
}
// これが実際のフォーム処理ロジックです
doSomething($data);
// 処理後にクリアが完了します token,繰り返しの提出を避けてください
unset($_SESSION['token']);
}
この方法を使用して、フォームを送信する前に一意のトークンを生成し、セッションに保存します。フォームが1回だけ処理されていることを確認するために、トークンを送信するときにトークンを確認します。
アンチシェイクおよび繰り返しの提出技術により、ユーザーの運用体験を効果的に改善することができ、不必要な要求とデータの複製処理を回避し、サーバーの圧力を削減できます。 PHPアプリケーションでは、タイマーメカニズムを使用してアンチシェイクを実現でき、トークン検証を通じて反復的な提出を達成できます。実際のニーズに応じて、適切なソリューションを柔軟に選択することが、ユーザーの相互作用を最適化するための鍵です。