Возможности JavaScript для веб и приложений

Что можно сделать с помощью javascript

Что можно сделать с помощью javascript

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

Одной из самых заметных особенностей является его способность работать как на фронтенде, так и на бэкенде. Node.js открыл новые горизонты для серверной разработки, позволяя создавать высокоэффективные приложения с минимальными задержками. Используя асинхронные операции и событийный цикл, Node.js позволяет обрабатывать запросы с максимальной производительностью, что делает его идеальным выбором для создания масштабируемых приложений.

На фронтенде JavaScript предлагает все больше инструментов для улучшения пользовательского опыта. Фреймворки, такие как React, Vue и Angular, позволяют строить динамичные и быстрые интерфейсы с минимальными затратами на ресурсы. В комбинации с современными библиотеками и API, такими как WebSockets, JavaScript может обеспечить мгновенную обратную связь с пользователем, создавая тем самым уникальные возможности для реализации сложных веб-приложений.

Также стоит отметить развитие JavaScript в сфере мобильной разработки. Благодаря платформам как React Native и Ionic, разработчики могут создавать кросс-платформенные приложения, которые не уступают по производительности нативным решениям. Это значительно ускоряет процесс разработки, позволяя одновременно поддерживать iOS и Android версии одного приложения.

Как использовать JavaScript для динамического изменения контента на веб-страницах

Как использовать JavaScript для динамического изменения контента на веб-страницах

JavaScript позволяет изменять содержание веб-страниц без перезагрузки, создавая интерактивный опыт для пользователей. Это достигается с помощью манипуляций с DOM (Document Object Model) и событий.

Основные методы для динамического изменения контента:

  • innerHTML – позволяет изменять HTML-код внутри элемента. Пример:

document.getElementById("content").innerHTML = "Новый контент";
  • textContent – изменяет только текст внутри элемента, не касаясь HTML. Пример:

document.getElementById("content").textContent = "Текст без HTML";
  • createElement и appendChild – для создания и добавления новых элементов. Пример:

let newElement = document.createElement("p");
newElement.textContent = "Новый параграф";
document.body.appendChild(newElement);

Для работы с событиями и изменения контента на их основе используются обработчики событий. Например, при клике на кнопку можно менять текст или внешний вид элемента:


document.getElementById("btn").addEventListener("click", function() {
document.getElementById("content").textContent = "Текст изменен!";
});

Еще один эффективный подход – использование AJAX для загрузки данных с сервера и динамического обновления контента без перезагрузки страницы. Это позволяет создавать приложения, похожие на десктопные, с быстрым откликом.

  • Для отправки запроса:

let xhr = new XMLHttpRequest();
xhr.open("GET", "data.json", true);
xhr.onload = function() {
if (xhr.status == 200) {
let data = JSON.parse(xhr.responseText);
document.getElementById("content").textContent = data.message;
}
};
xhr.send();

Использование фреймворков, таких как React, Vue или Angular, добавляет еще больше возможностей для динамического изменения контента. Однако, для базового использования достаточно стандартных функций JavaScript и возможностей браузера.

  • Важно: Для эффективного изменения контента без ошибок следует регулярно очищать события и отслеживать изменения состояния DOM.

Преимущества JavaScript в разработке одностраничных приложений (SPA)

Преимущества JavaScript в разработке одностраничных приложений (SPA)

Одностраничные приложения (SPA) используют JavaScript для динамической загрузки контента без перезагрузки страницы, что значительно ускоряет взаимодействие с пользователем. Основные преимущества использования JavaScript в SPA связаны с производительностью и удобством разработки.

Во-первых, благодаря асинхронной загрузке данных с использованием AJAX или Fetch API, приложения на JavaScript могут обновлять только необходимые части страницы, не затрагивая остальную структуру. Это снижает время отклика и позволяет избежать полных перезагрузок, улучшая пользовательский опыт.

Во-вторых, библиотеки и фреймворки, такие как React, Vue.js или Angular, предлагают высокоуровневые абстракции для создания компонентов, которые эффективно управляют состоянием приложения и рендерят только изменённые данные. Это делает процесс разработки более организованным и масштабируемым, особенно при работе с большими проектами.

Кроме того, JavaScript позволяет легко интегрировать с API и внешними сервисами, что важно для SPA. Взаимодействие с сервером происходит без необходимости полной загрузки страницы, что позволяет выполнять операции, такие как авторизация, обновление данных и обработка запросов, с минимальными задержками.

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

