New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Amélioration des performances #400
Conversation
✔️ Deploy Preview for stylo-dev ready! 🔨 Explore the source changes: 75a05a7 🔍 Inspect the deploy log: https://app.netlify.com/sites/stylo-dev/deploys/60bfced82e3b13000841122b 😎 Browse the preview: https://deploy-preview-400--stylo-dev.netlify.app |
4ec360c
to
34af5c7
Compare
@oncletom quelque chose semble ne pas fonctionner car le volet de gauche est maintenant (visiblement) plus lent à charger quand il y a beaucoup d'éléments dans la bibliographie ! J'utilise l'id Zotero |
D'après ce que je comprends quand on utilise const bibTeXEntries = useMemo(() => bib2key(bib), [bib]) Il faut plutôt utiliser const [bibTeXEntries, setBibTeXEntries] = useState([])
useEffect(() => {
setBibTeXEntries(bib2key(bib))
}, [bib]) Il faudrait tester avec des composants React "simples" pour valider ce comportement. |
La mémoisation est "perdue" quand |
C'est le même article (et le même bib) mais le composant est Par contre, il est possible d'utiliser le state Redux pour enregistrer l'article courant (ou du moins le BibTeX courant). function updateArticleBib(state, { bib }) {
const articleBibTeXEntries = bib2key(bib)
return { ...state, articleBib: bib, articleBibTeXEntries }
} C'est aussi plutôt cool car cela ne bloque pas l'affichage. Si on imagine que la bibliographie n'est pas visible à l'ouverture de l'article, on peut faire la transformation en "arrière plan". EDIT: Cela dit le problème de fond c'est qu'afficher plusieurs centaines de références bibliographiques (ici 1325) n'est pas très judicieux. Là on "gagne" 2 secondes mais créer 1325 "composants références bibliographiques" prend aussi quelques secondes. |
Je serais bien partant de passer par le store Redux — dériver des données quand d'autres données changent — ça dégage beaucoup de "métier" de l'interface (affichage). Ce que tu décris comme bénéfices ne fait que renforcer ce petit effort à mettre pour rendre l'interface plus maintenable. Ça te parle ? |
Totalement en phase, il y a beaucoup trop de choses dans les props et c'est déjà inmaintenable dès qu'on veut déplacer ou modifier un peu la granularité des composants car on ne sait pas ce qui se cache dans "props". Les requêtes GraphQL polluent aussi pas mal les composants, je pense qu'extraire cette logique dans des "services" permettrait de tester plus facilement (par exemple avec des mocks). Par exemple dans le composant Write, on peut déplacer une petite centaine de lignes pour charger l'article et remplacer par : const data = await getArticle(articleId, applicationConfig) Bref, je vais revert les changements qui impactent négativement les performances ( Je pense le faire en deux étapes pour revenir plus facilement en arrière :
|
34af5c7
to
b651fca
Compare
@lakonis @antoinentl est-ce que vous pouvez s'il vous plait tester sur https://deploy-preview-400--stylo-dev.netlify.app qu'il n'y ait pas de regression ? Si c'est plus simple pour vous on peut aussi déployer sur https://stylo-dev.huma-num.fr/. Lire mon premier commentaire pour la liste des changements : C'est important pour nous de fusionner cette branche afin de débloquer les autres améliorations sur l'éditeur : édition collaborative, performance, potentiellement la refonte/simplification des onglets... Merci ! |
b651fca
to
3b44fd1
Compare
3b44fd1
to
f75e830
Compare
Je n'ai pas vu de problème particulier de mon côté. Bravo à tous les deux pour les développements et pour votre workflow. C'est très rassurant (et impressionant) de vous suivre. |
@lakonis merci pour tes tests.
😊 @antoinentl Est-ce que tu as eu le temps de tester ? Est-ce que tu souhaites que je déploie ces changements sur https://stylo-dev.huma-num.fr/ ? |
@Mogztter Je teste depuis hier (j'ai retrouvé une connexion internet décente qui n'ajoute pas un biais) et je fais passer à l'équipe aujourd'hui ! Une question : est-ce que réduire la latence à moins d'une seconde concernant le rafraîchissement des stats casse l'objectif initial ? |
Il me semble que le calcul des statistiques impactent relativement peu les performances. On a amélioré les expressions régulières avec Thomas et maintenant les performances sont correctes. Cela dit c'est toujours mieux d'éviter de faire des calculs sur chaque caractère. On peut conserver le Je crois que les soucis de performances sont surtout liés au composant React CodeMirror2 qui est assez lent quand il y a plusieurs milliers de lignes : #404. Il y a aussi la validation de la bibliographie qui était lancée à chaque fois même quand elle n'avait pas changé. |
@antoinentl j'ai réduis le délai à 250ms |
@antoinentl Je me permets de te ping pour que tu puisses tester ces changements. Suite à notre discussion, je propose de mettre en production le 23 juin à 09:00 UTC+2 soit 03:00 à Montréal (UTC-4). Je serais disponible jusqu'à 18:00 UTC+2 soit 12:00 à Montréal. |
Ok @Mogztter , on finit de tester ces jours-ci, on sera dans les temps pour la mise en production. |
Après plusieurs tests je n'ai pas vu de problème particulier ou spécifique à PR, donc c'est ok pour moi. Je re-testerai au moment de la mise en production @Mogztter 👍 |
@Mogztter Une mise en production à 23h30 😱 |
@antoinentl désolé pour la frayeur mais le fait de fusionner une pull request sur la branche principale ne fait pas de déploiement en production. Quand un nouveau commit arrive sur la branche principale on lance un déploiement en développement sur https://stylo-dev.huma-num.fr/. Seule les releases provoquent un déploiement en production sur https://stylo.huma-num.fr/ |
@Mogztter Ah oui suis-je bête, merci du rappel ! |
Pas de soucis, c'est maintenant déployé en production ! |
L'interface d'écriture est plus réactive lorsqu'on modifie un article beaucoup de titres et/ou beaucoup d'éléments de bibliographies
throttle
pour limiter la fréquence à laquelle les statistiques et la table des matières sont régénérées (à partir du texte de l'article)dispatch
pour propager des changements d'états au store ReduxAinsi que deux corrections de bug :