Несколько дней назад я написал статью о том, что сайт «Reuters» зависит от 40 внешних сервисов и их защиты. Что особо меня поразило, так это то, что они использовали чужие сервисы для хостинга кода, например, они загружали jQuery напрямую с сайта библиотеки, а также GSAP из cdnjs. В этом случае виноват не сам «Reuters», они, наверное, не подключают эти скрипты напрямую, а это делают какие-то другие скрипты, которые они используют.

Почему люди используют в качестве альтернативы загрузке скрипта на сервер внешние библиотеки? Я могу придумать только три причины для этого:

  • Простота — вам не нужно загружать скрипт, достаточно добавить тег <script> на свою страницу и забыть обо всём. Конечно, загрузка скриптов на ваш сервер — не те усилия, о которых стоит говорить, особенно по сравнению с реальной разработкой сайта.
  • Производительность — внешние библиотеки в основном используют сети дистрибуции контента (CDN), которые повышают производительность благодаря выбору ближайшего сервера к клиенту. Тем не менее, есть ли на самом деле преимущество в производительности при использовании постоянных HTTP-соединений (типичный ныне сценарий), сомнительно, как минимум.
  • Масштабируемость — вашему серверу больше не требуется обслуживать статичные файлы, и он может использовать эти ресурсы для чего-либо другого. Но для современных сайтов это не такой весомый аргумент, ведь обслуживание статичных файлов обычно производит незначительную нагрузку на процессор по сравнению со страницами, использующими эти файлы.

С другой стороны, у этого подхода есть явные недостатки:

  • Отсутствие контроля — от вас больше не зависят решения о том, хранится ли на сервере версия Javascript библиотеки, на которую вы рассчитываете. В худшем случае, необходимая вам библиотека может быть удалена из CDN, и вы узнаёте об этом только из-за того, что сайт перестал работать.
  • Стабильность — при использовании библиотек из внешних ресурсов, ваш сайт может перестать работать не только из-за проблем на вашем сервере, но и потому, что не работает источник библиотек. А также всегда существуют пользователи, которым доступен ваш сайт, но по каким-то причинам недоступны сервера сторонних библиотек — для них сайт откроется, но на нём появятся ошибки.
  • Конфиденциальность — я надеюсь, вы уважаете конфиденциальность пользователей вашего сайта и не собираете лишние данные о них. А что насчёт внешних сервисов и их CDN, которые вы используете? Теперь у вас есть ещё две стороны, которые тоже могут собирать данные о ваших пользователях, у вас есть хоть малейшее представление, что они с ними делают?
  • Безопасность — безопасность вашего сайта зависит от безопасности серверов внешних библиотек и их CDN. Если любой из них будет взломан, то с вашим сайтом смогут сделать практически что угодно. Как я уже писал в прошлом посте, вы можете внезапно обнаружить на вашем сайте пропагандистские сообщения, или же может начаться распространение вредоносного ПО среди пользователей вашего сайта.

Особенно последние два пункта создают риск, на который, по моему мнению, не стоит идти. Преимущества в действительности незначительны и, безусловно, не стоит отдавать внешним сторонам контроль над вашим сайтом.

Это перевод статьи Владимира Паланта — «Please don’t use externally hosted JavaScript libraries». Перевод выполнил Михаил, а помогала ему команда HTML Academy.