CURL performansını iyileştirme (PHP Library)

1 Cevap php

İşte ben ne yapıyorum kısa bir bakıştır, o gerçekten oldukça basittir:

  • Dışarı çık ve bir veritabanı tablosundan kayıtları getirmesi.
  • Tüm bu kayıtlar arasında bir URL (cURL kullanarak) dışarı çıkmak ve emin URL hala geçerli olduğundan emin olun içeren her sütun için yürüyün.
  • Her kayıt için bir sütun son kontrol edildi ve diğer bazı db işlem gerçekleştiği zaman gösteren güncel bir zaman damgası ile güncellenir.

Zaten tüm bu iyi ve güzel çalışıyor ve gerekiyordu tam olarak ne yapar. Sorun performans greatly Ben cURL ile URL doğrulama am nasıl açısından gelişmiş olabileceğini düşünüyorum.

İşte cURL nasıl kullanıldığını gösteren benim kodundan alıntıda (basitleştirilmiş) üzerinden bir özeti:

$ch = curl_init();
while($dbo = pg_fetch_object($dbres))
{
   // for each iteration set url to db record url
   curl_setopt($ch, CURLOPT_URL, $dbo->url);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_exec($ch); // perform a cURL session
   $ihttp_code = intval(curl_getinfo($ch, CURLINFO_HTTP_CODE));
   // do checks on $ihttp_code and update db
}
// do other stuff here
curl_close($ch);

Ben sadece aynı cURL süre boyunca idare yeniden yaşıyorum görmek ama gibi tüm işlem üzerinde şerit (veritabanı veya başka türlü) bile komut hala çalıştırmak için inanılmaz uzun sürer. CURL seçeneklerden herhangi performansını iyileştirmeye yardımcı değişiyor misiniz? Tuning zaman aşımı değerleri / etc? Herhangi bir giriş mutluluk duyacağız.

Teşekkür ederim,

  • Nicholas

1 Cevap

1 Set CURLOPT_NOBODY yanıtın vücut için sormak için değil bükmek söyle (curl documentation bakınız). Bu web sunucusuna ve bir HEAD isteği verecektir. Yanıt kodu URL geçerli olup olmadığını size söyleyecektir ve geri verilerin toplu transfer etmeyecektir.

O hala çok yavaş ise, o zaman muhtemelen her işin 1/Nth yapıyor N Konuları (veya süreçleri) çalıştırarak büyük bir iyileşme göreceksiniz. Darboğaz kodunuzu olabilir, ama uzak sunucuların yanıt süreleri olmayabilir. Onlar yavaş yanıt iseniz, o zaman döngü çalıştırmak için yavaş olacaktır.