Доброго времени суток!
Давно думал написать пост на эту тему, но решился только после этого топика про объединение JavaScript файлов.
Для ASP.NET сайтов существует отличная библиотека SquishIt — она позволяет объединять как css файлы в один, так и JavaScript файлы. Я не буду детально расписывать преимущества объединения так как о них было уже сказано в статье выше и других, основное это уменьшение количество запросов к серверу.
Эта библиотека доступна в качестве пакета Nuget.
Вам доступно 2 варианта:
Если вы будете использовать ASP.NET MVC необходимо внести изменения в файл «Views/Web.config»,
В разделе «system.web.webPages.razor», изменить «pageBaseType» атрибут в секции «pages» на «SquishIt.Contrib.Mvc.SquishItBasePage».
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="SquishIt.Contrib.Mvc.SquishItBasePage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
А теперь можно собственно и объединить
@{
SquishIt.Css.Add("~/Content/Site.css");
SquishIt.Css.Add("~/Content/themes/base/jquery-ui.css");
SquishIt.Css.Add("~/Content/reset.css");
SquishIt.JavaScript.Add("~/Scripts/jquery-1.4.4.js");
SquishIt.JavaScript.Add("~/Scripts/MicrosoftAjax.debug.js");
}
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
@SquishIt.Css.Render("~/Content/combined_#.css")
@SquishIt.JavaScript.Render("~/Scripts/combined_#.js")
</head>
И также изменить debug на false в «Web.config»
<compilation debug="false" targetFramework="4.0">
Готово. В результате мы получим следующее:
<head>
<title>Home Page</title>
<link rel="stylesheet" type="text/css" href="/Content/combined.css?r=531A7BFA4E917B223909817F07467EDB" />
<script type="text/javascript" src="/Scripts/combined.js?r=6DB45040EF233910B7E1F986316FF2FE"></script>
</head>
Стоит отметить, что "_#" означает что к названию файла будет добавлен хеш контента, если его не указывать он будет добавлен в качестве параметра запроса. Это позволяет избежать проблем с кешем, если хотя бы один из фалов был изменен.
Если вы будете использовать WebForms to код будет следующий:
<%@ Import Namespace="SquishIt.Framework" %>
<%= Bundle.JavaScript()
.Add("~/Scripts/jquery-1.4.2.js")
.Add("~/Scripts/jquery-ui-1.8.1.js")
.Render("~/Scripts/combined_#.js")
%>
В результате мы в течении 10 минут можем значительно ускорить загрузку web сайта с помощью библиотеки SquishIt.
Ссылка на GitHub