Use native lazy image loading where available

What does this MR do?

This adds for browsers with native image lazy loading support a faster way of loading and updating images. As we don't wait for the main JS bundle to load but rather convert the images to be handled by the browser through loading="lazy". So all browsers that support it also don't need an intersection observer anymore (https://caniuse.com/#feat=loading-lazy-attr).

Based on https://web.dev/native-lazy-loading/

  • The newly added app/views/layouts/_img_loader.html.haml is inline JS so that we immediately execute the image updates and don't wait until the main.js bundle is initialized
  • The LazyLoader class is still needed for modern browsers as it still will initialize an MutationObserver
  • We can't already load the LazyLoader class as it has an Lodash dependency

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team

Closes #227014 (closed)

Edited by Tim Zallmann

Merge request reports

Loading