Перейти к содержимому

Загрузка ресурсов в JavaScript: onload и onerror

В динамичном мире веб-разработки освоение JavaScript является ключевым шагом для улучшения функциональности сайта и взаимодействия с пользователем. Важным аспектом работы с JavaScript, который должен понимать каждый разработчик, является управление загрузкой ресурсов. В этом руководстве мы подробно рассмотрим методы onload и onerror, приводя понятные примеры и практические советы для эффективной работы с такими ресурсами, как изображения, скрипты и многое другое.

Управление загрузкой ресурсов с помощью события onload

Что такое событие onload?

Событие onload в JavaScript срабатывает, когда ресурс полностью загружен. Это относится к изображениям, скриптам, таблицам стилей и другим медиафайлам. Оно особенно полезно, когда какие-либо действия должны выполняться только после полной загрузки ресурсов.

Пример: Отображение изображения после полной загрузки

Для наглядности рассмотрим сценарий, в котором вам нужно отобразить изображение только после его полной загрузки, чтобы избежать показа неполного или поврежденного изображения.


html
<div>Here you see the w3docs logo when the page is loaded.</div>
<br />
<div id="imageContainer" style="background-color: grey;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
    var img = new Image();
    img.onload = function() {
        document.getElementById('imageContainer').appendChild(img);
    };
    img.src = 'https://www.w3docs.com/build/images/logo-color-w3.png';
});
</script>

Этот скрипт гарантирует, что изображение будет добавлено в div #imageContainer только после его полной загрузки, что улучшает пользовательский опыт за счет предотвращения отображения неполного изображения.

Использование события onerror для обработки ошибок

Что такое событие onerror?

Событие onerror необходимо для создания надежных веб-приложений. Оно срабатывает при возникновении ошибки во время загрузки внешнего ресурса, такого как скрипт или изображение. Это событие критически важно для корректной обработки ошибок и обеспечения непрерывности пользовательского опыта.

Пример: Обработка ошибок при неудачной загрузке изображения

Представьте сценарий, когда изображение не загружается из-за битой ссылки или проблемы на сервере. Используя событие onerror, вы можете предложить запасной вариант или уведомить пользователя. В следующем примере вы увидите настроенное нами предупреждение об ошибке сразу после открытия страницы «Попробуйте сами», поскольку указанная ссылка на изображение не является реальной.


html
<div>If there was no error, you could see an image below. But it's a broken link!</div>
<br />
<div id="imageContainer" style="background-color: grey;"></div>
<script>
const img = new Image();
const imageContainer = document.getElementById('imageContainer');
img.onerror = function() {
    imageContainer.innerHTML = 'An error happened.';
};
img.onload = function() {
    imageContainer.appendChild(img);
};
img.src = 'https://www.w3docs.com/build/images/broken-link.png';
</script>

В этом примере, если изображение не загружается, пользователь получает соответствующее сообщение, что улучшает пользовательский опыт за счет прозрачной обработки ошибки.

Пример: Загрузка скрипта или таблицы стилей

Тот же подход применяется к элементам <script> и <link>. Вы можете создавать их динамически и назначать обработчики onload/onerror:

html
<script>
function loadScript(url) {
    const script = document.createElement('script');
    script.src = url;
    script.onload = () => console.log('Script loaded successfully');
    script.onerror = () => console.error('Failed to load script');
    document.head.appendChild(script);
}
loadScript('https://example.com/app.js');

function loadStylesheet(url) {
    const link = document.createElement('link');
    link.rel = 'stylesheet';
    link.href = url;
    link.onload = () => console.log('Stylesheet loaded successfully');
    link.onerror = () => console.error('Failed to load stylesheet');
    document.head.appendChild(link);
}
loadStylesheet('https://example.com/styles.css');
</script>

Оптимизация производительности веб-страниц с помощью обработки событий

Оптимизация производительности веб-страниц включает управление очередностью загрузки ресурсов и корректную обработку сбоев. События onload и onerror особенно ценны для динамической загрузки ресурсов. Вместо жесткого прописывания всех ресурсов в HTML, вы можете загружать некритичные ресурсы по мере необходимости. Когда ресурс не удается загрузить, срабатывает событие onerror, что позволяет реализовать логику резервирования — например, заменить поврежденное изображение заглушкой или повторить запрос к не загрузившемуся скрипту. Комбинируя эти события с прогрессивным рендерингом, вы гарантируете, что критически важный контент отображается мгновенно, пока второстепенные ресурсы загружаются в фоновом режиме, обеспечивая плавный пользовательский опыт даже при слабом сетевом соединении.

Заключение

Понимание и внедрение событий onload и onerror в JavaScript являются фундаментальными для любого веб-разработчика, стремящегося повысить надежность и производительность своих веб-приложений. Эффективное использование этих событий позволяет разработчикам гарантировать эффективное управление ресурсами, улучшая как производительность, так и пользовательский опыт сайтов. Приведенные примеры служат отправной точкой для внедрения этих техник в различных сценариях, способствуя более глубокому пониманию и мастерству в области загрузки ресурсов в JavaScript.

Практика

Какие задачи решают события 'onload' и 'onerror' в JavaScript?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.