2016-04-12 20 views
-1

セッション中に保持したいユーザー情報があります。セッション保存ハンドラとしてmemcacheを使用しています。私は私が優れている一つのアプローチを知りたいユーザー情報セッション変数のパフォーマンスへの影響PHP

$_SESSION['uname'] = 'abx'; 
$_SESSION['email'] = '[email protected]'; 
$_SESSION['profilepage'] = 'http://t'; 
$_SESSION['role'] = '1'; 
$_SESSION['profilepicture'] = 'http://t'; 
$_SESSION['gender'] = 'M'; 

OR

$obj = new stdClass(); 
$obj->uname = 'abx'; 
$obj->email = '[email protected]'; 
$obj->profilepage = 'http://t'; 
$obj->role = 1; 
$obj->profilepicture = 'http://t'; 
$obj->gender = 'M'; 
$_SESSION['user'] = $obj; 

を格納するための2つのアプローチがあります。複数のセッション変数を持つことは、パフォーマンスに影響します。

+1

ベンチマークを実行します。 –

+0

どのくらいのデータについて話していますか?どのくらいの頻度でセッションを読み書きしますか? – st2erw2od

+0

以上のユーザー情報データがあります。これまで私はユーザーデータがセッションを使用する必要があります。 – coder

答えて

2

ご質問やご意見に言及したこのわずかなデータ量によるパフォーマンスへの影響は、ごくわずかです。ベンチマークテストでは、内部的に非常に小さな差異を測定することができますが、これでは速度が向上することはありません。

このシナリオでは、クリーンで再利用可能な保守可能なコードがパフォーマンスよりも優れていると考えています。第2のオブジェクト指向のアプローチは、私の意見ではもっと意味があり、ベストプラクティスと見なされます。

1

st2erw2odの回答(私は絶対に彼に同意します)に加えて、セッションの良いユースケースのようには聞こえません。

セッションには、ユーザーのすべてのデータおよび/またはユーザーオブジェクトの完全なオブジェクトが含まれていてはなりません。必要なデータのみを含める必要があります(例:どのユーザが認証されるか。電子メールアドレス、プロフィール画像などの他のすべてのものは、特定のルール(必要な場合や完全なユーザーエンティティなど)に従ってデータベース(ファイルシステムなど)からロードする必要があります。だからこの場合、セッションにユーザーIDを保存し、データベースから情報をロードすることをお勧めします。

この主な利点は次のとおりです。a)明確で(コードが少ない)。 b)あなたの情報は常に最新であり、データベースと同期されます。そうしないと、深刻なバグが発生する可能性があります。

+0

私は同意する、この情報をOPに役立てるために追加していただきありがとうございます。 – st2erw2od

+0

@アンドレアス制限された情報はセッションに保存する必要がありますが、セッションまたはキャッシュレイヤーに必要な情報は最小限必要です。それ以外の場合は、すべてのページでさらにヒットします。 – coder

+0

@ user524694:追加の情報をロードするには、データベースにアクセスする必要があります。現在は、通常、エンティティのようないくつかの種類のモデルをロードする必要があります。 – Andreas