2012-11-27 25 views
12

(ÖNEMLİ) EDIT 3: Tek başına testajax2.php çalıştırılıyor ve AJAX DEĞİL. Süre yaklaşık 1.02-1.03s. Yani bu sorunun PHP-MYSQL veya XAMPP'de olduğu anlamına mı geliyor? Phpmyadmin sorgusu üzerinden çalıştırıldığında, sonuç şu şekildedir: Satırlar 0 - 29 gösteriliyor (~ 50 toplam, Query 0.0015 sn). Sorun, Ajax'ta değil, belki de PHP'de yatıyor. Yardım ... (Ben de sadece soru başlığı kaydetmiştiniz.) LütfenPHP Yavaş

Cevap:”C:\Windows\System32\drivers\etc”

127.0.0.1 localhost 



soru önce bulunan hosts dosyasına aşağıdaki satırı ekleyin : Diğer tarafta sqqu sorguları olan Jquery Ajax için normal 1 saniyelik minimum süresine sahip mi? $.get, $.post, $.getjson, $.ajax({type:'POST'}), $.ajax({type:'GET'})'u denedim. Dediğim gibi, minimum, yaklaşık 3 sn daha da kötüleşebilir. Ben phpmyadmin denediğimde, sonuçların çok hızlı ortaya çıkması gibi sql sorguları olduğundan şüpheliyim.

Sorguların çok basit olup olmadığı ve tablonun yalnızca 2 öğeye sahip olması önemli değil, en az 1 saniye sürecektir. En son XAMPP'yi kullanıyorum ve bunun önemli olup olmadığını bilmiyorum, ancak localhost ve 127.0.0.1 aracılığıyla dosyalara erişiyorum. Teşekkürler!

DÜZENLEME: Cevap için teşekkürler, çocuklar. Yerel bir ortamda çalıştırıyorum, aynı dosyaları bu bilgisayarda yaptım. Jquery güncellendi. Döndürülen değer/dizi json_encoded. Ben mysqli kullanıyorum. Veritabanı InnoDB içinde ve içinde sadece yaklaşık 5 tablo vardır ve onlar üzerinde neredeyse hiçbir şey yoktur. İşte çok basit bir örnek sorgu var:

index.php

var test_id =2; 
    testcall(); 
    function testcall(){ 
     $.ajax({ 
      url: 'testajax2.php', 
      type: 'POST', 
      data: {test_id: test_id}, 
      success: function(data){ 

      }  
     }); 
    } 

testajax2.php

$mysqli = new mysqli('localhost', 'root', '', 'testdb'); 
    $mysqli->set_charset("utf8"); 
    if(mysqli_connect_errno()) { 
     echo "Connection Failed: " . mysqli_connect_errno(); 
     exit(); 
    } 

    $testreceive = $_POST['test_id']; 
    $query = "SELECT First_Name from tblperson"; 
    $result = $mysqli->query($query); 
    $row = $result->fetch_all(MYSQLI_ASSOC); 

    echo json_encode($row); 

tblperson 50 kayıtları içerir ve sadece 4 sütun vardır. Firebug'a göre, bu son derece basit bir iş yapmak için 1.03 aldı. Gerçekten ne anlama geldiğinden emin değilim, ancak Firebug’daki Net sekmesi üzerinden görüntülenen çubuk tamamen mordur. 0 ve 1,03s Bekliyor. + 1.03s ve 0 Alımı.

DÜZEN 2: Bunları json_encode($row) veya foreach($row as $value){ echo $value['First_Name']; } olarak göndermem de önemli değil. Hala en az 1 saniye olacaktı. Chrome ve Safari'de denedim ve tam süreye sahip olmamam da, bunun aynı şey olduğunu söyleyebilirim. Ancak basit SQL sorguları ile basit ajax çağrı için. Doğru hatırlıyorsam çok hızlı. Bir örnek ve süre çıkışı ile geri dönecekti.

