Modern browsers support native image lazy loading by loading="lazy" attribute!
See: https://caniuse.com/loading-lazy-attr
Since Drupal 9.1 this is also done by default in Drupal: https://www.drupal.org/node/3173719
To add this attribute to your Drupal 7 projects, you can use the following preprocess hook in your themes template.php (or module):
/**
* Implements HOOK_preprocess_image.
*
* @param array $variables
*/
function THEMENAME_preprocess_image(&$variables) {
// Add lazy loading attribute to all images:
$variables['attributes']['loading'] = 'lazy';
}