Heim >Backend-Entwicklung >PHP-Tutorial >Erstellen eines Bildergalerie -Blogs mit Symfony Flex: Datentests

Erstellen eines Bildergalerie -Blogs mit Symfony Flex: Datentests

Joseph Gordon-Levitt
Joseph Gordon-LevittOriginal
2025-02-08 09:03:13656Durchsuche

Building an Image Gallery Blog with Symfony Flex: Data Testing

Dieser Artikel ist Teil einer Reihe zum Erstellen eines Hochleistungs-Multi-Image-Galerie-Blogs mit Symfony Flex. (Sehen Sie sich das Repository hier an.)

In der vorherigen Rate haben wir ein grundlegendes Symfony -Projekt eingerichtet, erste Leuchten erstellt und die Anwendung zum Laufen gebracht. Dieser Artikel konzentriert sich darauf, die Datenbank mit einem realistischen Datensatz für das Benchmarking von Performance -Benchmarking zu bevölkern. Wir werden auch eine Phpunit -Testsuite einrichten.

Schlüsselziele:

  • Hebel-Symfony Flex für eine effiziente Entwicklung und Leistungsoptimierung eines Multi-Image-Galerie-Blogs.
  • Implementieren Sie die Doktrin -Stapelverarbeitung für die effiziente Speicherverwaltung während des Ladens der Datenvorrichtung.
  • Bildhandhabung optimieren, indem Sie Bilder vorab auswählen und sie wiederverwenden, um den Ressourcenverbrauch zu verringern.
  • Durchführende Leistungstests mit Belagerung (über Docker) durchführen, um reale Benutzerinteraktionen zu simulieren.
  • Erstellen Sie ein robustes Phpunit -Test -Framework mit Funktions- und Rauchtests, um die Anwendungszuverlässigkeit zu gewährleisten.

Generieren eines größeren Datensatzes:

Nach der ersten Entwicklung ist das Erstellen eines größeren Datensatzes für realistische Leistungstests von entscheidender Bedeutung. Während kleine Vorrichtungen für die Entwicklung geeignet sind, erfordert Leistungstests ein deutlich größeres Datenvolumen. Das einfache Erhöhen der COUNT -Konstanten in unseren Fixture -Klassen (wie unten gezeigt) ist ineffizient und kann zu Erschöpfungsfehlern von Speicher führen:

<code class="language-php">// src/DataFixtures/ORM/LoadUsersData.php
const COUNT = 500;
// src/DataFixtures/ORM/LoadGalleriesData.php
const COUNT = 1000;</code>

Dieser Ansatz ist langsam, anfällig für Speicherfehler (PHP Fatal error: Allowed memory size of N bytes exhausted) und aufgrund von wiederholten Bilddownloads mit Faker ineffizient.

.

Optimierung der Lehre für die Stapelverarbeitung:

gc_collect_cycles() Um diese Probleme anzugehen, werden wir die Stapelverarbeitung in der Doktrin implementieren. Wir definieren eine Chargengröße (z. B. 100 Galerien), spülen und löschen den EntityManager nach jeder Charge und verwenden die Müllsammlung ($manager->clear()). Dies verhindert das Gedächtnis aufzublähen. Wir werden auch die Speichernutzung überwachen und Fortschrittsaktualisierungen drucken. Entscheidend ist, dass Sie nach

Entitäten wieder in den Manager zurückversetzen, um "Entity-nicht-persistierte" Fehler zu vermeiden.

LoadGalleriesData Beispiel für optimierte Fixture:

<code class="language-php">// Define batch size
$batchSize = 100;

// ... inside the for loop ...

// Save the batch
if (($i % $batchSize) == 0 || $i == self::COUNT) {
    $currentMemoryUsage = round(memory_get_usage(true) / 1024);
    $maxMemoryUsage = round(memory_get_peak_usage(true) / 1024);
    echo sprintf("%s Memory usage (currently) %dKB/ (max) %dKB \n", $i, $currentMemoryUsage, $maxMemoryUsage);

    $manager->flush();
    $manager->clear();
    gc_collect_cycles();
}</code>

Bildhandlung optimieren:

generateRandomImage Anstatt Bilder dynamisch herunterzuladen, wählen wir einen Satz von Bildern (z. B. 15 von Unsplash) vor und verwenden sie wieder. Dies beschleunigt den Prozess erheblich. Die Methode

kann aktualisiert werden, um aus diesem vordefinierten Satz auszuwählen:
<code class="language-php">private function generateRandomImage($imageName) {
    // Array of pre-selected image filenames
    $images = ['image1.jpeg', 'image2.jpeg', ...];
    // ... (rest of the method remains largely the same) ...
}</code>

var/uploads Denken Sie daran, einen Befehl hinzuzufügen, um das Verzeichnis bin/refreshDb.sh in Ihrem

-Skript vor dem Laden von Feortures zu reinigen.

Leistungstest mit Belagerung und Docker:

Wir werden Siege, ein leistungsstarkes HTTP -Benchmarking -Tool, in einem Docker -Container für konsistente und wiederholbare Leistungstests verwenden. Dies vermeidet die Notwendigkeit lokaler Installationen und sorgt für konsistente Testumgebungen.

Testenszenarien:

Wir definieren Testszenarien, um verschiedene Benutzerinteraktionen zu simulieren, einschließlich:

  • Homepage: Testen Sie die anfängliche Last und das faule Laden nachfolgender Galerie -Seiten. Wir werden eine lazy-load-urls.txt -Datei verwenden, die URLs für faul beladene Seiten enthält, gewichtet, um das realistische Benutzerverhalten zu simulieren.
  • einzelne Galerie Seiten: Testen Sie die Leistung einzelner Galerie -Seiten mit einer Liste von URLs in galleries.txt.

Einrichten von Phpunit für Rauchtests:

Eine grundlegende Phpunit -Testsuite mit Rauchtests stellt sicher, dass die Kernfunktionalität während der Entwicklung und Optimierung intakt bleibt. Diese Tests überprüfen erfolgreiche HTTP -Antwortcodes für Schlüssel -URLs.

Schlussfolgerung:

In diesem Artikel detaillierten Techniken zum Erstellen eines realistischen Datensatzes für Leistungstests und Festlegung eines robusten Test -Frameworks. Zukünftige Artikel werden sich mit PHP- und MySQL -Leistungsoptimierung und weiteren Leistungsverbesserungen befassen.

häufig gestellte Fragen (FAQs): (Diese FAQs bleiben weitgehend die gleichen wie in der ursprünglichen Eingabe, könnten jedoch auf der Grundlage des Kontextes dieser spezifischen Blog -Postserie weiter zugeschnitten werden, wenn spezifischere Fragen auftreten. )

Das obige ist der detaillierte Inhalt vonErstellen eines Bildergalerie -Blogs mit Symfony Flex: Datentests. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn