Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 哪个更快:从$\u会话获取数组还是从json文件获取数组?_Php_Json_File Io_Session Variables - Fatal编程技术网

Php 哪个更快:从$\u会话获取数组还是从json文件获取数组?

Php 哪个更快:从$\u会话获取数组还是从json文件获取数组?,php,json,file-io,session-variables,Php,Json,File Io,Session Variables,我的困境是: 我正在创建一个多语言平台。为此,我创建了json文件,其中包含每种语言的所有翻译文本 现在,当用户登录到他们的页面时,我从该文件中读取并将翻译数组存储在$\u会话变量中,例如 $_SESSION['website_text'] = json_decode(file_get_contents("content_".$language.".json"), true); 然后,每当我想回显视图上的文本时,我都会从会话数组访问元素: $text = $_SESSION['website_

我的困境是:

我正在创建一个多语言平台。为此,我创建了json文件,其中包含每种语言的所有翻译文本

现在,当用户登录到他们的页面时,我从该文件中读取并将翻译数组存储在$\u会话变量中,例如

$_SESSION['website_text'] = json_decode(file_get_contents("content_".$language.".json"), true);
然后,每当我想回显视图上的文本时,我都会从会话数组访问元素:

$text = $_SESSION['website_text']['paragraph2_headline'];
现在我想知道,因为$\u会话存储在服务器上。是像我一样从会话中读取更快,还是每次都从文件中读取并解码json更快? 第二种选择是:

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

谢谢大家的帮助

$\u会话
提取数据时,很可能速度更快,但是
$\u会话
不是存储本地化数据的好地方,因为它最终会为每个用户复制

当您从
$\u SESSION
中检索字符串时,PHP必须从会话文件中读取数据(它已经读取了任何其他会话数据,因此打开文件的成本在一定程度上是分摊的),然后在其上运行
取消序列化
;如果您从JSON文件中检索它,则它已打开该文件,读取并运行
JSON\u decode
unserialize
应该比
json\u decode
更快,但请不要引用我的话

如果您有兴趣快速读取字符串,最好直接从存储为数组的PHP文件中读取字符串:

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

很可能从
$\u会话
中提取数据时速度更快,但是
$\u会话
不是存储本地化数据的好地方,因为它最终会为每个用户复制

当您从
$\u SESSION
中检索字符串时,PHP必须从会话文件中读取数据(它已经读取了任何其他会话数据,因此打开文件的成本在一定程度上是分摊的),然后在其上运行
取消序列化
;如果您从JSON文件中检索它,则它已打开该文件,读取并运行
JSON\u decode
unserialize
应该比
json\u decode
更快,但请不要引用我的话

如果您有兴趣快速读取字符串,最好直接从存储为数组的PHP文件中读取字符串:

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

我对JSON了解不多,但我知道对于
$\u会话来说,
是另存为 服务器上具有的文件

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))."'); ?>");
}
函数保存数据($path,$data){

file_put_contents($path,“我对JSON不太了解,但我知道对于
$\u会话,
是另存为 服务器上具有的文件

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))."'); ?>");
}
函数保存数据($path,$data){

file_put_contents($path,“在您给我们的两个示例中,您将本地化数据存储在文件中,但以不同的方式处理它们,一种在变量中,另一种在会话中


问题应该是“如何有效地处理本地化数据”

在您给我们的两个示例中,您将本地化数据存储在文件中,但以不同的方式处理它们,一种是在变量中,另一种是在会话中



问题应该是“如何高效地处理本地化数据”

您测试了什么吗?您可以跟踪脚本运行的时间。@Jashwant打开本地文件将如何创建http请求?除了从$\u会话和文件中,您还可以使用APC或memcache对其进行缓存,这显然更快,因为存储是最重要的RAM@VladBalmos,我错了,删除了我的答案。我没有测试它ed,但由于我认为这是开发人员面临的一个常见难题,所以我更喜欢先问。您测试了什么吗?您可以跟踪脚本运行的时间。@Jashwant打开本地文件将如何创建http请求?除了$\u会话和文件,您还可以使用APC或memcache缓存它,这显然比storag更快e是RAM@VladBalmos,我错了,删除了我的答案。我确实没有测试过它,但因为我认为这是开发人员面临的一个常见难题,所以我更喜欢先问。我们认为,在本机PHP代码中创建快速访问缓存是一样的,但您的代码是最好的。这两个方面都非常好。确实,我在每个会话中都复制了数据,但如果确实是这样的话速度更快,这可能是值得的,因为这是我对每一段文本所做的操作,总的来说,它会对用户产生明显的影响。@Tristan:我希望您只加载内容(以您选择的任何方式)每个脚本一次,而不是每个字符串翻译一次——我被你的评论弄糊涂了。但无论如何,直接加载PHP代码是最快的。@FIG-GHD742:Tip:
var\u export
可以让你摆脱
序列化
/
非序列化
的开销。@Jon是的,很抱歉这让人困惑。在第一个解决方案中,我只加载nce,然后我从会话中读取数据,但在第二种情况下,我每次都会从文件中读取。我们的想法与在本机PHP代码中创建快速访问缓存相同,但您的代码更好。这两个点非常好。的确,我在每个会话中都复制了数据,但如果确实更快,则可能值得,因为这是我的一个操作对每一段文字都要这样做,总的来说,这会对用户产生明显的影响。@Tristan:我希望您只加载内容(以您选择的任何方式)每个脚本一次,而不是每个字符串翻译一次——我被你的评论弄糊涂了。但无论如何,直接加载PHP代码是最快的。@FIG-GHD742:Tip:
var\u export
可以让你摆脱
序列化
/
非序列化
的开销。@Jon是这样的