2017-01-24 1 views
-1

Hallo Ich habe eine Website, die Daten von einer API lädt, um die neuesten Statistiken anzuzeigen. Ich speichere es für 10 Minuten, um das Laden von API-Anrufen jedes Mal zu verhindern. Da es viele API-Anrufe gibt, dauert es etwa 5-10 Sekunden, bis die Webseite fertig geladen ist.PHP, wie man Inhalt später setzt oder wenn geladen wird?

Momentan verwende ich reines PHP für Funktionalitäten. Es gibt Funktionen wie GetTotalEarnings() - nur ein file_get_contents ($ url), um einen JSON-Inhalt zu empfangen und zu dekodieren und in eine Tabelle zu legen, die ich für 10 Minuten benutzen kann. Nach 10 Minuten ruft er alle apis erneut auf, um die Werte zu aktualisieren (wenn die Seite natürlich neu geladen wird).

Um dies zu lösen, war meine Idee, den Inhalt zuerst zu laden und den Inhalt anzuzeigen und dann die Daten zu laden, um Werte später festzulegen. Aber ich weiß nicht, wo ich anfangen soll. Ich weiß, dass jQuery dies mit einem Rückruf, aber seinem Javascript, tun kann. Ich weiß nicht, was tot dort

Zwei Beispiele machen, wie zur Zeit

<h1 class=""><center>Earnings Total: <?php echo GetTotalEarnings() . " (Latest update: " . GetLatestUpdateTime() . ")"; ?></center></h1> 


<h1 class="">This Month</h1> 
<div class="col-xs-6 col-sm-6 col-md-3"> 
    <div class="box c1 center-block"> 
     <h4 class="blue">Today</h4> 
     <span class="icon blue"><i class="fa fa-usd"></i></span> 
     <span class="price-large blue"><?php echo round(GetTodayEarnings(), 2); ?></span> 
    </div> 
</div> 
+0

Wenn Sie Daten alle 10 Minuten erhalten möchten, dann klingt es wie ein CRON-Job wäre besser auf Ihre Bedürfnisse zugeschnitten.Dies würde auch das Frontend beschleunigen, da der Benutzer nicht auf das Herunterladen der Daten warten müsste, wie dies bereits im Hintergrund geschehen wäre. –

+0

Das ist nicht das Problem. Ich habe eine Datei erstellt, in der ich die Daten für 10 Minuten speichern kann. Nachdem die Zeit abgelaufen ist und die Seite neu geladen wird, wird die Datei aktualisiert. Ich möchte nicht Cron Job verwenden. Es ist in Ordnung für mich, wenn alle Daten im laufenden Betrieb aktualisiert werden. – MaZy

+0

Sie wissen also, dass Sie Javascript und vielleicht JQuery verwenden möchten, aber Sie wissen nichts über diese Sprachen! Du musst also ein Buch bekommen und/oder ein paar Online-Tutorials machen. SO ** ist nicht ** eine Tutorial-Seite, und wir ** schreiben nicht Code für Sie kostenlos ** – RiggsFolly

Antwort

1

Statt Anforderung der API-Daten auf einer Benutzeranforderung sieht, würde ich stattdessen ein Hintergrundskript/Programm alle 10 Minuten des speichert die Ergebnisse in memcached oder MySQL. Wenn ein Benutzer die Daten anfordert, geben Sie die zwischengespeicherten Ergebnisse zurück. Wenn die API mehr als 10 Sekunden für die Verarbeitung benötigt, müssen wir, ohne den Code zu betrachten, um ihn möglicherweise zu optimieren, davon ausgehen, dass mehr als 10 Sekunden für die Verarbeitung benötigt werden. Caching ist die einzige Möglichkeit, die Benutzeranforderung zu beschleunigen, ohne die API zu optimieren.

Sie können JavaScript zum asynchronen Laden des Skripts verwenden und dann das Dokument ändern, sobald die Seite geladen wurde. Im Folgenden finden Sie ein Beispiel mit Jquery.

