Это может создать проблемы, если вы не липкие сессий включены в вашей балансировке нагрузки. Потому что вы оказываете файл на ваш взгляд, он может отображаться на сервере 1, и запрос на актива фактически заканчивается на сервер 2, где файл еще не создан.
В сценарии веб-фермы я считаю, что лучше всего создавать свои пакеты на Application_Start, а затем визуализировать в вашем представлении с использованием одного из методов кэширования/имени.
Так что если вы хотите сохранить рендеринг статических файлов, а вы бы что-то подобное в Application_Start (Global.asax.cs) или вниз (я как специализированный инициализатор для SquishIt)
Bundle.JavaScript()
.Add("~/js/jquery-1.4.2.js")
.Add("~/js/jquery-ui-1.8.1.js")
.RenderNamed("bundleName", "~/js/combined_#.js") //2nd arg is used to resolve disk location
Тогда оказать на ваш взгляд:
<%= Bundle.JavaScript().RenderNamed("bundleName") %>
Это гарантирует, что файл был создан во время сервер готов отвечать на запросы, за счет времени запуска приложения (убедитесь, что ваше приложение бассейн не слишком часто перерабатывается!).
Метод контроллера активов может быть лучше, потому что он дает вам возможность восстановить, если пакет не найден. Вы можете прочитать об этом здесь: https://github.com/jetheredge/SquishIt/wiki/Using-SquishIt-programmatically-without-the-file-system
Наконец, использование CDN может быть хорошим вариантом. Вы можете прочитать некоторые сведения об этом (используя Amazon S3/Cloudfront, но идеи применимы к любому CDN) здесь: http://blogs.lessthandot.com/index.php/WebDev/ServerProgramming/making-squishit-work-with-amazon
Что делать, если я удаляю «#» из отображаемого имени и сохраняю его как следующее: <% = Bundle.JavaScript() .Add ("~/js/jquery-1.4.2.js") .Add ("~/js/jquery-ui-1.8.1.js") .Render ("~/js/combination_2.1.1.js ") %> Будет ли он работать в сценарии webfarm без каких-либо проблем? –
Я думаю, что это хуже, потому что у вас может быть старый файл с сервера 2, который будет обслуживаться для пользователя, который пришел на сервере 1, тогда этот пользователь застрял с плохим javascript до вашего следующего обновления. – AlexCuse