2010-12-17 6 views
0

私は、スクリプトのパフォーマンスを最適化し、重い初期化ヒットを避けるために、PHPスクリプトのさまざまな実行の間に特定のオブジェクトを '静的'にしたいと考えています。 これを行う方法はありますか?スクリプト実行間のPhpオブジェクトの残し方

+0

なぜキャッシュを使用しないのですか? ACPが役に立つかもしれません。 – joksnet

+0

ACP ???助けて。 – millebii

+0

https://encrypted.google.com/search?hl=ja&q=php+apc最初のヒット(またはウィキペディアの3番目) –

答えて

2

あなたは、ユーザーのセッションにそれを置くことができます。クラスは()のsession_start前に宣言されていること、しかし、確認してください:

require 'heavy_class.php'; 
session_start(); 

$_SESSION['heavy'] = new HeavyClass; 
+0

いいね。私はこの方法を試し、影響を見ると答えます。 – millebii

+0

うまく動作しますが、実際には少し悪化しています。私の初期化時間は、シリアライズ/デシリアライズアプローチよりも低いようです。 – millebii

1

このオブジェクトをシリアル化してセッション:)に格納します。 これを再度使用するには、ユーザーがシリアル化解除します。

2

オブジェクトをシリアル化してから、ローカルファイルまたはデータベースに永続化できます。これはphp関数を使って行うのが最適ですserialize()

次に、unserialize()を使用してオブジェクトを復元します。

実行スクリプトがオブジェクトのクラスを使用できるようにするための「問題」があります。

これは、シリアル化されているシリアル化されていないシリアル化されたときに、__sleep()__wakeupのシリアル化されているオブジェクトのマジックメソッドを呼び出します。これらのメソッドでは、データベースの初期化が行われます。 PHPのドキュメントへ

リンク: http://php.net/manual/en/function.serialize.php

+0

+1私は一度にすべてのセッションソリューションを扱うことができます。セッションではLESSオブジェクトが作成されますが、SINGLEオブジェクトは作成されません。目標が1つの単一のオブジェクトを持つことであるならば、あなたは他の何かをする必要があります。セッションはユーザ固有のものなので – DampeS8N

1

がセッションでそれをスティック、それは自動的にあなたのためにそれをシリアル化します。 __wakeupと__sleepのマジックメソッドを使用してデータベース接続などを処理できますが、ディスクヒットを避けることができます。

関連する問題