Le produit auquel j'appartiens dispose désormais de PageSpeed Insights (PSI) dans le but d'afficher des résultats de recherche plus élevés et de réduire le stress lors de la navigation sur le site. Nous mesurons l'amélioration de la vitesse de la page en utilisant.
Les résultats d'amélioration sont mesurés avant / après, mais selon le moment de la mesure, le score PSI peut avoir une marge de 10 à 30 points ** flou **.
C'est pourquoi mon équipe a mesuré plusieurs fois au lieu d'une seule mesure par page.
--Score moyen --Nombre de mesures (15 fois ou plus) ――Si le flou est important, les points les plus bas et les plus hauts
J'ai décidé d'aller avec la méthode de description.
Cependant, avec cela, plus vous voulez mesurer de pages, plus il est difficile d'attendre en cliquant sur le bouton «analyser». Cette fois, j'ai essayé de rendre cela plus efficace en utilisant l'API.
kotahashihama/psi-score-collector https://github.com/kotahashihama/psi-score-collector
Pour obtenir des données de l'API PageSpeed Insights, vous avez besoin de la clé API en tant que paramètre lorsque vous y accédez.
Vous pouvez l'obtenir sur la page suivante.
Essayez d'utiliser l'API PageSpeed Insights | Google Developers https://developers.google.com/speed/docs/insights/v5/get-started
Il n'est pas bon pour la sécurité de laisser la clé API telle quelle dans le code du projet, j'ai donc utilisé la bibliothèque python-dotenv
et l'ai gérée comme une variable d'environnement dans .env
.
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
Puisque nous voulons mesurer chaque nombre défini de mesures en séquence, les éléments suivants sont requis.
main.py
#Nombre de mesures
measurement_count = 3;
#URL cible de la mesure
url_list = [
'https://www.google.com/',
'https://www.yahoo.co.jp/',
'https://www.bing.com/'
]
Il semble qu'il soit bon à l'origine de séparer le contenu des paramètres du traitement, mais cette fois, nous le ferons.
Pour chaque URL
--Nombre d'étapes
Est émis et enfin le message de fin de mesure s'affiche.
main.py
print('\n'.join(map(str, url_list)))
print(f'Est mesuré...({measurement_count}Mesure du temps)')
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 Mesure terminée!')
Ayez l'URL et les paramètres pour accéder à l'API SPI.
main.py
api_url = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed'
api_key = config.API_KEY
payload = { 'key': api_key }
Le config.py
créé ci-dessus contient les variables d'environnement lues à partir de .env
.
main.py
import config
Lisons config
avec et définissons la valeur sur ʻapi_key`.
Tout d'abord, voici le code complet.
main.py
def measure(device):
device_name = {
'mobile': 'mobile',
'desktop': 'ordinateur'
}
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 moyenne{score_average}Point (le plus bas{score_min}Point, le meilleur{score_max}point)')
Il existe deux principaux types de bibliothèques utilisées dans ce processus.
Faire.
(Je ne parlerai pas de cette fois, mais je pense qu'il est plus facile de partager la bibliothèque Python avec les membres de l'équipe si vous gérez les dépendances avec Poetry etc.)
Utilisez une bibliothèque Python appelée «requests».
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']
Accédez à l'API avec get ()
, convertissez le résultat en JSON avec json ()
et suivez le score
où le score est stocké.
math
numpy
decimal
J'utilise la bibliothèque Python du système de calcul.
Parmi ceux-ci, numpy
n'est pas inclus par défaut, alors installez-le avec pip.
Terminal
pip install numpy
main.py
import numpy
Puisque decimal
utilise uniquement l'objet Decimal
et la constante d'arrondi ROUND_HALF_UP
, il est lu sous cette forme lors de l'importation.
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)
numpy
, le score moyen est calculé à partir du score, et seuls les points les plus élevés et les plus bas sont obtenus.
--Dans l'objet Decimal
de decimal
, la valeur moyenne est arrondie et affichée jusqu'à la première décimale.Faire.
Après son exécution, il collectera des points en le laissant seul. Il peut être plus pratique d'utiliser quelque chose comme terminal-notifier pour signaler la fin.
Terminal
py main.py
Les résultats de mesure seront accumulés comme ceci.
L'acquisition-traitement des données est un élément très fondamental, il semble donc qu'il puisse être utilisé dans divers endroits de l'entreprise. En tant qu'ingénieur, j'aimerais pouvoir créer de tels outils pour pouvoir inspirer et expirer.
C'était donc mon premier article sur Qiita. Non!
Recommended Posts