Bac à sable
Principales ressources
Page principale
Success stories d'erooMisation
Outils techniques
Méthodologie
À propos de ce Wiki
Rechercher
×
Se connecter
×
Se connecter
Email ou NomWiki
Mot de passe
Mot de passe perdu ?
Se souvenir de moi
Se connecter
S'inscrire
Tableau de bord
Documentation
Gestion du site
Apparence
Mes contenus
Formulaires
Loi d'erooM
Effort Radicalement Organisé d'Optimisation en Masse, pour faire tourner les services de demain sur le matériel d'hier
Sauver
Format
Titre 1
Titre 2
Titre 3
Titre 4
Centré
Texte agrandi
Texte mis en valeur
Code source en mode bloc
Code source en mode ligne
Rend visible la partie sélectionnée uniquement en mode édition
Activer JavaScript pour joindre des fichiers.
Fichier
Annuler
Échoué
Composants
Éditer le composant sélectionné
Boutons
Mise en forme
Syndication / Flux RSS
Réactions / Votes
Vidéo intégrée
Actions d'envoi d'e-mail/listes
Gestion des tags
Afficher les données d'un formulaire
Afficher un formulaire de création de fiche
Actions avancées
# Exemples d'optimisations réalisées ## Pierre Beyssac et son script signal.eu.org/rail/ ### Source : [Echange sur Mastodon](https://mast.eu.org/@pb/110940524331081077) ### Gain : x60 ### Verbatim : > passer son code au profiler, une bonne vieille technique qui semble un peu oubliée pour identifier rapidement où le code passe du temps. J'ai passé ainsi une de mes moulinettes, réécrit quelques bouts de code avec ajout de memo (cache), etc, bilan : vitesse d'exécution x60 environ (un script qui prenait 5-6 heures ne prend plus que quelques minutes). > ça prend tous les horaires des trains ou trams d'un fichier GTFS, ça cherche les gares correspondantes sur la carte OpenStreetMap, et ça calcule le trajet du train avec le même backend OSRM que https://signal.eu.org/osm/. Ensuite c'est stocké en base pour faire du trainspotting ou afficher les trajets sur https://signal.eu.org/rail/ > tout ce truc a été écrit à partir du confinement de 2020 (+ fracture perso qui m'a encore + confiné), donc des morceaux de 30 mn par-ci, 1h par-là depuis. Je dirais entre 50 et 150 heures au total, facilement 20 à 40 pour ce script-là qui est central. Ça tournait très vite initialement car c'était très fruste et limité aux trains, je l'ai étendu au fil du temps pour mieux retrouver et distinguer les gares, quais, arrêts de tram, etc. > donc forcément plus on veut un résultat subtil, plus il faut d'informations de décision, et je récupère tout ça dans la base OSM, et l'algo de décision s'est complexifié et ralenti (plus de requêtes en base de données notamment). Mais sur l'optimisation ça a été très rapide. > comme je me disais qu'il y avait sûrement des améliorations triviales à faire (low hanging fruit comme disent les anglophones), j'ai testé le profiler Python que je n'avais jamais utilisé, pour voir ce qu'il mettrait en évidence dans le code. Et il m'a identifié une fonction qui prenait un temps énorme, appelée plein de fois. > et voilà le patch (lignes avec +). Il est con comme la lune, il m'a fallu peut-être 10 mn pour écrire et voir ce que ça donnait. Je pensais que ça ne ferait pas de mal mais ne m'attendais pas à une telle efficacité. + 10-15 mn pour lire la doc du profiler Python afin de voir comment s'en servir. image du patch {{attach file="script_Python_de_Pierre_Beyssac.png" desc="image script_Python_de_Pierre_Beyssac.png (6.6kB)" size="original" class="" caption="Diff de script Python"}} > le patch est bêtement de la [memoization](https://en.wikipedia.org/wiki/Memoization), idée assez basique. Comme une gare est facilement recherchée des centaines ou milliers de fois pour les multiples relations qui y passent (avec différents paramètres le cas échéant), on gagne vite à gâcher un peu de mémoire pour ne pas la rechercher à chaque fois dans la base et recalculer les scores des points trouvés.
Mots clés
Sauver
Annuler
Thème
×
Choisissez un formulaire
Nb. : Il est possible d'afficher plusieurs bases de données d'un coup en entrant leur id séparé par une virgule [
accéder à la documentation
].
Code à inclure dans la page
×
Ajouter un lien au texte selectionné
Modifier le lien
Créer une page
Nom de la page ou URL externe
Nom de la page à créer
Le nom de la page ne doit pas contenir de caractères spéciaux autre que - ou _ . Les URL doivent commencer par https://
Si la page n'existe pas, elle sera créée.
Cette page existe déjà !
Texte affiché
Texte du lien vers cette page
Texte au survol
Le lien s'ouvre dans l'onglet courant
Le lien s'ouvre dans un nouvel onglet
Le lien s'ouvre dans une fenêtre modale
×
Télécharger le fichier
Texte du lien de téléchargement
Afficher le pdf dans la page :
sous forme de lien
directement inclus dans la page
Alignement de l'image
Texte en dessous
Gauche
Centre
Droite
Taille de l'image
Miniature (140x97)
Moyenne (300x209)
Large (780x544)
Taille originale
Texte affiché au survol
Paramètres avancés
Lien web associé au clic
Effets graphiques
Bord blanc
Ombre portée
Agrandissement au survol
Permettre de cliquer sur l'image pour l'afficher en grand
Oui
Non
Texte de remplacement
Protection anti-spam active
×
Apparence de la page SuccessStories
Thème
margot
Squelette
1col
1col.vertical-menu
2cols-left
2cols-right
full-page
Style
margot
light
margot-fun
Preset
Preset par défaut
default
fun
landes
red
yellow
Paramètres avancés
Langue de la page
Català
English
Español, castellano
Français
Nederlands, vlaams
Português
Choisir une page pour:
le menu horizontal
les raccourcis en haut à droite
l'entête (bandeau)
le pied de page
le menu vertical