Наконец, использование JavaScript в SPA облегчает внедрение Progressive Web Apps (PWA) – приложений, которые могут работать в оффлайн-режиме и использовать возможности мобильных устройств, такие как push-уведомления. JavaScript позволяет интегрировать эти возможности без необходимости разработки отдельных приложений для разных платформ.

Использование JavaScript для интеграции с API сторонних сервисов

Использование JavaScript для интеграции с API сторонних сервисов

Пример простого GET-запроса для получения данных из API:


fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

Для более сложных операций, таких как отправка данных или взаимодействие с сервисами, требующими аутентификации, можно использовать POST запросы. Важно правильно настроить заголовки запроса, включая Content-Type и авторизационные токены, если они необходимы. Пример отправки данных с использованием POST-запроса:


fetch('https://api.example.com/submit', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({ key: 'value' })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

Для удобной работы с API сторонних сервисов также можно использовать библиотеки, такие как Axios, которая упрощает обработку запросов и ответов, а также позволяет настроить перехватчики ошибок и настраиваемые таймауты.

Пример интеграции с помощью Axios:


axios.get('https://api.example.com/data', {
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
})
.then(response => console.log(response.data))
.catch(error => console.error('Error:', error));

Также стоит обратить внимание на кросс-доменные запросы (CORS). Современные браузеры блокируют запросы между разными доменами по умолчанию, если сервер не поддерживает CORS. В таких случаях необходимо либо настраивать сервер, либо использовать прокси-сервер для обхода ограничений.

Для работы с REST API следует соблюдать принципы RESTful архитектуры, чтобы гарантировать предсказуемость запросов. Например, методы GET и POST должны использоваться для получения и отправки данных соответственно, а PUT и DELETE – для обновления и удаления ресурсов.

Для улучшения пользовательского опыта важно обрабатывать ошибки API. Например, в случае получения ошибки 404 или 500 можно отображать соответствующие сообщения, информируя пользователя о проблемах с сервером или отсутствии данных.

Как с помощью JavaScript реализовать асинхронные запросы и обработку данных

Асинхронные запросы – ключевая возможность JavaScript для работы с веб-приложениями и динамическими интерфейсами. Для реализации асинхронных операций чаще всего используют механизмы, такие как XMLHttpRequest, Fetch API и async/await. Каждый из них имеет свои особенности и применяется в зависимости от требований проекта.

XMLHttpRequest – это старый, но всё ещё используемый метод для отправки HTTP-запросов и обработки ответов. Этот объект требует явного задания колбэк-функций для обработки успешного завершения запроса и ошибок. Пример использования:

let xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let data = JSON.parse(xhr.responseText);
console.log(data);
}
};
xhr.send();

Однако использование XMLHttpRequest может привести к большому количеству повторяющегося кода и усложнять обработку ошибок, что делает его менее удобным для более сложных проектов.

Fetch API, представленный в современных браузерах, значительно упрощает работу с асинхронными запросами. Fetch возвращает промис, который позволяет проще управлять результатами запроса, используя .then() для обработки успешного ответа и .catch() для ошибок. Пример:

fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Ошибка:', error));

Fetch имеет несколько преимуществ перед XMLHttpRequest. Во-первых, это более чистый и удобный синтаксис с использованием промисов. Во-вторых, Fetch поддерживает более гибкие настройки, такие как возможность задавать метод, заголовки, параметры и тело запроса, что особенно полезно при работе с REST API.

Тем не менее, обработка асинхронных запросов с использованием промисов всё равно может выглядеть громоздко, особенно если требуется последовательная обработка нескольких запросов. В таких случаях удобным решением является использование async/await, синтаксиса, который был добавлен в ES2017. Этот синтаксис позволяет писать асинхронный код в виде, напоминающем синхронный, упрощая читаемость и структуру кода. Пример с async/await:

async function fetchData() {
try {
let response = await fetch('https://api.example.com/data');
let data = await response.json();
console.log(data);
} catch (error) {
console.error('Ошибка:', error);
}
}
fetchData();

Async/await значительно улучшает читаемость кода, особенно в случае сложных операций, требующих множественных асинхронных запросов или обработки ошибок. Важно помнить, что async/await работает только в функции, объявленной как асинхронная, и требует обработки исключений через try/catch.

При работе с асинхронными запросами важно учитывать принципы управления состоянием, такие как обработка ошибок, тайм-ауты, а также управление несколькими параллельными запросами. Для параллельных запросов можно использовать Promise.all(), что позволяет дождаться выполнения всех промисов одновременно:

