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.hamlis 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
LazyLoaderclass as it has an Lodash dependency
Does this MR meet the acceptance criteria?
Conformity
-
Changelog entry -
Documentation (if required) -
Code review guidelines -
Merge request performance guidelines -
Style guides -
Database guides -
Separation of EE specific content
Availability and Testing
-
Review and add/update tests for this feature/bug. Consider all test levels. See the Test Planning Process. -
Tested in all supported browsers -
Informed Infrastructure department of a default or new setting change, if applicable per definition of done
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