Google PageSpeed Insights API: WordPress beschleunigen [Skript]

Oftmals sind die Hinweise der Google PageSpeed Insights Konsole nicht ausreichend, um direkte Handlungsempfehlungen abzuleiten. Dieses kleine Skript gibt auf der Konsole direkte Handlungsempfehlungen aus, die auf Basis der Google PageSpeed Insights Evaluation erstellt werden. Die Liste der Handlungsempfehlungen, die bei gefundenen Mängeln ausgespielt wird, wird über die Zeit aktualisiert.

PageSpeed Insights API: Aufbau

Die PageSpeed Insights API benötigt keine Authentifizierung. PageSpeed Insights ist eine Online-Applikation, die jedem frei zugänglich ist und keine Einschränkung bei der URL-Eingabe besitzt, d.h. für jede Website kann ich einen PageSpeed-Test durchführen. Lediglich für das Anzapfen der Daten bittet Google um das Einrichten eines API-Schlüssels, der in der Google Developer Console erstellt werden kann. Über einen einfachen Aufruf der Seite im Browser kann bereits die json-Struktur betrachtet werden (siehe Bild).

Da der Output gering verschachtelt wird, ist ein Auslesen der Struktur sehr einfach. Die Prozedur ist folgendermaßen aufgebaut: Wir extrahieren die Arrays aus der Datei und filtern diese anhand ihrer Impacts. Ist dieser Impact auf 0.0, so gibt es keinen negativen Einfluss auf die Ladezeit der Seite – dieser Aspekt ist bereits behoben. Die verbleibenden Arrays haben einen negativen Einfluss auf die Ladezeit. Die Impacts werden summiert und der relative Anteil der verbleibenden Aspekte soll dem Nutzer ein Eindruck über die Dringlichkeit der jeweiligen Aspekte geben. Zu den Aspekten werden Handlungsempfehlungen ausgegeben, die erfahrungsgemäß die Probleme behoben haben.

pagespeed.py – Version 1.0 (Python-Skript)

pagespeed.py (klicken, um zum Skript zu kommen) ist ein “Lightweight” Python-Skript, das die illustrierte Idee nutzbar macht.

Wer das Skript ausprobieren möchte, kann Python-Skript gerne austesten. Dazu ist nur ein API-Key der PageSpeed Insights API in der Google Developer Console nötig.

pagespeed.py – Die Bestandteile

Hier möchte ich ein wenig auf die Bestandteile des Codes eingehen:

def sticking():
    basic_url = "https://www.googleapis.com/pagespeedonline/v1/runPagespeed?url="
    parameter = "&key="
    url_input = basic_url + args.path + parameter + api_key
  
    return url_input

with urllib.request.urlopen(sticking()) as url:
    data = json.loads(url.read().decode())

Die Methode sticking() klebt die übergebene URL in eine valide Request-URL und diese Rückgabe dient zugleich als Parameter der .urlopen-Methode. Im Anschluss speichern wir uns die json-Datei, die man unter dieser Adresse findet, in einer Variable data.

def a_filter(an_array):
    if(an_array['ruleImpact'] != 0):
     filtered_array.append(an_array)

Der Filter entfernt alle untersuchten Aspekte, die einen Einflussfaktor von 0 haben.

Zuletzt lassen wir einige for-Schleifen über das Array laufen, die dem Nutzer die nützlichen Handlungsempfehlungen über die Konsole ausgibt:

sum_of_impact = 0

for element in filtered_array:
    sum_of_impact += element['ruleImpact']

for element in filtered_array:

 if (element['localizedRuleName'] == "Optimize images"):
        print("- " + element['localizedRuleName'] + " (" + str((element['ruleImpact']/sum_of_impact)*100) + "%)")
        print("Für dieses Problem eignen sich folgende Vorgehensweisen")
        print("=> Installation des Plugins: wordpress.org/plugins/optimus/.")
        print("=> Bilder einzeln über compressor.io komprimieren.")
        print("=> Bildgrößen anpassen: Nur Bilder in der Größe hochladen, in denen sie gebraucht werden.")
        print("###############################")

 if (element['localizedRuleName'] == "Avoid landing page redirects"):
        print("- " + element['localizedRuleName'] + " (" + str((element['ruleImpact']/sum_of_impact)*100) + "%)")
        print("Überprüfe, ob zu viele Redirects eingerichtet sind.")
        print("###############################")

.....

Neugierig? Dann das Python-Skript gerne austesten.

Wo bin ich?