На типичной веб-странице я загружаю следующее: все из CDN:
- JQuery
- Angular
- Bootstrap
- Icomoon
- несколько плагинов Angular
Лучше ли загружать их с 1 CDN (если возможно) или с разных CDN? Есть ли лучшие практики для этого, или это не имеет значения?
На типичной веб-странице я загружаю следующее: все из CDN:
Лучше ли загружать их с 1 CDN (если возможно) или с разных CDN? Есть ли лучшие практики для этого, или это не имеет значения?
В терминах использования одного или нескольких CDN это не будет проблемой в зависимости от того, сколько компонентов вы загружаете из одного и того же имени хоста, в соответствии с этим статья из Team UI Team, HTTP/1.1 предполагает, что браузеры должны ограничивать параллельные загрузки до двух для имени хоста. Поэтому, используя несколько источников CDN, это разные хосты должны быть хорошей практикой.
Возможно, в случае использования связанных компонентов, чтобы избежать случайного несоответствия версии, например angular и angular -router, вам может понравиться использовать тот же CDN, но если загрузка для имени хоста будет увеличиваться, это создаст загрузку (по крайней мере, для браузеров, следующих за предложением спецификации).
Использование CDN, безусловно, является хорошей практикой для повышения производительности загрузки вашего веб-сайта. Тем не менее, вам следует рассмотреть возможность использования более популярных CDN, которые вы можете найти, это увеличит шансы получить кешированную версию файлов, которые вы используете, с другого сайта, который использует тот же файл, что еще больше увеличит производительность загрузки сайт.
Как отмечалось в комментариях @JeffPuckett, браузеры имеют более высокий предел одновременной загрузки на сервер/прокси сегодня:
Firefox 2: 2 Firefox 3+: 6 Opera 9.26: 4 Opera 12: 6 Safari 3: 4 Safari 5: 6 IE 7: 2 IE 8: 6 IE 10: 8 Chrome: 6
Я боюсь, что на этот вопрос нет ответа на пулю серебра, как это обычно бывает. Вот мои 2 цента. В отличие от фокусировки на количестве одновременных подключений и браузеров/стандартов, я хочу посмотреть на него с другой точки зрения.
Что важнее всего для ваших пользователей и вашего сервера, это время загрузки страницы и доступность службы. Самое быстрое время загрузки - загрузка из кеша. Чем больше ваших пользователей используют определенный файл из определенного CDN, тем больше шансов на попадание в кеш.
Исходя из этой цели, имеет смысл
Я бы классифицировал библиотеки, для которых вы можете найти CDN и статистику использования, чтобы быть популярными, другие - не так много, хотя вы можете сами решить, что разместить локально на основе других рекомендации.
Для статистики вы можете использовать что-то вроде w3techs:
Выбор между сайтами с несколькими трафиком и многими сайтами с низким трафиком может быть сделан на основе некоторых образованных предположений о вашей аудитории веб-сайта, но если вы хотите убедиться, вы можете попытаться измерить коэффициент попадания в кеш. Это не так просто, но здесь есть какая-то идея.
Теперь, для версий, если у вас есть возможность изменить версии. Если вы решите пойти с первым вариантом "несколько сайтов с высоким трафиком", то определенно стоит проверить, какую версию библиотеки использует CDN. В противном случае для опции "много низкого трафика" предпочтительной является наиболее популярная версия. Тот же w3tech должен иметь статистику.
Это может показаться неприятным, но редко (если не один раз), поскольку статистика, как правило, меняется довольно медленно.
Вам следует избегать прямого использования нескольких ссылок CDN на одной странице, поскольку это влияет на производительность. Вы можете попробовать использовать код ниже для добавления нескольких каналов CDN.
bundles.UseCdn = true;
bundles.Add(new ScriptBundle("~/bundles/jquery",
@"//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.10.2.js"
).Include(
"~/Scripts/jquery-{version}.js"));
Он объединяет несколько файлов в один файл, уменьшает количество запросов на сервер, которые необходимы для извлечения и отображения веб-страницы.
Использование CDN - это путь, на который уже ответили другие, но добавление большего количества CDN будет только масштабироваться до того момента, когда время поиска DNS для каждого CDN может начать доминировать над общим временем загрузки.
Таким образом, попытка максимизировать каждый CDN, пытаясь загрузить как минимум 2-6 ресурсов, вероятно, будет лучшим компромиссом.
Хороший вопрос, чтобы начать спрашивать, что большинство браузеров поддерживают HTTP2: поддерживает ли мой CDN HTTP2? Если это так, то вероятность того, что конвейерная обработка этих запросов через 1 CDN будет быстрее. Он также может сохранять запросы DNS, если другие CDN еще не кэшированы. Если CDN поддерживает push, это также может увеличить скорость, поскольку для многих из этих библиотек требуется несколько файлов.
Лучшей практикой является использование как CDN, так и резервного (Local Files). Чтобы ответить на ваш вопрос, вы должны использовать несколько путей CDN, как если бы один CDN был выключен, по крайней мере, остальные работали и работали. Для down CDN резервные системы будут тренироваться.
Вкратце используйте обе эти рекомендации, которые я использую в своих проектах.
Вы можете легко использовать cdn для получения данных
Вы должны стараться избегать использования CDN как: -
Браузер имеет ограничение по 6 запросов за раз, поэтому, если вы выполняете много запросов одновременно, они будут в очереди и потребуют больше времени, поэтому старайтесь минимизировать количество запросов.
Рекомендация -
Пользователь Bower/Grunt или Webpack в вашем приложении -
Если у вас есть какие-либо сомнения относительно bower/grunt, я могу вам помочь в этом.