async function fetchDataFromMultipleSources() {
try {
let [data1, data2] = await Promise.all([
fetch('https://api.example.com/data1').then(response => response.json()),
fetch('https://api.example.com/data2').then(response => response.json())
]);
console.log(data1, data2);
} catch (error) {
console.error('Ошибка при получении данных:', error);
}
}
fetchDataFromMultipleSources();

Помимо этого, важно учитывать, что асинхронная работа с данными требует эффективного использования кэширования и обработки сессионных данных, чтобы минимизировать нагрузку на сервер и ускорить отклик приложения. Для этих целей можно использовать LocalStorage или SessionStorage для хранения полученных данных на стороне клиента, особенно если данные не меняются часто.

Для надежной работы с асинхронными запросами рекомендуется использовать библиотеки, такие как Axios, которая оборачивает функционал Fetch API, предлагая удобные методы для работы с ошибками и упрощая конфигурацию запросов.

Роль JavaScript в создании интерактивных пользовательских интерфейсов

Роль JavaScript в создании интерактивных пользовательских интерфейсов

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

Одной из самых распространённых техник является манипуляция DOM (Document Object Model). JavaScript позволяет добавлять, удалять и изменять HTML-элементы в ответ на действия пользователя, такие как клики, прокрутка или ввод текста. Например, с помощью метода document.querySelector можно быстро получить доступ к любому элементу страницы и динамически изменять его свойства.

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

Анимации, а также плавные переходы между состояниями интерфейса также реализуются с помощью JavaScript. Современные браузеры поддерживают CSS-анимации, однако JavaScript даёт более широкий контроль над процессами, позволяя создавать анимации с учётом взаимодействий пользователя, времени и логики приложения.

Современные фреймворки, такие как React, Vue.js и Angular, обеспечивают улучшенную работу с интерактивными интерфейсами, минимизируя количество повторяющегося кода и ускоряя процесс разработки. Эти инструменты интегрируют управление состоянием и рендеринг, что значительно упрощает создание сложных и масштабируемых приложений.

Кроме того, JavaScript тесно взаимодействует с API браузера, что даёт возможность интегрировать внешние ресурсы, такие как карты, графики, уведомления или доступ к камере и микрофону. Эти возможности делают интерфейсы не только функциональными, но и более привлекательными и удобными для пользователя.

Для создания эффективных интерактивных интерфейсов важно использовать асинхронные операции. Методы fetch и async/await позволяют выполнять запросы к серверу, не блокируя основной поток исполнения, что улучшает отзывчивость приложения и предотвращает задержки при загрузке данных.

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

Как оптимизировать производительность веб-приложений с помощью JavaScript

Использование асинхронных операций через Promises или async/await позволяет эффективно управлять задачами, которые требуют времени, не блокируя основной поток. Это важно для обеспечения плавности интерфейса и избегания «замораживания» страницы при загрузке данных или выполнении тяжелых вычислений.

Оптимизация работы с массивами и объектами также играет большую роль. Вместо использования методов, создающих новые копии массивов (например, concat, filter), можно работать напрямую с существующими данными. Кроме того, использование for циклов вместо forEach может повысить производительность в некоторых случаях, так как цикл for работает быстрее за счет меньшей нагрузки на стек вызовов.

Инструменты, такие как debounce и throttle, помогают контролировать частоту выполнения функций, например, при обработке событий прокрутки или ввода в форму. Это позволяет избежать лишних вызовов, улучшая отзывчивость приложения.

Еще один важный аспект – использование Web Workers для выполнения параллельных задач. Это позволяет распределить вычисления по фоновым потокам и не блокировать основной поток, что особенно важно для вычислительных задач, требующих больших ресурсов.

Не забывайте о минимизации и сжатии JavaScript-кода. Современные сборщики, такие как Webpack, позволяют уменьшить размер исходных файлов, удаляя неиспользуемый код (tree shaking) и применяя минимизацию. Это уменьшает время загрузки и ускоряет обработку на клиентской стороне.

Инструменты профилирования, такие как Chrome DevTools, дают возможность выявлять «узкие места» в производительности. Например, можно отслеживать время, затрачиваемое на рендеринг, время выполнения отдельных функций и другие метрики, что помогает точечно оптимизировать приложение.

Использование JavaScript для мобильных приложений через фреймворки

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

