HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#Руководства</a></p>
1 <p><a>#Руководства</a></p>
2 <ul><li>25 ноя 2019</li>
2 <ul><li>25 ноя 2019</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><h2>Как заставить сайт грузиться быстрее</h2>
4 </ul><h2>Как заставить сайт грузиться быстрее</h2>
5 <p>Веб-разработчик должен позаботиться о том, чтобы пользователи не сошли с ума, пока ждут, что сайт загрузится. Рассказываем, как это сделать.</p>
5 <p>Веб-разработчик должен позаботиться о том, чтобы пользователи не сошли с ума, пока ждут, что сайт загрузится. Рассказываем, как это сделать.</p>
6 <p> vlada_maestro / shutterstock</p>
6 <p> vlada_maestro / shutterstock</p>
7 <p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
7 <p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
8 <p>Прошли времена, когда нужно было ждать несколько минут, чтобы открыть страницу без картинок. Сейчас<a>большинство пользователей закроет сайт</a>, если он не загружается уже дольше трёх секунд.</p>
8 <p>Прошли времена, когда нужно было ждать несколько минут, чтобы открыть страницу без картинок. Сейчас<a>большинство пользователей закроет сайт</a>, если он не загружается уже дольше трёх секунд.</p>
9 <p>Мы подготовили несколько рекомендаций, которые помогут ускорить загрузку сайта.</p>
9 <p>Мы подготовили несколько рекомендаций, которые помогут ускорить загрузку сайта.</p>
10 <p>Не обязательно загружать изображения в FullHD, чтобы сайт смотрелся красиво. В большинстве случаев можно сжать картинку без заметной для глаза потери качества.</p>
10 <p>Не обязательно загружать изображения в FullHD, чтобы сайт смотрелся красиво. В большинстве случаев можно сжать картинку без заметной для глаза потери качества.</p>
11 <p>Сложно заметить разницу между двумя частями этого изображения, поэтому не стоит загружать на сайт картинки в полном размере.</p>
11 <p>Сложно заметить разницу между двумя частями этого изображения, поэтому не стоит загружать на сайт картинки в полном размере.</p>
12 <p>Изображения в GIF или JPG весят меньше, чем аналогичные в PNG. Также есть более современные форматы, которые, не теряя качества, могут быть легче, чем GIF и JPG. Например, иконки можно заменить на SVG - это формат векторных изображений, которые отрисовываются прямо в браузере.</p>
12 <p>Изображения в GIF или JPG весят меньше, чем аналогичные в PNG. Также есть более современные форматы, которые, не теряя качества, могут быть легче, чем GIF и JPG. Например, иконки можно заменить на SVG - это формат векторных изображений, которые отрисовываются прямо в браузере.</p>
13 <p>Размер SVG-файла может быть менее 1 КБ, но при этом на нём не будет ни одного артефакта сжатия. Также он не размажется, даже если указать разрешение в 4К.</p>
13 <p>Размер SVG-файла может быть менее 1 КБ, но при этом на нём не будет ни одного артефакта сжатия. Также он не размажется, даже если указать разрешение в 4К.</p>
14 <p>Есть ещё<em>webp</em>или<em>webm</em>(видео) и другие форматы. Однако стоит учитывать, что не все браузеры их поддерживают. На "Википедии" есть<a>актуальный список форматов</a>, которые поддерживаются разными браузерами.</p>
14 <p>Есть ещё<em>webp</em>или<em>webm</em>(видео) и другие форматы. Однако стоит учитывать, что не все браузеры их поддерживают. На "Википедии" есть<a>актуальный список форматов</a>, которые поддерживаются разными браузерами.</p>
15 <p>Ленивая загрузка - это когда изображения или видео загружаются не сразу, а постепенно. В большинстве случаев - перед тем как пользователь до них доберётся.</p>
15 <p>Ленивая загрузка - это когда изображения или видео загружаются не сразу, а постепенно. В большинстве случаев - перед тем как пользователь до них доберётся.</p>
16 <p>Так пользователю не придётся ждать загрузки всех ресурсов, чтобы начать пользоваться сайтом.</p>
16 <p>Так пользователю не придётся ждать загрузки всех ресурсов, чтобы начать пользоваться сайтом.</p>
17 <p>Чтобы добавить ленивую загрузку на сайт, нужно вставлять картинки с помощью такого кода:</p>
17 <p>Чтобы добавить ленивую загрузку на сайт, нужно вставлять картинки с помощью такого кода:</p>
18 &lt;img src="images/0.png" lsrc="images/1.jpg" class="lazy-image"&gt;<p>Здесь в атрибут<em>src</em>записано не само изображение, а заглушка - небольшой чёрный квадрат. Настоящий путь указывается в атрибут<em>lsrc</em>. Оттуда его будет получать скрипт:</p>
18 &lt;img src="images/0.png" lsrc="images/1.jpg" class="lazy-image"&gt;<p>Здесь в атрибут<em>src</em>записано не само изображение, а заглушка - небольшой чёрный квадрат. Настоящий путь указывается в атрибут<em>lsrc</em>. Оттуда его будет получать скрипт:</p>
19 var images = document.getElementsByClassName("lazy-image"); //Получение всех изображений, которые должны подгружаться window.addEventListener("scroll", function () { OnScroll(); }); //Вызов функции OnScroll() каждый раз, когда пользователь скроллит страницу function OnScroll() { var offset = window.innerHeight; //Расстояние, на котором будет начинаться загрузка изображений. В этом случае расстояние будет равняться высоте окна for(var i = 0; i &lt; images.length; i++) //Обход всех изображений { var imagePath = images[i].getAttribute("lsrc"); //Получение пути к настоящему изображению if(images[i].getAttribute("src") != imagePath) //Если изображение уже загрузилось, то его не трогаем { if(window.pageYOffset &gt;= images[i].offsetTop - offset) //Если пользователь доскроллил до изображения на расстояние отступа { images[i].setAttribute("src", imagePath); //Указываем путь настоящего изображения } } } }<p>Если вы используете фреймворки или библиотеки<a>JavaScript</a>, то они должны находиться на сайте, а не где-то в другом месте.</p>
19 var images = document.getElementsByClassName("lazy-image"); //Получение всех изображений, которые должны подгружаться window.addEventListener("scroll", function () { OnScroll(); }); //Вызов функции OnScroll() каждый раз, когда пользователь скроллит страницу function OnScroll() { var offset = window.innerHeight; //Расстояние, на котором будет начинаться загрузка изображений. В этом случае расстояние будет равняться высоте окна for(var i = 0; i &lt; images.length; i++) //Обход всех изображений { var imagePath = images[i].getAttribute("lsrc"); //Получение пути к настоящему изображению if(images[i].getAttribute("src") != imagePath) //Если изображение уже загрузилось, то его не трогаем { if(window.pageYOffset &gt;= images[i].offsetTop - offset) //Если пользователь доскроллил до изображения на расстояние отступа { images[i].setAttribute("src", imagePath); //Указываем путь настоящего изображения } } } }<p>Если вы используете фреймворки или библиотеки<a>JavaScript</a>, то они должны находиться на сайте, а не где-то в другом месте.</p>
20 <p>То есть подключать их нужно не так:</p>
20 <p>То есть подключать их нужно не так:</p>
21 &lt;script src="https://code.jquery.com/jquery-3.4.1.min.js"&gt;&lt;/script&gt;<p>А вот так:</p>
21 &lt;script src="https://code.jquery.com/jquery-3.4.1.min.js"&gt;&lt;/script&gt;<p>А вот так:</p>
22 &lt;script src="jquery-3.4.1.min.js"&gt;&lt;/script&gt;<p>Это увеличит скорость, потому что браузеру не придётся скакать по разным серверам. Тем более с сервера кроме вас эту библиотеку подключили ещё на тысячи сайтов, на которые заходят тысячи пользователей.</p>
22 &lt;script src="jquery-3.4.1.min.js"&gt;&lt;/script&gt;<p>Это увеличит скорость, потому что браузеру не придётся скакать по разным серверам. Тем более с сервера кроме вас эту библиотеку подключили ещё на тысячи сайтов, на которые заходят тысячи пользователей.</p>
23 <p>То же самое касается видео, изображений, документов и прочего.</p>
23 <p>То же самое касается видео, изображений, документов и прочего.</p>
24 <p>Большие скрипты можно минифицировать, то есть удалить всё, что не влияет на их работу. Например, вот так выглядит полный код:</p>
24 <p>Большие скрипты можно минифицировать, то есть удалить всё, что не влияет на их работу. Например, вот так выглядит полный код:</p>
25 function Sum (a, b) //Функция сложения двух чисел, которая очень нужна для этого сайта. { return a + b; //Как бы мы обошлись без этого? }<p>Когда браузер запускает этот скрипт, он удаляет все комментарии, табуляцию и ненужные пробелы. То есть для него важно только это:</p>
25 function Sum (a, b) //Функция сложения двух чисел, которая очень нужна для этого сайта. { return a + b; //Как бы мы обошлись без этого? }<p>Когда браузер запускает этот скрипт, он удаляет все комментарии, табуляцию и ненужные пробелы. То есть для него важно только это:</p>
26 function Sum(a,b){return a+b;}<p>Можно удалить всё это заранее, чтобы увеличить скорость загрузки. Например, если скрипт весил 45 КБ, то после минификации его размер сократится до 32 КБ. То же самое можно сделать с файлами стилей и <a>HTML</a>-страницами.</p>
26 function Sum(a,b){return a+b;}<p>Можно удалить всё это заранее, чтобы увеличить скорость загрузки. Например, если скрипт весил 45 КБ, то после минификации его размер сократится до 32 КБ. То же самое можно сделать с файлами стилей и <a>HTML</a>-страницами.</p>
27 <p>Во время разработки удобно разделять функционал сайта на несколько скриптов:</p>
27 <p>Во время разработки удобно разделять функционал сайта на несколько скриптов:</p>
28 <ul><li><em>menu.js</em>отвечает за меню;</li>
28 <ul><li><em>menu.js</em>отвечает за меню;</li>
29 <li><em>scrolling.js</em>добавляет плавную прокрутку;</li>
29 <li><em>scrolling.js</em>добавляет плавную прокрутку;</li>
30 <li><em>lazyloading.js</em>подключает ленивую загрузку и так далее.</li>
30 <li><em>lazyloading.js</em>подключает ленивую загрузку и так далее.</li>
31 </ul><p>Браузеру приходится закачивать каждый файл отдельно. Поэтому время уходит не только на саму загрузку, но и на отправку запросов.</p>
31 </ul><p>Браузеру приходится закачивать каждый файл отдельно. Поэтому время уходит не только на саму загрузку, но и на отправку запросов.</p>
32 <p>Даже если объединённый скрипт получится большим, он всё равно загрузится быстрее, чем несколько маленьких. Исключение стоит сделать для скриптов, загрузка которых не сильно влияет на работу сайта, - их можно вынести отдельно.</p>
32 <p>Даже если объединённый скрипт получится большим, он всё равно загрузится быстрее, чем несколько маленьких. Исключение стоит сделать для скриптов, загрузка которых не сильно влияет на работу сайта, - их можно вынести отдельно.</p>
33 <p>Убедитесь, что скрипты не препятствуют загрузке сайта, если пользователь ничего не потеряет от их отсутствия. Это касается метрик и всяких красивостей. Для этого сделайте их подключение таким:</p>
33 <p>Убедитесь, что скрипты не препятствуют загрузке сайта, если пользователь ничего не потеряет от их отсутствия. Это касается метрик и всяких красивостей. Для этого сделайте их подключение таким:</p>
34 &lt;script src="useless.js" async&gt;&lt;/script&gt;<p>Атрибут<em>async</em>скажет браузеру, что скрипт можно загружать параллельно с остальным контентом.</p>
34 &lt;script src="useless.js" async&gt;&lt;/script&gt;<p>Атрибут<em>async</em>скажет браузеру, что скрипт можно загружать параллельно с остальным контентом.</p>
35 <p>Если вы выполнили все советы, но сайт всё ещё грузится долго, добавьте индикатор загрузки. Это даст пользователям знать, что сайт жив и есть смысл немного подождать.</p>
35 <p>Если вы выполнили все советы, но сайт всё ещё грузится долго, добавьте индикатор загрузки. Это даст пользователям знать, что сайт жив и есть смысл немного подождать.</p>
36 <p>Скорость работы своего сайта вы можете проверить с помощью инструмента<a>PageSpeed от Google</a>. Там же вы найдёте дополнительные рекомендации.</p>
36 <p>Скорость работы своего сайта вы можете проверить с помощью инструмента<a>PageSpeed от Google</a>. Там же вы найдёте дополнительные рекомендации.</p>
37 <p>Но лучшим вариантом будет создавать качественные сайты, на которых всё оптимизировано, используется кэширование и нет повторяющегося кода.</p>
37 <p>Но лучшим вариантом будет создавать качественные сайты, на которых всё оптимизировано, используется кэширование и нет повторяющегося кода.</p>
38 <a>Научитесь: Профессия Фронтенд-разработчик + ИИ Узнать больше</a>
38 <a>Научитесь: Профессия Фронтенд-разработчик + ИИ Узнать больше</a>