2

Многие примеры кода и метод по умолчанию RegisterBundles в BundleConfig.cs генерируется Visual Studio 2012 для нового MVC приложения, включают в себя код, как это, чтобы добавить общие файлы JavaScript, как JQuery в пачке:Должен ли я связывать файлы в ASP.Net, которые, скорее всего, будут кэшироваться в браузере?

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
       "~/Scripts/jquery-{version}.js")); 

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

Если браузер не может распознать, что связанный файл (который может быть объединен с другими файлами и миниатюрный) уже присутствует, то похоже, что это использование пакета не ускорит работу вообще, а приведет к ненужным задержкам ,

Или я что-то упустил? Возможно, вероятность низкая, что «общий» файл (jQuery и т. Д.) Уже кэширован?

ответ

1

«браузер пользователя уже есть эти общие файлы в кэше»

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

Если вы хотите ссылаться на версию, которую пользователь, возможно, кэшировал, вы можете использовать CDN. Код ниже от ASP.NET Bundling and Minification

public static void RegisterBundles(BundleCollection bundles) 
{ 
    bundles.UseCdn = true; //enable CDN support 
    var jqueryCdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"; 
    bundles.Add(new ScriptBundle("~/bundles/jquery", 
       jqueryCdnPath).Include(
       "~/Scripts/jquery-{version}.js")); 
} 

И тогда запасной вариант, если CDN не удается:

@Scripts.Render("~/bundles/jquery") 

<script type="text/javascript"> 
    if (typeof jQuery == 'undefined') { 
     var e = document.createElement('script'); 
     e.src = '@Url.Content("~/Scripts/jquery-1.7.1.js")'; 
     e.type = 'text/javascript'; 
     document.getElementsByTagName("head")[0].appendChild(e); 
    } 
</script> 
1

Я не думаю, что это пустая трата, только функция минимизации должна помочь улучшить реакцию клиента. Но это зависит от ваших js, css, ect в вашем веб-приложении. Браузеры ограничены шестью одновременными подключениями. Поэтому, если ваша веб-страница имеет шесть или менее файлов на стороне клиента, может не иметь смысла использовать ScriptBundle. Но так как большинство сайтов имеют большое количество javascript и css, функция Minification ScriptBundle стоит того. Это значительно уменьшит количество KB, отправленное пользователю. Вы всегда можете отключить его и посмотреть, сколько загрузки этих файлов для вашего приложения.

 Смежные вопросы

  • Нет связанных вопросов^_^