Чтобы улучшить страницы своего веб-сайта, Pagespeed Insight предлагает использовать отложенные изображения вместо ленивых изображений jquaery. Я сделал попытку по recommandations из другой темыImage defer script вместо ленивого скрипта изображения приводит к неопределенному смещению?
Reference Topic on stackoverflow
Я использую OpenCart 2, и я попытался изменить код следующим образом:
Я создал небольшой 1x1 пиксель GIF и загрузили это как изображение/imgdefer.gif.
Я разместил javascript-файл в начале моего шаблона header.tpl, который используется для всех страниц. Скрипт полностью соответствует инструкциям, которые я нашел в stackoverflow (ссылка sse выше) и varvy.com. Javascript используется:
<script> function init() { var imgDefer = document.getElementsByTagName('img'); for (var i=0; i<imgDefer.length; i++) { if(imgDefer[i].getAttribute('data-src')) { imgDefer[i].setAttribute('src',imgDefer[i].getAttribute('data-src')); } } } window.onload = init; </script>
Я заменил ленивый код изображения в шаблоне main.tpl по сценарию предложенного сценария в статье, так
Существующий сценарий Ленивый Изображение:
<a href="<?php echo $submenu_item['href']; ?>">
<img width="<?php echo $submenu_item['image_width']; ?>" height="<?php echo $submenu_item['image_height']; ?>" class="lazy" src="<?php echo $submenu_item['dummy']; ?>" data-src="<?php echo $submenu_item['image']; ?>" alt="<?php echo $submenu_item['name']; ?>"/>
</a>
был заменен
<a href="<?php echo $submenu_item['href']; ?>">
<img width="<?php echo $submenu_item['image_width']; ?>" height="<?php echo $submenu_item['image_height']; ?>" src="image/imgdefer.gif" data-src="<?php echo $submenu_item['image']; ?>" alt="<?php echo $submenu_item['name']; ?>"/>
</a>
После применения изменений кода в пунктах 1-3 выше я получаю уведомление о недостающем смещении в файле vq2_system_modification_system_library_response.php в строке 115. Ниже приведена соответствующая часть кода. Это первая команда if (count ($ info) == 3 & & $ info 1 [0] == 'src') {), которая генерирует ошибку.
preg_match_all('/<img[^>]+>/i', $this->output, $result); $img = array(); foreach($result[0] as $img_tag) { preg_match_all('/(width|height|src)=("[^"]*")/i',$img_tag, $img[$img_tag]); } foreach ($img as $k => $info) { if (count($info) == 3 && $info[1][0] == 'src') { //if (curl_init(str_replace('"', '', $info[2][0]))) { $imgfile = str_replace('"', '', $info[2][0]); $imgfile = str_replace(HTTP_SERVER, DIR_IMAGE . '../', $imgfile); $imgfile = str_replace(HTTPS_SERVER, DIR_IMAGE . '../', $imgfile); if (file_exists($imgfile)) { $image_info = getImageSize(str_replace('"', '', $imgfile)); $k = trim($k, '/>'); $k = trim($k, '>'); $this->output = str_replace($k, ($k . ' ' . $image_info[3]), $this->output); } } }
Я сделал некоторые моделирования и у меня сложилось впечатление, что
$info[1][0]
иногда дают 0 в качестве значения (пустой массив?).
Есть ли предложения, которые могут помочь мне и указать мне правильное направление? Это правильный способ реализации отложенных изображений?
UPDATE: Я применил предложение Мцыри, ниже которого, казалось, очень логично, но та же ошибка «Примечание: Undefined смещение: 0 в vqmod \ vqcache \ vq2-system_modification_system_library_response.php на линии 115» сохраняется. Только когда я удалю файл сценария из пункта 2 из моего header.tpl, ошибка исчезла.
Возможно ли, что мои отложенные изображения начнут загружаться позже (слишком поздно) и что код в пункте 4 не может быть выполнен надлежащим образом в момент его запроса? Код в пункте 4 используется для предоставления атрибутов изображения и высоты для всех изображений на странице в соответствии с рекомендациями google pagespeed?
Как решить? Я уже несколько дней ломаю голову над этой проблемой, поэтому любое сугушество будет очень оценено.
Я должен добавить, что есть и другие теги - не ленивая загрузка - на этой странице, но я удалил все эти теги по одному и независимо от того, какой img-тэг я удаляю, предупреждение о предупреждении сохраняется ... с уважением,
SabKo