現在、私たちは Ajax リクエストに依存する多くのアプリケーションを開発しています。場合によっては、ページ全体が Ajax に依存していることもあります。 Web ページが 2 つ以上の Ajax リクエストを送信すると、PHP の応答時間が非常に長くなり、同時に応答コンテンツが返されることに気づくことがあります。
この問題は、PHP セッションの処理方法が原因で発生する可能性が高く、この記事に従ってこの問題を理解し、回避する方法を講じてください。
コンテンツ
PHPセッションとは何ですか?
Ajax とは何ですか?
具体的な問題
原因
問題の解決策
概要
PHPセッションとは何ですか?
この問題を理解するには、まず PHP セッションと Ajax、およびそれらがどのように干渉するかを理解する必要があります。
Web アプリケーションを開発していて、さまざまなユーザーを識別したいとします。ログインせずに毎回誰がすべてのページにアクセスしたかを記憶したい場合は、Cookie またはセッションを使用できます。
お気づきかと思いますが、セッションは、任意のページから取得できるユーザー情報を保存する方法です。 Cookie とは異なり、セッションはサーバーに保存されるため、ユーザーはこの情報を直接変更できません。
デフォルトでは、セッションはユーザーがブラウザを閉じるまで、またはユーザーが PHP 構成ファイルで指定された期間非アクティブになった後に期限切れになるまで有効です。
PHP ページでは、ユーザー データを保存または取得する場合は常に、ページの先頭で session_start() を呼び出す必要があります。これにより、セッション データを取得するために $_SESSION を使用する権限が得られます。
Ajax とは何ですか?
Ajax は Asynchronous JavaScript and XML の略で、ページ全体をリロードせずにサーバーとの間でデータを送受信する方法です。
この方法を使用して、データを送信し、サーバーからデータをより速く取得します。時間がかかるため、ページ全体を取得してブラウザでレンダリングする必要はありません。
したがって、ページ全体をリロードしなくても、新しいコンテンツが追加されると、ユーザーが Facebook のタイムライン ページを下にスクロールして見たいものを見るのと同じように、ページの一部を更新してその変更をユーザーに表示することができます。
具体的な質問
ほぼ 100% Ajax に基づいた Web アプリケーションの開発は新しいことではありませんが、Web ページが 2 つ以上の Ajax リクエストを同時に送信すると、リクエストに時間がかかることに気づくでしょう。ほぼ同時に依頼が完了しました。
理由
サーバーに Ajax リクエストを送信させる場合、PHP スクリプトも session_start() を開き、その呼び出しによって PHP セッション ファイルがロックされます。
すでにご存じのとおり、PHP はデフォルトでセッション データをサーバー上のファイルに保存します。同じセッション ファイルを変更できる PHP リクエストは 1 つだけであるため、2 つの PHP リクエストが同時に発生すると、典型的なファイル ロック状態が発生する可能性があります。そのため、同じユーザーに対して PHP によって呼び出される他の session_start() リクエストは、最初のリクエストが終了するまで待機する必要があります。
現在、ほとんどの PHP フレームワークは、最初にメイン ファイルで session_start() を使用します。したがって、session_start() を呼び出すフレームワークまたはライブラリを使用している場合、セッション ファイル ロックが発生し、同じブラウザを使用する同じユーザーへの同時 Ajax リクエストが遅延します。
問題の解決策
session_write_close() 関数を呼び出すと、PHP がセッション ファイルを書き込んで閉じるため、セッション ファイルが解放された後、別のリクエストに書き込み権限が与えられます。
session_write_close() を呼び出した後、現在のスクリプトは通常通り実行され続けますが、同じスクリプト内で session_write_close() を呼び出した後はセッション変数を変更することはできないことに注意してください。同時にセッション ファイルをロックし、セッション変数を変更することができます。
このような問題を見てもらうために、テストコードを作成して github にアップロードしました。テスト スクリプトはここにあります。ローカルでは、インスタンスを使用してテスト コードを使用し、ブラウザ コンソールを開いてリクエストと応答時間を確認する必要があります。
このファイルのサンプル コードにあるように、以下のコードのように複数のリクエストを作成すると...
<code><span>session_start()</span>; <span>sleep(<span>5</span>)</span>;</code>
同じユーザーの各リクエストは、前のリクエストが完了するまで待機してから完了します。スクリプトが完了するまでセッションファイルは解放されないため、5 秒かかります。したがって、session_start() が初めて呼び出されるとき、新しいリクエストはブロックされます。そうなると、非同期リクエスト、つまり複数のリクエストが同時に送信され実行されるという考えが消えてしまいます。
ファイル内のコードを変更すると:
<code><span>session_start()</span>; <span>// do something useful here</span><span>session_write_close()</span>; <span>sleep(<span>5</span>)</span>;</code>
コードの 3 行目でセッション ファイルのロックが解放され、別の同時リクエストは問題なく session_start() を呼び出すことができるため、待機することなく実行できます。
まとめ
PHP は少し微妙で、なぜ奇妙なことが起こるのか心配になるでしょう。しかし、物事がどのように機能するかを理解すると、すべてが理にかなっており、問題の解決についてよりよく考えることができるようになります。
翻訳元:http://www.ido321.com/1577.html
この記事は @Eslam Mahmoud の「Fix the AJAX Requests that Make PHP Take Too Long to Respond」を元に翻訳したものであり、翻訳全体に私自身の理解や考えが含まれております。翻訳が良くない場合や間違っている場合はご質問ください。同じ分野で働く友人。この翻訳を転載したい場合は、英語のソースを明記してください: http://www.phpclasses.org/blog/post/277-Fix-the-AJAX-Requests-that-Make-PHP-Take-Too-Long- to- Respond.html
以上、AJAXリクエストでPHPの応答に時間がかかりすぎる問題の解決方法を内容も含めて紹介しましたので、PHPチュートリアルに興味のある方の参考になれば幸いです。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
