2010-08-19 56 views
2

我有一个大约1.7MB的文本文件,它有我需要的应用程序的单词列表。我需要在页面加载时将其加载到数组中,然后可用于AJAX请求所针对的其他PHP文件。现在,我在加载页面时将它加载到数组中,然后将其存储在会话中,以便AJAX文件在请求它时可用。这是做这件事的最好方法吗?将文件加载到PHP数组中,最好的方法是什么?

+0

为什么不在加载页面时将其加载到数组中?为什么要进入会话?你真的需要在每个页面加载所有这些话吗? – 2010-08-19 17:47:18

+0

我想知道的是,如果我将文件加载到AJAX请求转到的PHP文件中的数组中,如果它将每个请求中的文件加载到数组中。 – roflwaffle 2010-08-19 23:35:09

回答

4

真的取决于你在处理数据。如果AJAX只需要这个庞大列表中的某几个单词,它可能最好存储在一个数据库中。

千万记住,即使列表存储在一个会话它会暗示你的脚本加载了对每一个调用数组。对于或许是的东西来说,接缝不是非常需要。

虽然你不给我们很多细节。

+0

,你可以获得时间执行sql查询,而不是循环整个1.7MB的单词 – pleasedontbelong 2010-08-19 17:51:55

+0

只是为了更清楚一点,该数组将有近200,000个元素(单词)。 AJAX请求基本上检查给定的单词是否在数组中。 – roflwaffle 2010-08-19 19:40:31

+0

@Brandon不要犹豫,把它放入数据库。使用减少的资源(更少的RAM),您将获得性能提升(速度搜索)。 – Frankie 2010-08-19 22:25:19

1

如果整个阵列必须加载到PHP,我会写一个脚本,使它成为一个包含单词列表的数组定义一个PHP脚本,让你有一个包含PHP文件:

$myArray = array('blah', 'blah', 'blah'); //etc 

然后,我会包括(require_once)......最PHP脚本引擎将能够以优化很容易地......没有多大意义在其存储在一个会话,只是将使用更多的磁盘空间/数据库空间/内存以供存储。

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

小心解释downvote?假设整个数组必须在PHP域(不使用数据库),这是一个相当不错的设计。它避免了每个页面加载的双重内存使用问题,即任何序列化的内容都会有问题。它适用于所有服务器(因为它不需要PECL扩展)。如果您安装了一个OPCode缓存,它将充分利用OPCode缓存(不需要更改该功能)... – ircmaxell 2010-08-19 18:04:46

相关问题