Nasıl PHP birden AJAX istekleri ele?

5 Cevap php

Benim AJAX arama programı, belirli bir arama terimi sonuçları için PHP soruyor. PHP script başlangıcı MySQL DB ve başlatır aracılığıyla okur, böylece PHP yeniden başlatmadan devam ederse, bu kez DB milyonlarca okumak zorunda olacak. Ben canlı tutmak ve birden fazla saçma AJAX istekleri çalışan tek bir PHP komut dosyası örneği tarafından servis edilebilir izin verirse ben performansını artıracak eminim.

Bunu nasıl genellikle yaparsınız? Bir hizmeti kullanmak? Bu hizmetleri ile neler yapılabilir?

5 Cevap

Nasıl bir oturum değişkeni db sonuçları saklanması hakkında? Siz anahtar kelime (oturumları sayfa yenilemeler arasındaki değişken değerleri taşımak için izin) oturumda değilse ilk kontrol ve ediyorum değilse, bir db sorgusu yapmak.

Saklamak için:

$_SESSION['storedQueries']['keyword']= 'its definition, from the database';

Bunun için bakmak:

  $index=  array_search('keyword',array_keys($_SESSION['storedQueries']));
  $result = ($index) ? $_SESSION['storedQueries'][$index] : 'nothing found, you should do a db query';

Böyle jquery gibi bir javascript kitaplık kullanırsanız, ajax kısmı oldukça kolaydır:

$('#resultZone').load('find.php',{keyword: $('input.search').val() });

PHP uzun ömürlü nesneler ya da konuları ya da istekleri arasında paylaşılan devlet kavramı yok, her isteği her zaman (tabii, oturum durumu hariç) sıfırdan başlar. Siz disk ya da bellek önbelleğe tarafından uzun ömürlü nesneleri taklit edebilir (bkz. memcached).

Eğer komut başlatır tüm veritabanını okumak için özel bir sebep var mı?

Eğer sonuç aynı her zaman vardır biliyorum, sadece bir oturum değişkeni bu sonuçları taşıyın.

PHP oturumları kendi belgelerinde oldukça iyi açıklanmıştır:

http://us3.php.net/manual/en/book.session.php

Arama sonucu birden fazla kullanıcı için benzer olacak bir şey varsa, ben genellikle bir önbellek dosyası oluşturun ve orada set sonucu serialize. Bir dosya adı olarak ben arama sorgusu ve belki kullanıcı grubu içeren bir dize md5sum kullanabilirsiniz. Bir Ajax verileri gerektiğinde ben (düzgün biçimlendirilir varsayarak) sadece müşteri göndermek için gereken ya da belki de sadece dosyaya Ajax http-isteği yönlendirme değilse o zaman ben sadece, dosya çok eski olup olmadığını kontrol etmeniz gerekir . Dosya çok eski, ben sadece yeni içerik ile yenileyin.

Çok yüksek hacimli siteleri için memcached genellikle daha iyi bir seçenektir. Ve ayrıca php önbellek çeşit olur ve SQL bağlantı havuzu SQL bağlantılarını açma yükü düşürür.

DB bağlayan çok pahalı bir işlemdir ve sonuçları önbelleğe alarak, Zend_Cache bir göz atın ve size baş ağrısı tahsis kaydedebilirsiniz nasıl görmek etrafında gidebilirsiniz.