Perf/compression plages et filtrage - #40
Merged
Merged
Conversation
Les fichiers de hash listaient chaque version pour chaque hash, ce qui est
très redondant : un fichier statique inchangé pendant 200 versions répétait
ces 200 chaînes.
Le format v2 stocke la liste ordonnée des versions dans `_meta.sorted_versions`
et remplace les listes par des plages inclusives ("4.5-4.5.23") sous la clé
`files`. Une plage n'est émise que pour des versions adjacentes dans
`sorted_versions`, donc l'expansion ne peut pas inventer une version qui
n'a pas été observée.
Ajoute `version_utils` pour le tri des versions et la compression/expansion
des plages. Le tri gère les schémas de tag des projets suivis : préfixe v,
préversions (alpha < beta < rc < release), patch levels Magento (-p1),
underscores Joomla (2.5.0_RC1) et versions à quatre segments. Les segments
numériques sont comparés en entiers, donc 2.0.10 vient après 2.0.2.
Sur le jeu de technologies actuel : 190 Mo -> 40 Mo (-79 % brut, -20 % après
gzip), au prix d'une expansion au chargement (magento2 : 0,12 s -> 0,50 s).
`load_json` continue de lire l'ancien format (absence de `_meta`), ce qui
préserve les mises à jour incrémentales à partir d'une release existante.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
La plupart des fichiers statiques ne changent pas pendant une longue série de
releases : leur hash ne permet pas de distinguer une version. Ils occupent
pourtant l'essentiel de la base.
Chaque fichier reçoit un score :
score = nombre de hashs distincts / taille du plus grand groupe de versions
Un fichier avec beaucoup de hashs et de petits groupes est discriminant ; un
fichier dont un hash unique couvre 200 versions ne l'est pas (score 0,005).
Les fichiers sous `--discrimination-threshold` sont retirés avant l'écriture
(défaut 0,05 ; 0 pour désactiver).
Mesuré sur le jeu de technologies actuel : 25 à 54 % des fichiers et 23 % de
la taille totale en moins, et seules deux versions toutes technologies
confondues (drupal 8.1.0-rc1 et wordpress 5.4.1) perdent la détection exacte.
Aucune version ne perd toute couverture, et il reste des milliers de fichiers
candidats par technologie.
Le seuil de 0,05 a été retenu plutôt que 0,1 : ce dernier retire jusqu'à 70 %
des fichiers pour deux versions détectables en moins.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
La section "Output format" décrivait encore la table plate
{ file_path: { sha1: [versions] } } et `--discrimination-threshold`
n'apparaissait pas dans les options.
Documente la structure v2 (`_meta.sorted_versions` + `files`), la règle
d'adjacence des plages, les schémas de version gérés par le tri, et comment
un consommateur doit expandre les plages avant de comparer. Ajoute une section
sur le score de discrimination et son seuil.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.