Chargement différé des images

Il y a quelques mois, @Johani a publié un excellent composant de thème pour charger les images de manière différée (lazy load). Cela signifie que les images ne sont chargées que lorsqu’elles apparaissent dans le champ de vision, plutôt que d’être chargées dès qu’elles apparaissent n’importe où sur la page, même si elles ne sont pas encore visibles pour l’utilisateur.

C’est une excellente fonctionnalité pour les forums où les sujets contiennent de nombreuses images, en particulier pour les utilisateurs ayant des connexions à bande passante limitée.

Si vous connaissez certains détails techniques de Discourse, vous pourriez vous demander : hé @eviltrout, Discourse ne fait-il pas déjà cela en quelque sorte ? Vous utilisez un défilement infini et les messages sont chargés et déchargés de la mémoire au fur et à mesure que l’utilisateur fait défiler la page. Oui, c’est exact ! Mais nous le faisons généralement par « blocs », et sur certains forums d’images, un seul message peut contenir des dizaines de grandes images. Pourquoi les charger toutes en une fois alors qu’elles ne sont pas encore visibles ?

Dans les dernières versions de Discourse, nous chargeons désormais les grandes images de manière différée ; aucun composant ou plugin supplémentaire n’est nécessaire. Si vous faites défiler la page très rapidement, vous verrez une version floue et basse résolution d’une grande image servant d’espace réservé. Cela ressemblera à ceci :

image

détails techniques : nous générons une image très, très petite de 10x10 pixels avec 32 couleurs et la stockons sous forme d’URI de données dans le message, ce que le navigateur redimensionne à la taille correcte — cela représente environ ~300 octets

Elle sera bientôt remplacée par l’image correcte :

Nous continuerons d’ajuster cette fonctionnalité au cours des prochaines semaines ; n’hésitez donc pas à fournir des commentaires et des remarques si vous en avez !

50 « J'aime »

Should improve page loading performance nicely, especially on slow connections. Thanks for this improvement!

8 « J'aime »

Awesome!

This is why I love Discourse - you keep adding stuff I didn’t think we needed! :+1:t3:

11 « J'aime »

One thing I’m looking into is applying this to non-lightboxed images, such as those included via oneboxing links.

One issue is it’s a little tricky to know when to apply the logic, since we don’t know the filesize of the destination image. Originally my plan was to append the filesize of images, but it turns out that is quite tricky since we don’t always have a downloaded copy of the image available.

I think I’ll have to come up with a magic width x height, maybe 300x300px or so, and if the image has dimensions larger than that it’ll be lazy loaded. We do have those dimensions available regardless of onebox or upload.

14 « J'aime »

Web bloat I find this article to be a good one on the subject of slow connections, do bear in mind that it has a very minimalistic theme, so don’t judge it by it’s cover so to speak. It might not quite be applicable here, but it’s always good to keep in mind.

I sometimes wish there were ways with Web APIs to detect if someone is on a connection where they pay a lot for bandwidth or one that’s slow.

2 « J'aime »

Probably fine, but to cover animated GIFs which are still quite common I would relax that to something like 200×200.

3 « J'aime »

Yeah I am not sure what the downside will be of going all the way down to 50x50, as long as we do not hit emojis it should be good. Even at 50x50 we may still save 25x if you don’t end up looking at the image

5 « J'aime »

I vote for 150×150 then, as we definitely want to steer clear of anything remotely emoji-like in size…

4 « J'aime »

I mean, previously, image greater than 4MB isn’t loaded properly (using mobile to access)

-edit-

1 « J'aime »

That is completely unrelated. Max allowed image size is controlled in site settings. We already lightbox and thumbnail all images that are posted above a certain size. This is about topics with dozens or hundreds of images in them, not the size of any single image.

7 « J'aime »

I just want to say thank you for including this feature.

6 « J'aime »

Here’s some improvements:

10 « J'aime »

Man, I thought I was going crazy. This feature is great for low bandwidth, but now i’m seeing this lazy loading all over the place when I am scrolling our forum. I have so much bandwidth and I’m on a computer. Maybe there should be some sort of buffer around areas you can’t see that load right before you scroll to them? Maybe only for mobile?

1 « J'aime »
9 « J'aime »

It’s not just about your bandwidth, it’s about unnecessarily loading the server/CDN.

As @falco linked above, the trend is towards more just-in-time asset delivery.

Is there anyway that the admin can still play with CSS to modify the lazy loading behavior? The somewhat unintended consequence is that some users are now saying that pictures load on demand more slowly compared to before. I was wondering if its possible to modify the CSS such that instead of either loading all pictures in the next e.g. 20 posts (prior behavior) or pictures only in the current post (current behavior), that we do something in the middle, e.g. load pictures in the next e.g. 3-5 posts.

1 « J'aime »

It’s done with Javascript right now. There is no way to adjust it currently, but we might consider it in the future based on feedback.

4 « J'aime »

Je rencontre de plus en plus de problèmes avec le chargement différé récemment ; je vois ce message au moins une fois par jour. C’est difficile à reproduire, mais je me demande s’il y a quelque chose que je puisse faire pour diagnostiquer le problème quand cela se produit ? La seule information pertinente dans les journaux est la suivante :

Uncaught [object Object]
Url: https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js
Line: 1
Column: 267440
Window Location: https://community.naturephotographers.network/t/twin-cuties/12785

1 « J'aime »

Avez-vous le même problème avec les thèmes et les extensions désactivés ? Avez-vous essayé en mode sans échec ?

1 « J'aime »

C’est très difficile à reproduire. Je suis passé en mode sans échec et j’ai dû parcourir une trentaine de sujets avant d’enfin tomber sur celui qui ne fonctionnait pas. Cette fois, aucune erreur connexe dans les journaux. J’essaie d’éviter les temps d’arrêt liés au test de chaque plugin, c’est pourquoi j’espère qu’il y a peut-être des indices ailleurs pour déterminer quel est le coupable. Merci, Jeff.

3 « J'aime »