Bannercode zwischengespeichert
Tipps und Tricks

Begrenzung des Verbrauchs von Serverressourcen

Artikel

Begrenzung des Verbrauchs von Serverressourcen

Autor: Daniel | hinzugefügt: 14. Januar 2020

Wenn unsere Website wächst, werden wir deutliche Leistungseinbußen feststellen. Eine der Hauptursachen für unerfahrene Programmierer ist ein schlechtes Server-Ressourcen-Management. Viele Leute haben Angst, den Cache-Speicher zu verwenden, und dies ist ein ziemlich schwerwiegender Fehler.

1. Zweck des Skripts

Nehmen wir an, wir erstellen eine Website für ein Spiel, das auf Unity erstellt wurde. Wir haben die Seite geschrieben, gestylt und mit einem Spiel versehen, das ein anderer Entwickler zur Verfügung gestellt hat. Nach einer Weile kommt man auf die Idee einer in einer Datenbank gespeicherten Anzeigetafel. Der Spielprogrammierer extrahiert die Punktedaten und stellt sie Ihnen zur Verfügung. Sie verarbeiten diese Daten und speichern sie in der Datenbank. Zusätzlich platzieren Sie auf der Website ein Array, das diese Daten aus der Datenbank abruft. Was wird passieren?

Im besten Fall wird die geladene Seite für nachfolgende Benutzer nicht mehr geladen. Dies liegt daran, dass jeder neue Benutzer, der die Website betritt, ein Skript ausführt, das Daten aus der Datenbank herunterlädt, was den Server belastet. Glücklicherweise kann dies auf banale Weise behoben werden.

Dazu verwenden wir die nächsten beiden Skripte in zwei separaten Dateien. Sie werden benötigt, um das Ergebnis des zuvor erwähnten Skriptergebnisses zu speichern. Und genauer gesagt?

  1. Nach dem Start der Website betritt der erste Benutzer sie
  2. Das in der Datei enthaltene Basisskript .php wird normal ausgeführt und unsere nächsten beiden Skripte merken sich das Ergebnis in einer Datei .html
  3. Der nächste Benutzer, der jetzt die Website betritt, lädt nicht mehr dasselbe Skript erneut, sondern lädt unsere neue Datei viel schneller herunter .html
  4. Nach der von uns gesetzten Zeit wird unsere Datei .html wird sterben und neu generiert werden - dies dient zum Aktualisieren der Daten

2. Vor- und Nachteile

Diese Lösung beschleunigt zwar das Laden der Seite für viele Benutzer. Es hat mehrere erhebliche Nachteile. Beachten Sie, dass nach jedem Speichern der Ausgabe der of .php als Datei .html, Daten, die beispielsweise aus einer Datenbank heruntergeladen wurden, werden nicht für jeden Benutzer fortlaufend aktualisiert. Für die Lebensdauer einer Datei .html die Ergebnisse in der Beispielspiel-Anzeigetafel werden vom Moment der Generierung dieser Datei bis zur nächsten Generierung angezeigt.

Es kann auch nicht für jede Datei verwendet werden. Ob bei unserer Website für jeden einzelnen Benutzer regelmäßig etwas aktualisiert werden muss, müssen Sie selbst herausfinden.

Dies scheint jedoch ein kleiner Nachteil zu sein, wenn wir die Verweise auf die Datenbank von 200 auf 1 mit z.B. 200 gleichzeitigen Benutzern begrenzen können.

3. Umsetzung

Um diese Methode zu implementieren, benötigen wir min. 3 Dateien .php:

  1. Datei mit dem Skript oben in der Zieldatei - es ist dafür verantwortlich zu überprüfen, ob die generierte Datei bereits existiert .html und ob es schon zu alt ist.
  2. Die Datei mit dem Skript am Ende der Zieldatei - sie ist für das Ende der Dateigenerierung verantwortlich .html, im Cache speichern und Informationen an den Browser senden.
  3. Zieldatei - jede Seite, die ein PHP-Skript enthält, das wir optimieren möchten.

3a. Top-cache.php

$url = $_SERVER ["SCRIPT_NAME"];
$break = Explodieren ('/', $url);
$file = $break [Anzahl ($break) - 1];
$cachefile = 'cached -'.Substr_replace ($file, "", - 4). '.Html';
$cachezeit = 600; // Hier legen wir die Cache-Lebensdauer in Sekunden fest - derzeit sind es 10 Minuten
// Aus dem Cache ausliefern, wenn dieser jünger als $cachetime ist
if (file_exists ($cachefile) && time () - $cachetime <filemtime ($cachefile)) {
    Echo " \ n ";
    readfile ($cachefile);
    Ausfahrt;
}
ob_start();
?>

3b. Bottom-Cache.php

$cached = fopen ($cachefile, 'in');
fwrite ($cached, ob_get_contents ());
fclose ($cached);
ob_end_flush ();
?>

3c. Index.php

    include ('php / top-cache.php');
    $db = mysqli_connect (...);
    $get_scores = 'SELECT * FROM score_board ORDER BY Ergebnis DESC LIMIT 10';
    $scores = mysqli_query ($db, $get_scores);
?>
    
    
    
        
             TOP 10
        
    
    
        
            
                
                    Modaler Titel
                    
                        ×
                    
                
                
                    
                        

ANZEIGETAFEL
(Ergebnisse werden alle 10 Minuten aktualisiert)

                        
                            
                                
                                
                            
                            
                                foreach ($scores als $user) {
                                    Echo ‚
';
                                }
                            ?>
                        
NameErgebnis
'.$user ['Name'].' '.$user ['Ergebnis'].' Punkt
                    
                
                
                    SCHLIESSEN
                
            
        
    
    include ('php / bottom-cache.php');
?>

Verwenden der Funktion einschließen () am Anfang der Datei index.html (oder eine beliebige Datei, die wir optimieren möchten) Hängen Sie die Datei an top-chache.php. Es prüft, ob die Ergebnisdatei bereits generiert wurde und ob sie nicht zu alt ist, um sie dem Benutzer anzuzeigen. Falls eine solche Datei nicht existiert oder zu alt ist, generiert der Server sie für den ersten Benutzer, der die Seite betritt (es dauert etwas länger als die nächste Seite lädt, da die darin enthaltenen PHP-Skripte ausgeführt) und speichert sie auf dem Server. Jede nachfolgende Person, die die Website betritt, sieht die generierte Datei. Es ist wichtig, diese Lösung mit Bedacht zu verwenden und keine Daten auf diese Weise zu speichern, die für jeden Benutzer unterschiedlich sein sollten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

de_DEDeutsch