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
<img src="images/0.png" lsrc="images/1.jpg" class="lazy-image"><p>Здесь в атрибут<em>src</em>записано не само изображение, а заглушка - небольшой чёрный квадрат. Настоящий путь указывается в атрибут<em>lsrc</em>. Оттуда его будет получать скрипт:</p>
18
<img src="images/0.png" lsrc="images/1.jpg" class="lazy-image"><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 < images.length; i++) //Обход всех изображений { var imagePath = images[i].getAttribute("lsrc"); //Получение пути к настоящему изображению if(images[i].getAttribute("src") != imagePath) //Если изображение уже загрузилось, то его не трогаем { if(window.pageYOffset >= 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 < images.length; i++) //Обход всех изображений { var imagePath = images[i].getAttribute("lsrc"); //Получение пути к настоящему изображению if(images[i].getAttribute("src") != imagePath) //Если изображение уже загрузилось, то его не трогаем { if(window.pageYOffset >= images[i].offsetTop - offset) //Если пользователь доскроллил до изображения на расстояние отступа { images[i].setAttribute("src", imagePath); //Указываем путь настоящего изображения } } } }<p>Если вы используете фреймворки или библиотеки<a>JavaScript</a>, то они должны находиться на сайте, а не где-то в другом месте.</p>
20
<p>То есть подключать их нужно не так:</p>
20
<p>То есть подключать их нужно не так:</p>
21
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script><p>А вот так:</p>
21
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script><p>А вот так:</p>
22
<script src="jquery-3.4.1.min.js"></script><p>Это увеличит скорость, потому что браузеру не придётся скакать по разным серверам. Тем более с сервера кроме вас эту библиотеку подключили ещё на тысячи сайтов, на которые заходят тысячи пользователей.</p>
22
<script src="jquery-3.4.1.min.js"></script><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
<script src="useless.js" async></script><p>Атрибут<em>async</em>скажет браузеру, что скрипт можно загружать параллельно с остальным контентом.</p>
34
<script src="useless.js" async></script><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>