+1

Daha fazla bilgiye ihtiyacımız var, içeriğiniz çok belirsiz. Bunu deneyebileceğimiz bir bağlantın var mı? Eşzamanlı olarak ne kadar ajax çağrıları var? Ortamınız yerel mi yoksa uzak mı? .... –

+0

İlgili kodu gösterebilir misiniz? –

+0

Kurulum/kurulum için bu normal değil hayır. Yerel olarak ajax isteklerim (ortalama olarak, firebug'a göre) 140 ms içinde tamamlanır. Ama diğer yorumların da söylediği gibi .. makinenizde neler olduğu hakkında hiçbir fikrimiz yok, senaryoların ne kadar karmaşık olduğu. – Dale

cevap

16

Cevap: Bu sorunumu çözdü ”C:\Windows\System32\drivers\etc”

127.0.0.1 localhost 

bulunan hosts dosyasına aşağıdaki satırı ekleyin. PHP-MySQL artık 20-500 ms arasında bir yerde ne kadar karmaşık olduğuna bağlı olarak görevini tamamlayabilir.

+0

Bağlantı bozuk, ancak cevap beni kurtardı! Testlerim koşmak için 56 saniye sürüyordu. Şimdi, 2'den az! –

+1

Ev sahibi dosyamın altında 10 + kayıtlarla bu satırı aldım ve 2 saniyelik gecikme yaşadım, çizgiyi en üste taşımak zorunda kaldım ve şimdi hiçbir gecikme yok – Dan

+0

Teşekkür ederim! Bu tam olarak benim sorunumdu! – newms87

12

Bu yerlerde bir çift oluyor olabilir: 1) bir sorgu kendisi veya mysqli örneği 2) oluşturulması (ve elde edilen db bağlantı). Tahmin etmem gerekirse, sorundan şüpheleniyorum (2).

bir kirli hızlı ve-ayıklama yöntemi microtime() kullanmaktır.

http://www.php.net/manual/en/function.microtime.php

Örnek:

$start = microtime(TRUE); // Start counting 

$mysqli = new mysqli('localhost', 'root', '', 'testdb'); 

$temp = microtime(TRUE) - $start; 
echo "Time to connect: {$temp}"; // Check elapsed time 

$mysqli->set_charset("utf8"); 
if(mysqli_connect_errno()) { 
    echo "Connection Failed: " . mysqli_connect_errno(); 
    exit(); 
} 

$temp = microtime(TRUE) - $start; 
echo "Time to setup: {$temp}"; // Check elapsed time 

$testreceive = $_POST['test_id']; 
$query = "SELECT First_Name from tblperson"; 
$result = $mysqli->query($query); 

$temp = microtime(TRUE) - $start; 
echo "Time to query: {$temp}"; // Check elapsed time 

$row = $result->fetch_all(MYSQLI_ASSOC); 

$temp = microtime(TRUE) - $start; 
echo "Time to fetch {$temp}"; // Check elapsed time 
+0

Çözüldü. Ama ipucun bir dahaki sefere kullanışlı olabilir. Pls onu silmiyor. Teşekkürler. 15 defaya ulaştığımda bunu bildireceğim – Wap

+0

Kodunuz için teşekkür ederiz, ama içinde bir hata var. 14. satırda $ başlangıç ​​yerine $ temp kullanın! – bernhardh

0

sorun 127.0.0.1 localhostu localhost'u arama olduğunu.

çözeltisi (! Ama cevap için teşekkür ederim) ana yanıtlamıştır @Wap olarak dosya windows hattı 127.0.0.1 localhost eklemek ya

olduğunu Veya ana dosyaya erişime yoksa yapabilirsiniz php mysqli çağrınızdaki localhost değerini 127.0.0.1 olarak değiştirin: $mysqli = new mysqli('127.0.0.1'), 'root', '', 'testdb');

İlgili konular