Популярные фреймворки, такие как React Native, Ionic и NativeScript, предоставляют различные подходы к разработке. Каждый из них имеет свои особенности и ограничения, которые следует учитывать при выборе инструмента для проекта.

React Native, например, позволяет создавать приложения, которые выглядят и работают как нативные. Он использует JavaScript и React для создания пользовательских интерфейсов, при этом давая возможность взаимодействовать с нативными API через специальные мосты. Это позволяет разрабатывать приложения с высокой производительностью, а также использовать популярную экосистему React.

Иonic – это фреймворк для создания гибридных приложений, которые используют веб-технологии (HTML, CSS, JavaScript) и могут работать на разных платформах. Однако производительность таких приложений может быть ниже по сравнению с нативными решениями, особенно для ресурсоемких задач.

NativeScript предоставляет доступ к нативным API прямо из JavaScript, что позволяет разрабатывать приложения с нативной производительностью. Однако для эффективной работы с NativeScript требуется определенный опыт в использовании нативных компонентов и библиотек.

Сравнение фреймворков

Фреймворк Тип приложения Производительность Доступ к нативным API Преимущества
React Native Нативное приложение Высокая Через мост Сильная экосистема React, высокая производительность
Ionic Гибридное приложение Средняя Через WebView Быстрая разработка, поддержка множества платформ
NativeScript Нативное приложение Очень высокая Прямой доступ Гибкость, полный доступ к нативным API

Выбор фреймворка зависит от специфики проекта. Если нужна высокая производительность и доступ к нативным компонентам, предпочтительнее использовать React Native или NativeScript. Если важна универсальность и простота разработки, можно выбрать Ionic для более легких приложений.

Как внедрить тестирование и отладку JavaScript-кода в процессе разработки

Тестирование и отладка JavaScript-кода – важные этапы разработки, которые помогают минимизировать ошибки и повысить стабильность приложений. Включение этих процессов на ранних этапах разработки обеспечит качественное и надежное приложение.

1. Выбор подходящих инструментов для тестирования

1. Выбор подходящих инструментов для тестирования

Существует несколько популярных инструментов для тестирования JavaScript, среди которых:

  • Jest – один из самых популярных фреймворков для тестирования, особенно в React-приложениях. Поддерживает модульное тестирование, мокирование зависимостей и работу с асинхронным кодом.
  • Mocha – гибкий фреймворк для тестирования, который позволяет интегрировать различные библиотеки для утверждений (например, Chai) и мокирования.
  • Jasmine – фреймворк с BDD-подходом, подходит для тестирования как клиентской, так и серверной части приложений.

Для эффективного тестирования также стоит подключить библиотеки для утверждений, например, Chai, или для мокирования, такие как Sinon. Это упростит создание тестов, особенно когда нужно работать с асинхронным кодом или сторонними сервисами.

2. Настройка окружения для тестирования

Для начала необходимо настроить окружение для тестирования. Важно выбрать подходящий сборщик (например, Webpack или Parcel) и настроить транспайлеры, такие как Babel, для работы с современным JavaScript (ES6+).

Кроме того, стоит подключить тестовый раннер (например, Karma или Jest), который будет запускать тесты в различных браузерах и на разных платформах, обеспечивая максимальное покрытие.

3. Модульное тестирование и покрытие кода

3. Модульное тестирование и покрытие кода

Модульное тестирование помогает убедиться в том, что каждый компонент или функция работает корректно. Ключевые аспекты, на которые стоит обратить внимание:

  • Тестирование небольших функциональных единиц: проверяйте каждую функцию или метод отдельно, чтобы минимизировать вероятность ошибок.
  • Покрытие кода: используйте инструменты для измерения покрытия тестами, такие как Istanbul, чтобы убедиться, что основные участки кода протестированы.
  • Тесты на грани ошибок: добавляйте тесты для случаев с неправильными входными данными или нештатными ситуациями.

Рекомендуется использовать Continuous Integration (CI) для автоматической проверки кода на каждом этапе разработки, что позволяет снизить риск ошибок при развертывании.

4. Инструменты для отладки JavaScript-кода

Отладка JavaScript-ошибок может значительно ускорить процесс разработки. Вот несколько эффективных методов:

  • DevTools: встраиваемые инструменты браузеров, такие как Chrome DevTools или Firefox Developer Tools, позволяют легко отслеживать ошибки, мониторить сетевые запросы, анализировать производительность и работать с точками останова в коде.
  • Debugging в IDE: современные IDE, такие как Visual Studio Code, позволяют интегрировать отладчик, который дает возможность следить за состоянием переменных, переходить по коду и работать с точками останова.

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

