哪个更快:从$ _SESSION或json文件中获取数组?

时间:2012-09-20 12:52:38

标签: php json file-io session-variables

这是我的困境:

我正在创建一个多语言平台。为此,我创建了包含每种语言的所有翻译文本的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 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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获取数据。