我有一个大约1.7MB的文本文件,其中包含我的应用程序所需的单词列表。我需要在页面加载时将其加载到数组中,然后将其用于发出AJAX请求的其他PHP文件。现在我将它加载到页面加载的数组中,然后将其存储在一个会话中,以便AJAX文件在发出请求时可以使用它。这是最好的方法吗?
答案 0 :(得分:4)
真的取决于您对数据的处理方式。如果AJAX只需要来自该巨大列表中的某些单词,那么它最好存储在数据库中。
请记住,即使列表存储在会话中,也会暗示您在每次调用时脚本都会加载该数组。对于可能之类的东西来说,接缝似乎并不是真正需要的。
但是,你并没有给我们太多细节。
答案 1 :(得分:1)
如果必须将整个数组加载到PHP中,我会编写一个脚本,使其成为包含单词列表的数组定义的PHP脚本,因此您将拥有一个包含以下内容的.php文件: / p>
$myArray = array('blah', 'blah', 'blah'); //etc
然后,我会包含那个(require_once)...大多数PHP脚本引擎都能够很容易地优化它...在将它存储在会话中没多大意义,只会占用更多的磁盘空间/数据库用于存储的空间/存储器。
答案 2 :(得分:0)
file
命令非常快,所以我确信通过缓存任何东西都会有很多好处。
您是否在每个页面加载时使用数据?如果没有,请不要使用会话,因为即使您不需要它也会有加载它的开销。
数据是否取决于用户?如果没有,请不要使用会话,因为您将无缘无故地复制整个数据。
如果您正在进行更复杂的解析,那么我建议使用
缓存该文件file_put_contents($filename, '<?php return '.var_export($array, true).';');
然后,您需要做的只是$data = include $filename
来获取数据......
你甚至可以让它足够智能来检测变化:
function getData() {
static $data = array();
if (empty($data)) {
$cache = '/path/to/cache/file';
$full = '/path/to/original/file';
if (!file_exists($cache) || filemtime($cache) < filemtime($full)) {
$data = parseDataFileIntoArray($full);
$code = '<?php return '.var_export($data, true).';';
file_put_contents($cache, $code);
} else {
$data = include $cache;
}
}
return $data;
}