2010-08-19 72 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

相關問題