簡體   English   中英

如何避免多次重新加載XML文檔?

[英]How can I avoid reloading an XML document multiple times?

tl; dr :我想加載一次XML文件並一遍又一遍地重復使用它。

我有一些javascript,它向一個PHP頁面發出ajax請求,該頁面收集並解析一些XML並將其返回顯示(例如,有4,000個節點,PHP將結果分成100個塊,你將有40個頁面“ 數據的)。 如果有人點擊其中一個頁面(除了最初加載的那個頁面之外)然后發出另一個請求,PHP就會加載那個大的XML文件,抓取那個索引子集(比如記錄200-299)並返回它們進行顯示。 我的問題是,有沒有辦法只加載一次XML文件,只是一遍又一遍地重復使用它?

每個ajax請求的過程是:
- 加載xml文件(simplexml_load_file())
- 解析所需的位數(使用xpath)
- 使用LimitIterator來獲取我需要的特定索引集
- 返回那一套

當有人請求不同的分頁結果時我想要的是:
- 對我在上一個請求中加載的數據使用LimitIterator(如果需要,可以重新分析)
- 返回那一套

似乎(它是,對吧?)每次點擊XML文件都是一個巨大的浪費。 我將如何抓住並堅持下去,以便不同的分頁請求不必每次都重新加載文件?

讓您的服務器根據用戶輸入和反饋讀取和解析分頁文件。 這意味着它可以比在客戶端下載和緩存整個XML文檔時更快地緩存在服務器上。 使用PHP,Perl,ASP或者在將數據顯示給用戶之前將其分頁。

我相信你最接近的是Memcached

雖然,我不擔心它,特別是如果它是本地文件。 include類似的操作相當便宜。

對於“每次點擊XML文件都是一個巨大的浪費”的問題,如果你每次必須解析那個大的XML文件,那么回答是肯定的。 據我所知,您希望保存用戶感興趣的塊,這樣您就不必每次都這樣做。 一個非常簡單的文件緩存怎么樣? 無需擴展,快速,易於使用和維護。 像這樣的東西:

function echo_results($start)
{
    // IMPORTANT: make sure that $start is a valid number
    $cache_file = '/path/to/cache/' . $start . '.xml';
    $source     = '/path/to/source.xml';
    $mtime      = filemtime($cache_file);

    if (file_exists($cache_file)
     && filemtime($cache_file) < $mtime)
    {
        readfile($cache_file);
        return;
    }

    $xml = get_the_results_chunk($start);
    file_put_contents($cache_file, $xml);

    echo $xml;
}

作為額外的好處,您可以使用源文件的上次修改時間,以便自動忽略比其源更早的緩存塊。

如果客戶端支持gzip壓縮(IOW,99%的瀏覽器)或者動態解壓縮,你甚至可以保存壓縮並按原樣提供服務。

你能把它加載到$ _SESSION數據中嗎? 或者由於塊的大小會破壞內存?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM