Добавление # в метод Render для веб-фермы поддержки фреймворка SquishIt
Я использую инфраструктуру SquishIt для работы с функцией объединения и увеличения для объединения и минимизации файлов js и css.
Я использую код, как указано ниже:
<%= Bundle.JavaScript()
.Add("~/js/jquery-1.4.2.js")
.Add("~/js/jquery-ui-1.8.1.js")
.Render("~/js/combined_#.js")
%>
Приведенный выше код хорошо работает, если у меня есть один веб-сервер. Я хочу знать, будет ли добавление _#"в имени выходного файла создавать проблему в веб-ферме. Если это создает проблему, то какое решение лучше всего решить.
Может ли кто-нибудь помочь мне узнать более подробную информацию о возникновении проблемы в сценарии webfarm.
Спасибо и С уважением, Сантош Кумар Патро
1 ответ
Это может создать проблемы, если в вашем балансировщике нагрузки не включены липкие сеансы. Поскольку вы визуализируете файл в своем представлении, он может быть обработан на сервере 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