$(document).ready(function(){ 
     $.ajax({ 
      type: "GET", 
      url: "myApiCalls.php", 
      dataType: 'json', 
      data: queryString, 
      success: function(data) { 
       // ... 
      } 
     }); 
}); 
+0

Vielen Dank. Der Grund ist, warum ich versuche, etwas wie Cronjobs zu vermeiden, wenn ich mich entscheide, die Daten in Echtzeit zu haben. Ich meine, die Änderungen bei jedem Nachladen zu sehen. Auch die API-Anfragen haben nicht immer 10 Sekunden zu verarbeiten. Einige von ihnen sind sofort und einige brauchen etwas Zeit. Deshalb habe ich gedacht, Daten später auf den Inhalt zu laden oder den Inhalt später zu aktualisieren. Gut, ok. Ich brauche jquery/ajax. Wenn jquery Funktionen von php aufrufen kann, wäre das perfekt. Ich gebe einen Versuch – MaZy

0

Dank @Leon Storey, während seine Antwort mit „Daten: querystring,“ zu lesen und ihn zu antworten hatte ich eine nette Idee, die ich hier OFC für Menschen zeigen will, das das Problem auch hat.

Für Leute wie @RiggsFolly, die Dinge, die ich wollte, benutzen Sie einfach eine Kopie Paste hier Code für mich geschrieben und mich zuerst ohne das Problem zu verstehen (mit sogar "-1" denke ich) wollte ich noch einmal sagen: Mein Problem war, dass ich viele php-funktionen habe, die daten von einer externen api anfordern (momentan speicher ich die daten für 10 minuten, in dieser zeit wird die api nicht verwendet). Da ich gesagt habe, dass ich zuerst den Lade-Inhalt machen möchte, dann aktualisiere Werte wie Zahlen mit den Anfragen, von denen ich nicht weiß, wo ich anfangen soll, damit zu arbeiten und sie zusammen mit jQuery oder vielleicht mit anderen Ideen zu verwenden. Ich wollte nur wissen, was möglich ist.

Nun, was ich getan habe, um das zu lösen. Php hat zwei großartige Funktionen.

function_exists("func"); 

call_user_func("func"); 

mit Ajax zusammen habe ich diese

$(document).ready(function(){ 
    $.ajax({ 
     type: "post", 
     url: "apicalls.php", 
     data: {callfunction: 'GetTotalEarnings'}, 
     success: function(data) { 
      alert(data); 
     } 
    }); 
}); 

Dies wird eine Warnung geben, wenn api Anfrage erfolgt. Nun lässt die apicalls.php sehen

include "apirequest.php"; 

if(isset($_POST['callfunction'])) { 
    $func = $_POST['callfunction']; 

    if(function_exists($func)) { 
     echo call_user_func($func); 
    } else { 
     die("This function does not exists"); 
    } 
} 

Das bedeutet, dass ich nicht meine „apirequest“ müssen PHP-Datei neu zu schreiben. Ich benutze nur einen kleinen Helfer wie eine Pipeline, um es mit Ajax-Anfragen arbeiten zu lassen. Das Problem ist jetzt vollständig gelöst

+0

Es gibt ein mögliches Sicherheitsproblem darin, dass Sie die externen Daten in '$ _POST' nicht überprüfen, wenn jemand die Funktionen kennt, die in Ihrem Skript verwendet wurden, konnten sie nennen, was auch immer sie wollen. Wie zum Beispiel "apicalls.php? Callfunction = MySuperSecretFunction". Vielleicht möchten Sie ein 'Array' von öffentlich zugänglichen Funktionen, gegen die Sie sich wenden können. –

+0

Ja, ich habe schon darüber nachgedacht. Ich habe gerade alle eingeschränkten Funktionen draußen genommen. Es gibt nur "Gets" für API, was in Ordnung ist. Aber in Zukunft werde ich zu Array oder so etwas wechseln. – MaZy

Verwandte Themen