2010-12-16 11 views
1

私はサイトのナビゲーションメニューを作成するために、ネイティブのWordpress関数wp_nav_menu()を使用しています。この関数は実際にはに時間がかかります。特に、ナビゲーションメニューが鉱山のように大きい場合は、時間がかかります。次のようにこれを回避するために、私の考えは次のとおりです。ここプロセッサは、プロセッサ集中型の機能を実行するよりも高速ですか?

session_start(); 
if(isset($_SESSION['topTranslucent'])) 
    echo $_SESSION['topTranslucent']; 
else { 
    // ob necessary because wp_nav_menu() echos it's results 
    ob_start(); 
    wp_nav_menu(array('menu'=>'Top Translucent','container'=>'','menu_id'=>'topMenu')); 
    $_SESSION['topTranslucent'] = ob_get_contents(); 
    ob_end_flush(); 
} 

私の思考は、すべてのページのロードに機能を再実行するよりも、セッション変数に保存されているHTMLをプリントアウトしてはるかに高速になるということです。しかし、PHPセッションであまり経験していないので、私はStackOverflowで素敵なファンダンスを手に入れたいと思っていました。問題は、セッションは実際に自分たちがやっていることをやっているだけですか? (つまり、テキストデータをページ間で使用されるクッキーに保存する)、または目を満たす以上のものはありますか?

答えて

1

セッションは、シリアル化されたデータをサーバーに格納しています。彼らは識別のためだけにクッキーを使用します。例:

Client: 
    cookie { PHPSESSID => '1234567890a' } 

Server: 
    cookie { PHPSESSID => '1234567890a' } 
    => session 1234567890a { 
    topTranslucent => '<yourcode>whatever</yourcode>' 
    } 

あなたのアプローチは有効です。セッション全体がロード時にシリアル化されないことに注意してください(これは、システムを遅くすると、大量のデータがロードされるためです)。

おそらくもっと良いアプローチは、キャ​​ッシュとは異なるメカニズムを使用することですが、キャッシュとしてのセッションはやや使い易いでしょう。

+0

OK、読み込み時にシリアル化されていない部分以外はすべて意味があります。マニュアルを見ましたが、それが私が「メモを取る」べき理由について私に手がかりを与えません...?ああ、私は共有サーバー上にいるので、APCなどを使用することはできません。 – JakeParis

+0

@JMC Creative:ちょうど "それをやめてください"という思い出を思い出させる - 私は、セッション中にすべての事前生成されたテンプレートを保存し、そのために糖蜜としてゆっくりだったシステムを見てきました(ファイルバックアップセッション、ディスクアクセス、IOボトルネック)。 – Piskvor

関連する問題