ホームページ > バックエンド開発 > PHPチュートリアル > PHP の揺れ防止および重複送信防止: ユーザー操作の効率を向上させます。

PHP の揺れ防止および重複送信防止: ユーザー操作の効率を向上させます。

WBOY
リリース: 2023-10-12 13:12:01
オリジナル
1417 人が閲覧しました

PHP 防抖和防重复提交:提升用户操作的效率

PHP 揺れ防止および重複送信防止: ユーザー操作の効率を向上させるには、特定のコード例が必要です

インターネットの普及と開発に伴い、テクノロジーの進歩により、ますます多くの人がさまざまな Web サイトやアプリケーションを使用して、フォームの送信やリクエストの送信などのさまざまな操作を実行するようになりました。ただし、このプロセスでは、ユーザーがボタンを頻繁にクリックしてフォームの送信が繰り返されたり、フロントエンドの対話中にリクエストが頻繁に送信されてサーバーの負荷が増加したりするなど、いくつかの問題が発生することがよくあります。ユーザー操作の効率を向上させるには、これらの問題を解決するための何らかの技術的手段が必要ですが、その中には手ぶれ防止と繰り返し防止が一般的な解決策です。

1. アンチシェイク

アンチシェイクは、ユーザーが頻繁に操作する場合に、実行を遅らせたり、連続した操作を統合したりすることでトリガーの数を減らす技術です。たとえば、Web ページに検索ボックスがありますが、ユーザーが素早く連続して入力した場合、入力するたびに検索リクエストをトリガーするのではなく、ユーザーが一定時間入力をやめた後に検索できるようにしたいと考えています。これにより、不要なリクエストの数が減り、ユーザー エクスペリエンスが向上します。

PHP では、タイマーを使用することで手ぶれ補正効果を実現できます。以下はサンプル コードです。

function debounceSearch($keywords) {
    // 保存上一次触发搜索的定时器 ID
    static $timer = null;

    // 清除上一次的延时操作
    if ($timer) {
        clearTimeout($timer);
    }

    // 创建新的延时操作
    $timer = setTimeout(function() use ($keywords) {
        // 这里是实际的搜索逻辑
        searchKeywords($keywords);
    }, 500); // 延时 500ms
}

// 在表单或输入框的事件监听中调用 debounceSearch 函数即可实现防抖
ログイン後にコピー

上記のコードでは、静的変数 $timer を使用して、最後の検索をトリガーしたタイマー ID を保存します。ユーザーが入力を行うと、まず以前の遅延操作が存在するかどうかを判断し、存在する場合は、最初に最後の遅延操作をクリアしてから、新しい遅延操作を作成します。これにより、ユーザーは検索する前に一定期間入力を停止することができます。

2. 重複送信の防止

重複防止送信は、ユーザーがフォームを送信したりリクエストを送信したりするときに、いくつかの方法を使用して重複送信を回避するテクノロジーです。たとえば、ユーザーが Web ページ上の送信ボタンをクリックした後、ネットワークが遅い場合、またはユーザーが誤ってボタンを複数回クリックした場合、同じフォームが複数回送信される可能性があります。このような事態を避けるために、バックグラウンドで処理を実行して、繰り返しの送信を防ぐことができます。

PHP では、トークンを使用することで繰り返しの送信を防ぐことができます。以下はサンプル コードです。

function verifyToken($token) {
    // 检查 token 是否有效,可以从 Session 或者数据库中获取相应的 token 进行比对
    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']);
}

// 在表单提交前生成 token,并保存到 Session 或者数据库中
// 将 token 输出到表单中的隐藏字段或者 URL 参数中
ログイン後にコピー

上記のコードでは、まず、指定されたトークンが有効かどうかを確認する verifyToken 関数を定義します。次に、processForm 関数で、最初に verifyToken 関数を呼び出してトークンが有効かどうかを確認します。無効な場合は、繰り返し送信されたとみなされ、直接返されます。が有効である場合、実際のフォーム処理ロジックが実行され、処理が完了した後にトークンをクリアして、同じフォームが繰り返し送信されるのを防ぎます。

この方法では、ユーザーがフォームを送信するときに、バックグラウンドでトークンの有効性を検証するだけで済み、繰り返しの送信を効果的に防ぐことができます。

概要

手ぶれ防止および再送信防止の技術的手段を通じて、ユーザー操作の効率を向上させ、不要なリクエストとサーバーの負荷を軽減し、ユーザー エクスペリエンスを向上させることができます。 PHP では、タイマーを使用して手ぶれ防止を実現し、トークンを使用して繰り返し送信を防ぐことができます。上記は 2 つの解決策のうちの 1 つにすぎず、実際のニーズと状況に応じて、問題を解決するために適切な方法を選択できます。

以上がPHP の揺れ防止および重複送信防止: ユーザー操作の効率を向上させます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート