Das Produkt, zu dem ich jetzt gehöre, verfügt über PageSpeed Insights (PSI), um höhere Suchergebnisse anzuzeigen und Stress beim Surfen auf der Website zu reduzieren. Wir messen die Verbesserung der Seitengeschwindigkeit mit.
Die Verbesserungsergebnisse werden vorher / nachher gemessen, aber je nach Zeitpunkt der Messung kann der PSI-Wert einen Spielraum von 10 bis 30 Punkten aufweisen ** Unschärfe **.
Deshalb hat mein Team mehrmals gemessen, anstatt einmal pro Seite.
--Durchschnittliche Punktzahl
Ich entschied mich für die Methode der Beschreibung.
Je mehr Seiten Sie messen möchten, desto schwieriger ist es jedoch zu warten, indem Sie auf die Schaltfläche "Analysieren" klicken. Dieses Mal habe ich versucht, dies mithilfe der API effizienter zu gestalten.
kotahashihama/psi-score-collector https://github.com/kotahashihama/psi-score-collector
Um Daten von der PageSpeed Insights-API abzurufen, benötigen Sie den API-Schlüssel als Parameter, wenn Sie darauf zugreifen.
Sie können es auf der folgenden Seite erhalten.
Versuchen Sie es mit der PageSpeed Insights API | Google Developers https://developers.google.com/speed/docs/insights/v5/get-started
Es ist nicht gut für die Sicherheit, den API-Schlüssel so zu belassen, wie er im Projektcode enthalten ist. Deshalb habe ich die Bibliothek "python-dotenv" verwendet und sie als Umgebungsvariable in ".env" verwaltet.
Terminal
pip install python-dotenv
config.py
from dotenv import load_dotenv
load_dotenv()
import os
API_KEY = os.getenv('API_KEY')
.env
API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Da wir jede festgelegte Anzahl von Messungen nacheinander messen möchten, sind die folgenden Elemente erforderlich.
main.py
#Anzahl der Messungen
measurement_count = 3;
#Messziel-URL
url_list = [
'https://www.google.com/',
'https://www.yahoo.co.jp/',
'https://www.bing.com/'
]
Es scheint ursprünglich gut zu sein, den Einstellungsinhalt von der Verarbeitung zu trennen, aber diesmal werden wir es tun.
Für jede URL
--Anzahl der Schritte
Wird ausgegeben und schließlich wird die Meldung zum Abschluss der Messung angezeigt.
main.py
print('\n'.join(map(str, url_list)))
print(f'Wird gemessen...({measurement_count}Zeitmessung)')
for i, url in enumerate(url_list):
print(f'\n({i + 1}/{len(url_list)}) {url}')
measure('mobile')
measure('desktop')
print('\n' + '=' * 60)
print('\n Messung abgeschlossen!')
Verfügen Sie über die URL und die Parameter, um auf die SPI-API zuzugreifen.
main.py
api_url = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed'
api_key = config.API_KEY
payload = { 'key': api_key }
In der oben erstellten config.py
werden die Umgebungsvariablen aus .env
gelesen.
main.py
import config
Lesen wir config
und setzen den Wert auf api_key
.
Zunächst ist unten der gesamte Code.
main.py
def measure(device):
device_name = {
'mobile': 'Handy, Mobiltelefon',
'desktop': 'Computer'
}
print(f'[ {device_name[device]} ]')
payload['strategy'] = device
url_name = api_url + "?url=" + url
scores = []
for i in range(measurement_count):
result = requests.get(url_name, params = payload)
result_json = result.json()
result_score = result_json['lighthouseResult']['categories']['performance']['score']
displayed_score = math.floor(result_score * 100)
scores.append(displayed_score)
print(displayed_score, end=' ')
score_average_raw = numpy.average(scores)
score_average = Decimal(str(score_average_raw)).quantize(Decimal('0.1'), rounding=ROUND_HALF_UP)
score_max = numpy.amax(scores)
score_min = numpy.amin(scores)
print(f'\n Durchschnitt{score_average}Punkt (niedrigster){score_min}Punkt, das Beste{score_max}Punkt)')
In diesem Prozess werden zwei Haupttypen von Bibliotheken verwendet.
tun.
(Ich werde diesmal nicht darauf eingehen, aber ich denke, es ist einfacher, die Python-Bibliothek für Teammitglieder freizugeben, wenn Sie Abhängigkeiten mit Poetry usw. verwalten.)
Verwenden Sie eine Python-Bibliothek namens "Anfragen".
Terminal
pip install requests
main.py
import requests
main.py
result = requests.get(url_name, params = payload)
result_json = result.json()
result_score = result_json['lighthouseResult']['categories']['performance']['score']
Greifen Sie mit get () auf die API zu, konvertieren Sie das Ergebnis mit json () in JSON und verfolgen Sie die Punktzahl, in der die Punktzahl gespeichert ist.
math
numpy
decimal
Ich benutze die Python-Bibliothek des Berechnungssystems.
Von diesen ist numpy
standardmäßig nicht enthalten, installieren Sie es also mit pip.
Terminal
pip install numpy
main.py
import numpy
Da decimal
nur das Decimal
-Objekt und die Rundungskonstante ROUND_HALF_UP
verwendet, wird es beim Import in dieser Form gelesen.
main.py
from decimal import Decimal, ROUND_HALF_UP
main.py
score_average_raw = numpy.average(scores)
score_average = Decimal(str(score_average_raw)).quantize(Decimal('0.1'), rounding=ROUND_HALF_UP)
score_max = numpy.amax(scores)
score_min = numpy.amin(scores)
Decimal
-Objekt von decimal
wird der Durchschnittswert gerundet und bis zur ersten Dezimalstelle angezeigt.tun.
Nach der Ausführung werden Punkte gesammelt, indem es in Ruhe gelassen wird. Es kann bequemer sein, etwas wie Terminal-Notifier zu verwenden, um das Ende zu signalisieren.
Terminal
py main.py
Die Messergebnisse werden so akkumuliert.
Die Datenerfassungsverarbeitung ist ein sehr grundlegender Bestandteil, daher scheint sie an verschiedenen Stellen im Unternehmen eingesetzt werden zu können. Als Ingenieur möchte ich in der Lage sein, solche Werkzeuge zu erstellen, damit ich ein- und ausatmen kann.
Es war also mein erster Qiita-Artikel. Nein!