2

通常の AJAX 投稿要求 (60 秒ごと) を使用して、PHP を実行するプロジェクトがあります。残念ながら、サーバーはリソースの制限に達し続けています (私は共有ホスティングを使用しています)、つまり - CPU %.

私はほとんどすべてを試しましたが、最終的に PHP で set_time_limit を減らすという考えに至りました。これに違いがあるかどうか誰かが教えてくれますか?これにより、スクリプトはリソースをより迅速に「解放」しますか? または逆に、これは効果がないか、効果がマイナスになりますか?

すべての答えを前もってありがとう!

PS私は時間を短縮しようとしています:

set_time_limit(5);
ini_set("max_execution_time", 5);

PHP は FastCGI で実行されています。

4

2 に答える 2

1

PHP プログラムが最大実行時間より長く実行されると、タイムアウト エラーでクラッシュします。

最大実行時間を変更するだけでは、実行速度が向上するわけではありません。ただし、コードの実行に 5 秒以上かかる場合、プログラムは終了せずにクラッシュします。

これにより、サーバー リソースが確実に解放されますが、おそらく有用な方法ではありません。

実行に長い時間がかかるプログラム (つまり、この種のプログラムでは 1 秒以上) がある場合、最善の選択肢は、プログラム自体のパフォーマンス分析を行うことです。XDebug のようなツールを使用して、ボトルネックがどこにあり、なぜ遅いのかを分析し、プログラムを改善して高速化します。

于 2013-10-30T14:22:35.223 に答える
0

一般的に言えば、長時間にわたって最大 CPU に達している場合は、対処する必要ある問題です。プロセスを時期尚早に強制終了しません。

定期的に CPU を集中的に使用する ajax リクエストを投稿している場合は、次のことを試してください。

  • サーバー側では、データを処理するための「ショートカット」を作成できるかどうかを確認してください。何も変更していない、または変更する必要がある場合は、できるだけ早くスクリプトを削除してください。たとえば、データの変更時間を確認し、「変更されていない」機能をスクリプトとリクエスト処理に追加します。
  • スクリプトを最適化します。「callgrinding」を使用して、問題のある領域を特定します。
  • mysql クエリをループしていないことを確認してください。実行するクエリの数を減らし、ループで大きなクエリ (挿入など) をアセンブルするだけにします。
  • これらの間隔で ajax リクエストを行う必要があるかどうかを確認します。たとえば、Javascript を使用して、ユーザーが画面を見ているかどうかを検出しようとします (たとえば、ウィンドウがフォーカスされていない)。ユーザーが離れている間はリクエストを停止するか、リクエストをよりまばらに配置します。
  • アクティビティに基づいて ajax リクエストを 2 つのキューに入れます。ユーザーが最近アクティブだった (マウスを動かした、ウィンドウにフォーカスを合わせた) 場合は、1 分間隔に切り替えます。しばらく時間が経過している場合は、間隔をさらに離して、あまり多くのクエリを実行しないようにします。

解決策として、スクリプトを早期に強制終了したり、意図的にクラッシュさせたりしてはなりません。これは、非常に望ましくない問題への扉を開いています。ajax を使用して頻繁にサービスに ping を実行している場合、それらの呼び出しは短くて高速である必要があります。

于 2013-10-30T14:47:19.347 に答える