2015-01-16 9 views
5

Ich verstehe nicht, warum Fressanfragen sind wirklich langsam auf Laravel Schmiede und Laravel Gehöft. Ich habe die Standardserverkonfiguration auf Schmiede und Gehöft nicht geändert.Guzzle langsam auf Laravel Schmiede und Gehöft

Jede einfache Anfrage wie dieses ...

$client = new GuzzleHttp\Client(); 
$response = $client->get('path-to-my-api'); 

... dauert ca. 150ms (auf Gehöft und Schmiede). Dies hängt an jede Anfrage (gleiches Netzwerk oder Internet). Ich habe ein paar Artikel über guzzle gelesen und es scheint für jeden Benutzer sehr schnell zu sein, aber nicht für mich.

Versionen:

  • curl 7.35.0 (x86_64-pc-linux-gnu) Libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1,28 librtmp/2.3
  • PHP Version 5.6.0
  • Guzzle 5.1.0

Etwas wirklich seltsam ist, dass wenn ich diese (asynchron) ...

$req = $client->createRequest('GET', 'path-to-my-api', ['future' => true]); 

$client->send($req)->then(function ($response) { 
}); 

... dauert es etwa 10ms. Es ist großartig, aber ich verstehe nicht warum. Und ich möchte keine asynchronen Anfragen durchführen.

Vielleicht ist meine Zeit Maßnahme ist fehlerhaft, aber ich denke, es ist Ok: Ich PHP Debug-Bar wie folgt verwenden:

// ..... 

// synch 
Debugbar::startMeasure('synch','SYNCH Request'); 
$response = $client->get('path-to-my-api'); 
Debugbar::stopMeasure('synch'); 

// asynch 
Debugbar::startMeasure('asynch','ASYNCH Request'); 
$req = $client->createRequest('GET', 'path-to-my-api', ['future' => true]); 

$client->send($req)->then(function ($response) { 
    Debugbar::stopMeasure('asynch'); 
}); 

Ich weiß, es ist nicht leicht, diese Frage zu beantworten (weil es vage ist), aber ich habe keine Ahnung für jetzt :(. Ich kann es bearbeiten, wenn Sie wollen. Vielen Dank.

+0

Das liegt vielleicht daran, dass der erste Aufruf einer Guzzle-Methode viele Guzzle-Klassen lädt und initialisiert, während die zweite schnell ist, weil bereits alles geladen ist. Was, wenn Sie nur den zweiten asynchronen Aufruf direkt messen, ohne zuerst die synchronen Methoden aufzurufen? –

+0

Verwenden Sie Guzzle, um eine API auf Ihrem Server oder von Ihrem Server aus aufzurufen? Haben Sie auch versucht, '' debug '=> false' in app.config zu setzen und dann 'php artisan optimize' auszuführen? Wenn der Debug-Modus eingestellt ist, werden viele unnötige Dateien geladen. – Marcus

Antwort

0

Guzzle kann nicht langsam sein - es ist nur eine Bibliothek. Ihre synchronen Anfragen werden wahrscheinlich länger dauern, weil Ihre API lange braucht, um zu reagieren, und Ihre asynchronen Anforderungen scheinen schneller zu sein, da sie das Netzwerk erst dann blockieren, wenn sie eine Antwort erhalten

Versuchen Sie, die API direkt in Ihrem Browser aufzurufen oder cURL in Ihrem Terminal zu verwenden - Sie werden wahrscheinlich feststellen, dass die Latenz vorhanden ist.

Verwandte Themen