5. Работа с асинхронным кодом

5. Работа с асинхронным кодом

Тестирование и отладка асинхронного кода требует дополнительного внимания, поскольку ошибки могут проявляться не сразу. Для эффективного тестирования асинхронных функций используйте:

  • Jest: поддерживает async/await и возвращение промисов, что позволяет легко тестировать асинхронные операции.
  • Sinon: помогает мокировать асинхронные функции, заменяя их поддельными версиями для тестирования.

Отладка асинхронного кода может быть сложной, так как ошибки часто возникают из-за неправильной работы с промисами или колбэками. Используйте функции `async` и `await` для упрощения работы с асинхронными операциями и избегайте «callback hell».

6. Мониторинг и логирование

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

  • LogRocket: помогает записывать и воспроизводить сеансы пользователей для анализа ошибок и выявления багов.
  • Sentry: предоставляет детализированную информацию об ошибках, включая стек вызовов, состояние и переменные, что ускоряет их исправление.

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

Вопрос-ответ:

Что делает JavaScript таким важным инструментом для разработки веб-сайтов и приложений?

JavaScript предоставляет веб-разработчикам возможности для создания динамичных и интерактивных страниц. Он позволяет обновлять содержимое страницы без её перезагрузки, а также обеспечивать взаимодействие с пользователем через анимации, формы и асинхронные запросы. В сочетании с другими технологиями, такими как HTML и CSS, JavaScript помогает создавать функциональные и современные веб-ресурсы.

Какие ключевые возможности JavaScript можно использовать для создания веб-приложений?

JavaScript предоставляет множество возможностей для разработки веб-приложений. Среди них — обработка событий, работа с асинхронным кодом через промисы и async/await, манипуляции с DOM (Document Object Model), а также использование фреймворков и библиотек, таких как React, Angular и Vue. Эти инструменты позволяют создавать сложные, интерактивные интерфейсы, что делает JavaScript незаменимым в современном веб-разработке.

Почему JavaScript так популярен среди разработчиков веб-приложений?

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

Какие преимущества и недостатки JavaScript как языка программирования для создания приложений?

Преимущества JavaScript включают поддержку большинства браузеров, широкую совместимость с различными платформами и наличие множества фреймворков, упрощающих разработку. Однако его недостатки могут включать проблемы с безопасностью (например, уязвимости, связанные с выполнением стороннего кода) и трудности с отладкой сложных приложений, особенно при использовании старых браузеров. Важно следить за актуальностью и оптимизацией кода для повышения производительности и безопасности.

Как JavaScript используется для создания мобильных приложений?

JavaScript также применяется для создания мобильных приложений через фреймворки, такие как React Native, Ionic или Cordova. Эти инструменты позволяют разрабатывать нативные мобильные приложения с использованием веб-технологий, что сокращает время разработки и позволяет использовать одни и те же навыки для работы как с мобильными, так и с веб-приложениями. Это особенно удобно для команд, которые хотят сэкономить на разработке для разных платформ.

Какие возможности JavaScript для веб-разработки доступны сегодня?

JavaScript предоставляет огромные возможности для создания интерактивных веб-сайтов и приложений. С помощью этого языка можно разрабатывать как клиентские, так и серверные решения. На клиенте JavaScript отвечает за манипуляцию DOM, создание анимаций, обработку событий и динамическую загрузку контента без перезагрузки страницы, например, через технологии AJAX. Для серверной разработки используется Node.js, который позволяет работать с базами данных, обрабатывать запросы и строить полноценные приложения с использованием одного языка на обеих сторонах — клиенте и сервере. Благодаря этому JavaScript становится универсальным инструментом, подходящим для создания как простых сайтов, так и сложных многозадачных приложений.

Как JavaScript помогает создавать мобильные приложения?

JavaScript активно используется для разработки мобильных приложений через такие фреймворки, как React Native, Ionic и NativeScript. Эти инструменты позволяют создавать приложения, которые работают как на iOS, так и на Android, при этом код пишется на JavaScript. Например, React Native позволяет использовать компоненты, похожие на веб-компоненты, но адаптированные для мобильных платформ, что снижает время разработки и позволяет делиться большим количеством кода между веб- и мобильными приложениями. Таким образом, JavaScript становится важным инструментом и для мобильной разработки, расширяя область его применения за пределы браузера.

Ссылка на основную публикацию