Вопрос или проблема
У меня большое видео на первом экране мобильной версии, и я не могу улучшить LCP.
Я не могу удалить видео, оно очень важно (по каким-то причинам). Я минимизировал и обрезал видео, теперь оно весит всего 126 кб.
Я добавил тег preload для видео в head.
<link rel="preload" href="/video/index_mobile.mp4" as="video" type="video/mp4" crossOrigin="anonymous" />
Я использую React + Next. Мой компонент React:
const HeroGraphic = ({ graphic_id }: HeroGraphProps) => {
const [currentVideo, setCurrentVideo] = useState<string | undefined>(undefined);
const [currentPoster, setCurrentPoster] = useState<string | undefined>(undefined);
const [loaded, setLoaded] = useState(false);
const updateVideoSource = () => {
const video = videoPaths[graphic_id];
if (video) {
const isMobile = window.innerWidth <= 767;
setCurrentVideo(isMobile ? video.mobile : video.desktop);
setCurrentPoster(isMobile ? video.poster_mobile : video.poster);
}
};
useEffect(() => {
updateVideoSource();
window.addEventListener('resize', updateVideoSource);
return () => {
window.removeEventListener('resize', updateVideoSource);
};
}, [graphic_id]);
if (!currentVideo) {
return null;
}
return (
<div className={clsx(css.graphic, css[graphic_id])}>
<div className={clsx(css.video, loaded && css.loaded)}>
<video
poster={currentPoster}
style={{
objectFit: 'cover',
width: '100%',
height: '100%',
display: 'block',
position: 'relative',
zIndex: 0,
}}
autoPlay
playsInline
src={currentVideo}
preload="metadata"
loop
muted
onLoadStart={() => setLoaded(true)}
/>
</div>
</div>
);
};
Компонент расположен как можно выше, почти после тега main.
Я не понимаю, что еще могу сделать.
.
Ответ или решение
Для повышения показателя Largest Contentful Paint (LCP) в вашем случае с использованием большого видео на первой экране мобильного устройства, необходимо рассмотреть несколько аспектов оптимизации.
1. Оптимизация видео
-
Формат видео: Убедитесь, что видео закодировано в современных форматах, таких как H.264 или H.265, которые обеспечивают хорошее качество при меньшем размере файла.
-
Разрешение видео: Вам стоит уменьшить разрешение видео для мобильных устройств. Обычно 480p или 720p может быть достаточно без потери качества на небольших экранах.
-
Сжимайте видео: Надежные инструменты для сжатия видео, такие как HandBrake или FFmpeg, могут помочь значительно уменьшить размер файла без видимой потери качества.
2. Использование подходящих тегов и атрибутов
-
Атрибут preload: Вы уже используете тег
<link rel="preload">
, но в теге видео лучше использовать атрибутpreload="auto"
вместоpreload="metadata"
, так как это поможет загружать видео более эффективно. -
Постер: Убедитесь, что изображение для атрибута
poster
имеет оптимизированный размер и вес. Это изображение будет загружаться до того, как начнётся загрузка самого видео, и играет важную роль в пользовательском опыте.
<video
poster={currentPoster}
preload="auto"
...
/>
3. Уменьшение рендеринга
-
Lazy loading: Если есть возможность, попробуйте отложить загрузку видео до тех пор, пока это не будет необходимо. Например, если видео не является фокусом пользователя, используйте технику "ледяного экрана" и подгружайте видео только при взаимодействии.
-
CSS и JS: Убедитесь, что вы минимизируете и асинхронно загружаете CSS и JavaScript, чтобы не блокировать рендеринг страницы.
4. Кеширование и CDN
-
Используйте CDN: Если вы еще не используете Content Delivery Network (CDN), это может значительно улучшить время загрузки, так как пользователи получат контент с ближайшего сервера.
-
Кеширование: Настройте правильные заголовки кеширования для вашего видео, чтобы браузеры могли хранить его локально для последующих загрузок.
5. Анализ производительности
-
Инструменты анализа: Используйте инструменты, такие как Google PageSpeed Insights или Lighthouse, чтобы получать рекомендации по производительности и выявлять узкие места.
-
Мониторинг производительности: Внедрите мониторинг LCP в своей системе, чтобы отслеживать изменения и понимать, какие оптимизации работают, а какие нет.
Заключение
С учетом ваших требований и текущей ситуации с видео, оптимизация LCP будет зависеть от детального анализа каждого элемента на странице. Реализация предложенных рекомендаций, таких как оптимизация видео, использование правильных тегов и атрибутов, уменьшение рендеринга, а также внедрение кеширования и использования CDN помогут улучшить пользовательский опыт и показатели LCP. Не забывайте регулярно контролировать результаты и обновлять подходы в соответствии с изменениями в технологиях и ожиданиях пользователя.