CDN(Content Delivery Network) — это подход, позволяющий хранить части страниц вашего сайта на других серверах. Обычно это кастомные шрифты, таблицы стилей, скрипты и иконки. CDN хорош тем, что позволяет кэшировать часто используемые библиотеки типа jQuery, не загружая их заново для каждого сайта. При большом количестве подключаемых файлов на странице, браузер не может делать много запросов к одному домену одновременно. Однако использование CDN, расположенного на другом домене, позволяет обойти эту проблему. На сайтах с огромной посещаемостью CDN позволяет экономить ресурсы серверов. В общем это замечательная технология. А под катом я расскажу, почему первым делом при получении сайта на поддержку, я вырезаю все ссылки на CDN и заменяю их на локальные ресурсы.
Интернет-цензура в мире крепнет с каждым годом. В моем случае это выливается в комичные ситуации, когда у российских провайдеров в бан улетают заграничные CDN, а у украинских — CDN, например, яндекса. Еще бывают проблемы самого хостинга, когда по какой-то причине сервера начинают «не видеть» подсети, в которых расположен CDN. Таким образом использование CDN в текущей обстановке — это риск того, что сайт может в любой момент перестать работать.
Второй важной проблемой является протухание ссылок на CDN. На старых проектах вы можете столкнуться с ситуацией, когда CDN удалил старую версию библиотеки, на которую все завязано. И вам теперь нужно срочно искать ее, или ближайшую подходящую версию.
Третья проблема — это скорость самих CDN. Во-первых она нестабильна сама по себе, и можно достаточно долго смотреть как в статус баре браузера меняются надписи «Ожидание ответа от *.cdn.net». После каждой смены надписи страница может кардинально перерисовываться, в зависимости от того какие стили и шрифты подгрузились. А что может быть лучше, чем когда за долю секунды до нажатия на кнопку, вы нажимаете на другую кнопку, которая внезапно оказывается у вас под пальцем? Особенно болезненно CDN ощущается на мобильном интернете, потому что по создание соединения там — гораздо более долгая операция, чем передача данных по уже открытому. А нестабильный характер самого мобильного интернета приводит к тому, что сайт может загружаться очень долго и в итоге не до конца.
Четвертая проблема — это локальная разработка. Если у тебя нет интернета в дороге или он плохой, то полноценно работать над сайтом невозможно.
Пятая проблема — CDN неоптимален. Даже если у вас все ссылки будут вести на минифицированные версии стилей и скриптов, то это все равно несколько запросов. И вам все равно придется загружать свои скрипты и стили, т.е. придется в любом случае делать несколько запросов в разные места. Использование сборщиков и минификация ресурсов позволит сократить количество запросов и уменьшить количество дерганий сайта при загрузке.
Шестая проблема — это поменявшийся характер использования интернета. Теперь пользователи довольно мало ходят по сайтам, придерживаясь нескольких основных, но посещая их регулярно. И тут плюсы кэширования сходят на нет — чем меньше сайтов посещает пользователь, тем меньше вероятность что в кэш будут попадать какие-то общие для этих сайтов библиотеки. Последнее помножается на количество этих библиотек и их версий. И есть шанс что на всех сайтах, посещаемых пользователем не будет ни одной общей версии Bootstrap или jQuery.
Итог
Нужен ли вам CDN? Скорее всего нет, если у вас не сотни тысяч посетителей в день. И от него для небольшого и среднего сайта будет больше вреда, чем пользы, особенно если значительная часть вашей предполагаемой аудитории использует мобильные устройства.