Nasıl bir XML belge birden çok kez yeniden önleyebilirsiniz?

4 Cevap php

tl;dr: Bir keresinde bir XML dosyası yüklemek ve tekrar tekrar üzerinde yeniden ve istiyorum.

Ben toplar ve ayrıştırır bazı XML ve ekran için döndüren bir PHP sayfası bir ajax isteği yapar javascript biraz var (gibi, orada 4.000 düğümleri ve PHP 40 "sayfaları olurdu 100 parçalar halinde sonuçları paginates.Bu söylüyor "veri). Birisi (başlangıçta yükler biri dışında) bu diğer sayfalardan birinde tıklarsa daha sonra başka bir istek PHP yüklerin büyük XML dosyası, (200-299 kayıtları gibi) indekslerinin alt kümesini çekiyor ve görüntülemek için onları döndüren, yapılır. Benim sorum, sadece bir kez o XML dosyası yüklemek ve sadece bunu defalarca yeniden bir yolu var mı?

The process on each ajax request is:
- load the xml file (simplexml_load_file())
- parse out the bits needed (with xpath)
- use LimitIterator to grab the specific set of indexes I need
- return that set

When what I'd like it to be when someone requests a different paginated result is:
- use LimitIterator on the data I loaded in the previous request (reparse if needed)
- return that set

Bu XML dosyası her zaman isabet büyük bir israf olduğunu (bu, değil mi?) Görünüyor. Bunu nasıl kapma ve farklı sayfalama istekleri dosyası her zaman yeniden zorunda kalmamak persisting hakkında gitmek istiyorsunuz?

4 Cevap

Sadece sunucu kullanıcı girişi ve yorumlarına dayanarak paginated dosyasının okuma ve ayrıştırma yapmak var. O tüm XML belgesini indirmek ve önbelleğe müşteri alacağını daha hızlı sunucuda önbelleğe alınabilir Anlamı. PHP, Perl, ASP ya da ne sen önce kullanıcıya görüntüleyen veri paginate zorunda kullanın.

Seni almak için gidiyoruz yakın şey Memcached olduğuna inanıyorum.

Rağmen, yerel bir dosya, özellikle bu konuda endişe olmaz. include gibi işlemler oldukça ucuz.

O büyük bir XML dosyası her şey ayrıştırmak varsa soruya "hitting the XML file every time is a huge waste" ardından cevap, evettir. Ben anladığım kadarıyla, kullanıcı bu her şey yapmak zorunda kalmamak ilgilenen yığın kaydetmek istiyorum. Nasıl basit bir dosya önbelleği hakkında? Hiçbir uzatma kullanmak ve korumak için basit, hızlı, gerekli. Bunun gibi bir şey:

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

Otomatik olarak onların kaynak daha eski olan önbelleğe parçalarını görmezden böylece bir bonus olarak, kaynak dosyanın en son değişiklik zamanı kullanın.

Istemci gzip sıkıştırma (IOW, orada tarayıcılar% 99) destekleyen veya on-the-fly, aksi takdirde onu sıkıştırıp eğer bile sıkıştırılmış kaydetmek ve olduğu gibi-hizmet edebilir.

Eğer $ _SESSION veri haline yükleyebilir? veya bu nedeniyle yığın boyutu hafızayı dışarı darbe olurdu?