2012-09-20 59 views
0

這是我的難題:

我正在創建一個多語言平臺。爲此,我創建了包含每種語言的所有翻譯文本的json文件。

現在,當他們的頁面上的用戶的土地,我從文件中讀取,並在這樣的$ _SESSION變量轉換的陣列,每次存儲爲

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

然後我想呼應的意見文本我訪問來自會話數組的元素:

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

現在我想知道,因爲$ _SESSION存儲在服務器上。像我一樣從會話中讀取,或者每次從文件中讀取並解碼json,會更快嗎? 第二個選項會是這樣認爲:

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

謝謝大家的幫助!

+2

你測試了什麼嗎?您可以跟蹤腳本運行的時間。 – Jurgo

+0

@Jashwant如何打開本地文件將創建一個http請求? –

+0

來自$ _SESSION和文件,你也可以使用APC或memcache來緩存它,因爲存儲是RAM –

回答

3

$_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); 
} 
+0

我們認爲是一樣的,因爲在原生PHP代碼中創建一個快速訪問緩存,但是您的代碼是beter –

+0

這是兩個很好的觀點。事實上,我在每個會話中都複製了數據,但如果確實速度更快,它可能會值得,因爲這是我爲每一段文本執行的操作,總體而言,它會對用戶產生顯着的差異。 – Tristan

+0

@Tristan:我希望你只爲每個腳本加載一次內容(不管你選擇什麼樣的方式),而不是每個字符串的翻譯 - 我對你的評論有些困惑。但無論如何,加載直接的PHP代碼是最快的。 – Jon

1

我不知道很多關於JSON,但我知道對於$_SESSION是另存爲 上的一個文件服務器與

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

,讀爲

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

是作爲喬恩說,如果你願意有速度,格式化此作爲本機的PHP代碼,或者我們可以將數據保存在本例的PHP文件。

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

而對於加載,這只是包含文件,然後從$ data中獲取數據。

0

在您給我們的兩個示例中,您將本地化數據存儲在文件中,但以不同的方式處理它們,其中一個處理會話中的其他變量。

問題應該是「如何處理本地化的數據高效」

+0

這是一個很好的觀點,對於本地化數據我很新手,我要一步一步來,但顯然這是值得從更廣泛的角度來看。 – Tristan