0

ここに私のジレンマがあります:

多言語プラットフォームを作成しています。その目的で、各言語のすべての翻訳済みテキストを含む json ファイルを作成しました。

ユーザーが自分のページにアクセスすると、そのファイルから読み取り、翻訳の配列を次のような $_SESSION 変数に保存します

$_SESSION['website_text'] = json_decode(file_get_contents("content_".$language.".json"), true);

次に、ビューでテキストをエコーするたびに、セッション配列から要素にアクセスします。

$text = $_SESSION['website_text']['paragraph2_headline'];

$_SESSION はサーバーに保存されているので、今私は疑問に思っています。私のようにセッションから読み取るか、ファイルから毎回読み取り、json をデコードする方が高速ですか? 2番目のオプションは次のようになります。

$website_text = json_decode(file_get_contents("content_".$language.".json"), true);
$text =  $website['paragraph2_headline'];

ご協力ありがとうございました!

4

3 に答える 3

4

からデータを取得する場合はおそらく高速です$_SESSIONが、$_SESSIONローカリゼーション データを保存する場所としては適していません。ユーザーごとに複製されることになるからです。

文字列を取得するとき$_SESSION、PHP はセッション ファイルからデータを読み取って (他のセッション データを読み取るために既に行っているため、ファイルを開くコストはいくらか償却されます)、そのunserialize上で実行する必要があります。JSON ファイルから取得した場合は、ファイルを開き、読み取り、実行しますjson_decodeunserializeよりも速いはずですがjson_decode、それについて私に引用しないでください。

これを高速化することに関心がある場合は、配列として保存されている PHP ファイルから文字列を直接読み取ることをお勧めします。

// content_en.php
<?php
return array(
    'welcome' => 'Welcome to our website!',
    // ...
);

ローカリゼーション ファイルが JSON の場合でも、JSON を PHP に "コンパイル" し、PHP コードをキャッシュとして使用するのは非常に簡単です。

$lang = 'en';

$sourceFile = 'content_'.$lang.'.json';
$cacheFile = 'content_'.$lang.'.cache.php';
if (!is_file($cacheFile)) {
    $content = json_decode(file_get_contents($sourceFile), true);
    file_put_contents($cacheFile, "<?php\n return ".var_export($content, true).";");
}
else {
    $content = include($cacheFile);
}
于 2012-09-20T12:55:00.997 に答える
1

JSONについてはよくわかりませんが$_SESSION、サーバーにファイルとして保存することは知っています。

file_put_contents($path, serialize($_SESSION));

そして、

$_SESSION = unserialize(file_get_contents($path));

はい、Jonが言うように、速度があれば、これをネイティブPHPコードとしてフォーマットするか、この例でPHPファイルとしてデータを保存できます。

function save_data($path,$data) {
     file_put_contents($path, "<?php $data=unserialize('".addslashes(serialize($data))."'); ?>");
}

そして、ロードの場合、これはファイルをインクルードしてから$dataからデータを取得するだけです。

于 2012-09-20T12:58:40.450 に答える
0

あなたが私たちに与えた両方の例では、ローカリゼーション データをファイルに保存しますが、それらを別の方法で処理します。1 つは変数、もう 1 つはセッションです。

質問は「ローカリゼーション データを効率的に処理する方法」です。

于 2012-09-20T13:06:30.400 に答える