Hypertopic / Porphyry

Corpus analyses confrontation
https://hypertopic.org/porphyry
GNU Affero General Public License v3.0
21 stars 165 forks source link

The application should be quickly usable on mobile on startup #382

Open CeyFun opened 3 years ago

CeyFun commented 3 years ago

Description

The mobile version takes a long time to load every item when the user first connect without feedback indicating that the application is loading.

What is the valuable outcome that cannot be achieved because of this bug?

The application could be mistaken as not working, thus the users could give up using it pretty quickly.

For which stakeholder (people, role, project, domain) is it important?

This impacts the end users.

Reproduction scenario

Steps to reproduce the behavior:

  1. Go to main page of the application.

Expected behavior

The first loading should be quick or at least indicated to the end user.

Environment

Workaround

Wait.

Deliverables status

Phase 1

Phase 2

benel commented 3 years ago

Wait.

😉

qhainos commented 3 years ago

(en avance pour la suite)

fait avec @lusardia @CeyFun @dylan-correia

AprĂšs vĂ©rification, les images semblent assez optimisĂ©es et nous ne pensons pas que ce soit le problĂšme principal. Selon nous, le problĂšme vient plutĂŽt du fait que les 1700+ images de vitraux s’affichent dĂšs le lancement du site. L’utilisateur n’a aucune utilitĂ© de voir ces 1700 vitraux de maniĂšre non filtrĂ©e, en plus de cela, ces images se chargent Ă  l’insu de l’utilisateur et lui demandent une certaine utilisation de ses donnĂ©es mobiles avant de prendre de la place dans le cache de son navigateur. (AprĂšs vĂ©rification, ce problĂšme semble liĂ© Ă  Steatite qui envoit toutes les donnĂ©es d’un coup et ne peut pas les envoyer par paquets).

Solution 1 : Nous pensons qu’il serait plus intĂ©ressant de les charger progressivement au fur et Ă  mesure que l’utilisateur fait dĂ©filer la page.

Solution 2 : La seconde solution serait de diviser les vitraux en pages contenant un nombre de vitraux que l’utilisateur peut choisir via un mini menu dĂ©roulant du mĂȘme type que celui positionnĂ© sous le plan.

Solution 3 : Enfin, une derniùre solution serait de ne charger aucun vitrail au chargement de la page et de ne les charger que lors de l’ajout d’attributs de la part de l’utilisateur (exemple : spatial, artiste
).

Nous privilĂ©gions la premiĂšre solution car c’est celle qui nous semble la plus simple, Ă  la fois pour les utilisateurs et Ă  implĂ©menter.

Maquettes imageant les solutions envisagées : https://www.figma.com/file/NAptXTPj8xrmkYZoEBPaFS/Issue-383?node-id=0%3A1

Partie du code impactée (classes, méthodes)

Nous avons trouvĂ© la partie du code qui impacte le chargement des items (photos des vitraux) sur la page d’accueil. Nous pensons qu’il s’agit de la classe Corpora. Cette classe est situĂ©e sur le fichier Porphyry/src/components/portfolioPage/Corpora.jsx nous nous intĂ©resserons donc Ă  la mĂ©thode Item(props) appelĂ©e dans la mĂ©thode render().

Le code de Steatite sera Ă©galement Ă  analyser et Ă  modifier pour pouvoir optimiser l’envoi de donnĂ©es (par paquets si possible, au lieu d’envoyer tout d’un coup).

Difficultés algorithmiques et pistes de résolution

Chargement progressif (testé mais ne résout pas le problÚme) :

Nos solutions ne changent pas, nous avons simplement vu que le problĂšme se situait sur Steatite plutĂŽt que dans Argos ou dans le code de Porphyry.

Données nécessaires : structure et stratégies de récupération

Pour pouvoir tester nos diffĂ©rentes solutions, nous aurions besoin d’avoir accĂšs Ă  un grand nombre de vitraux pour pouvoir comparer l’évolution des temps de chargement. En effet, sur notre base de donnĂ©es Argos, nous avons trop peu de donnĂ©es, le chargement est assez rapide.

BibliothĂšques

Il ne semble pas nécessaire d'avoir recours à des bibliothÚques pour simplifier l'implémentation.

Test de snippets de code

https://github.com/CeyFun/Porphyry/tree/test-lazy-loading

Services extérieurs

Pas besoin d'appeler des services extĂ©rieurs supplĂ©mentaires, le service steatite est utilisĂ© pour optimiser le poids des images, mais ces derniĂšres sont dĂ©jĂ  trĂšs lĂ©gĂšres, nous pensons donc qu’il n’est pas nĂ©cessaire de les optimiser plus. Il faudra l’analyser et le modifier afin qu’on puisse procĂ©der aux solutions envisagĂ©es.

Étapes prĂ©alables de dĂ©veloppement

Pour avoir un jeu de donnĂ©es suffisant, nous avons redirigĂ© les requĂȘtes de Porphyry vers les serveurs Argos et Steatite hĂ©bergĂ©s Ă  l’UTT.

benel commented 3 years ago

@qhainos @lusardia @CeyFun @dylan-correia Merci pour ce début de stratégie d'implémentation (en avance).

Solution 3 : Enfin, une derniùre solution serait de ne charger aucun vitrail au chargement de la page et de ne les charger que lors de l’ajout d’attributs de la part de l’utilisateur (exemple : spatial, artiste
).

Comme mentionnĂ© lors de la rĂ©union de ce matin, c'est cette derniĂšre solution qui est Ă  privilĂ©gier mais UNIQUEMENT quand on est en mobilitĂ© (en effet les besoins et les contraintes ne sont pas du tout les mĂȘmes quand on est sur un bureau).

Nous avons trouvĂ© la partie du code qui impacte le chargement des items (photos des vitraux) sur la page d’accueil. Nous pensons qu’il s’agit de la classe Corpora. Cette classe est situĂ©e sur le fichier Porphyry/src/components/portfolioPage/Corpora.jsx nous nous intĂ©resserons donc Ă  la mĂ©thode Item(props) appelĂ©e dans la mĂ©thode render().

La zone est bonne... AprÚs on voit dans votre texte qu'il y a un petit flottement pour savoir si sera plus précisément dans le render de Corpora ou d'Item (ou dans les fonctions qui permettent d'utiliser l'un dans l'autre).

C'est un peu normal car vous avez deux critĂšres qui doivent ĂȘtre conbinĂ©s pour les cacher :

Le premier est faisable avec Bootstrap, mais le second est plus un traitement à partir des données de haut niveau. Donc effectivement ce ne serait pas étonnant qu'il y ait des modifications à deux endroits différents.

D'autres points Ă©tant hors-sujet, du coup, je n'en parlerai pas ici.

Couapy commented 2 years ago

A dĂ©faut de pouvoir charger l'application plus rapidement, ou reduire le nombre de requĂȘtes, il serait aussi possible d'afficher un spinner (exemple ici), ou des skeletons (exemple ici), le temps que les diffĂ©rentes requĂȘtes soient traitĂ©es. Cela permettrait de pouvoir tester cette fonctionnalitĂ©. Il faudrait Ă©galement pouvoir tester les temps de rendu de l'application selon les rĂ©seaux.