2013-12-24 3 views
0

Я использую фреймворк SquishIt для работы с функцией Объединения и увеличения для объединения и минимизации js и css-файлов.Добавление # в методе рендеринга для поддержки фреймворка SquishIt веб-фермы

Я использую код, как указано ниже:

<%= Bundle.JavaScript() 
     .Add("~/js/jquery-1.4.2.js") 
     .Add("~/js/jquery-ui-1.8.1.js") 
     .Render("~/js/combined_#.js") 
%> 

Приведенный выше код работает хорошо в случае, если у меня есть один веб-сервер. Я хочу знать, будет ли добавление _ # "в имени выходного файла создаст проблему в webfarm. Если это создает проблему, то что является лучшим решением для решения проблемы.

Может ли кто-нибудь помочь мне узнать больше подробности о возникновении вопроса в сценарии webfarm.

Благодарность & с уважением, Сантош Кумар Patro

ответ

0

Это может создать проблемы, если вы не липкие сессий включены в вашей балансировке нагрузки. Потому что вы оказываете файл на ваш взгляд, он может отображаться на сервере 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

+1

Что делать, если я удаляю «#» из отображаемого имени и сохраняю его как следующее: <% = 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 без каких-либо проблем? –

+0

Я думаю, что это хуже, потому что у вас может быть старый файл с сервера 2, который будет обслуживаться для пользователя, который пришел на сервере 1, тогда этот пользователь застрял с плохим javascript до вашего следующего обновления. – AlexCuse

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