2016-05-19 4 views
0

私は以下のシナリオを持っていますリダイレクト後に極端なロード時間が発生する可能性のあるAJAX呼び出し?

PageAがロードされていて、3つのajax呼び出しが起動します。サーバーが処理できないものは何もありません。今、ajax呼び出しが終了する前に、ユーザーはページBにリダイレクトしています。私は彼らがバックグラウンドで走り続けていることは知っていますが、この可能性があり、劇的な積載時間をもたらす可能性がありますsqlの過熱はありません。サーバプロセッサは、その限界の約10%しか使用していません。しかし、ローディング時間は1秒から2秒まで50秒以上になることがあります。

これは以前の、まだ実行中のajax呼び出しに起因する可能性があり、ブラウザは何らかの形でこれらの呼び出しと接続しており、次のページをロードする前に応答を待っていますか?

+1

セッションを使用していますか? – sintakonte

+0

セッションライブラリを使用するかどうかによって異なりますか?はい、私たちは、もしajax呼び出しがそれを使用していれば?いいえ、セッションがページの読み込みにどのくらい関連しているのか分かりませんか? – killstreet

+0

アンロードイベントでアクティブなすべてのAjaxを中止することができます。 – developerCK

答えて

0

コメントセクションのあなたの答えに基づいて私はそれを説明し、これを解決しようとします - 私はこの問題で何度も走ったので - あなたのajax呼び出しがセッションライブラリを使用していないと書いていますとにかくそれを始めるならば、外に出てください。

PHPはセッションデータをデフォルトでファイルに書き込みます。要求が開始されると、セッションが開始されます。このセッションファイルはロックされています。これは、あなたのウェブページがPHPスクリプトに大量のリクエストを出した場合、例えば、 Ajax経由でコンテンツをロードするために、各リクエストはセッションをロックし、他のリクエストが完了するのを防ぎます。

私たちはそのような状況を防ぐためにやったことは以下の通りです:あなたの/application/config/hooks.phpで

$hook['pre_controller'][] = array(
    "class" => "AppSessionInterceptor", 
    "function" => "initialize", 
    "filename" => "AppSessionInterceptor.php", 
    "filepath" => "hooks" 
); 

その後AppSessionInterceptor

と呼ばれるフックを作成
class AppSessionInterceptor 
{ 

    private $ci; 

    public function __construct() 
    { 
     $this->ci = &get_instance(); 
    } 

    public function initialize() 
    { 
     //some doings 
     $this->closeSession(); 
    } 

    private function closeSession() 
    { 
     $blnSessWriteClose = true; 

     $arrStopSessionFromWriteClose = array(
      $this->ci->uri->segment(1) => array("logout","login"), 
      $this->ci->uri->segment(2) => array("logout","login"), 
      $this->ci->input->get("blnWriteSession") => array(1) 
     ); 

     foreach($arrStopSessionFromWriteClose AS $key => $arrValue) 
     { 
      if (in_array($key, $arrValue)) 
      { 
       $blnSessWriteClose = false; 
       break; 
      } 
     } 

     if ($blnSessWriteClose) session_write_close(); 
    } 
} 

これは、他のものが呼び出される前にセッションを閉じます。 セッションを閉じると、データを読み取ることはできますが、それ以上書き込むことはできません。

関連する問題