2

Я хотел бы знать динамику изменения коллекции пакетов (скажем, при загрузке страницы). Я попытался добавить новый файл сценария в коллекцию пакетов (изначально созданный в app_start). Он отлично работает в моем первоначальном тестировании, - я заметил, что браузер не кэширует связанный скрипт и стиль (отправляя новые запросы при каждом обновлении). Я хотел бы знать, есть ли способ принудительно кэшировать скрипт/стиль пакета после начальной выборки.Связки Кэширование и веб-фермы

У меня есть статические скрипты и стили, загруженные в коллекцию пакетов в самом приложении app_start. Но у меня есть кусок кода в загрузке главной страницы, чтобы проверить наличие скрипта или стилей на странице (например, скажем, загружается страница ABC.aspx, этот код будет искать существование ABC.js в папке Scripts и ABC.css в папке «Стили»). если он существует, он будет загружен в заголовок страницы. Здесь я попытался добавить его в пакеты. Какой был бы лучший подход, чтобы сделать эти условные скрипты/стили частью коллекции пакетов по умолчанию?

Мое производственное окружение - веб-ферма. Итак, есть ли что-то, что я должен сделать специально, чтобы хэш-адрес url оставался таким же на серверах?

Я прочитал комментарий от «Hao Kung» here, объяснив проблему кэширования пакета для webfarms (результаты 404), что было бы лучше всего для этого?

ответ

1

AFAIK, при создании пакета, содержимое хэшируется для создания уникального ключа для него (дополнительный параметр в URL-адресе).

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

Поведение, которое вы видите, связано с тем, что пучки не предназначены для использования этим динамическим способом, поскольку это противоречит идее, что содержимое пакета является статическим (и, следовательно, кэшируемым).

Почему бы просто не создать отдельный пакет для каждой страницы? Таким образом, общий пакет с общим кодом будет кэшироваться и повторно использоваться, а при загрузке вашей страницы ABC.aspx вы всегда загружаете свой пакет «abc», который будет выполнять собственный контроль над содержимым и не влияют на общие библиотеки.

Кроме того, есть дополнительный недостаток изменения узелка на каждой странице:

Если каждая страница предоставляет другой пакет, то клиент получит весь код для разделяемых библиотек, снова и снова, один раз каждый страница. Даже если кэшироваться. Например: не было бы смысла отправлять JQuery вместе с каждой страницей.

+0

Спасибо Pablo за предложения. – user3257986

+0

Спасибо Pablo за предложения. Да, лучше держать стаканы как можно больше. Я согласен с этим. Мой другой вопрос заключается в том, что есть ли какие-то конкретные настройки, которые я должен сделать, чтобы статические хэширование пакетов было одинаковым для всех серверов в веб-ферме? – user3257986

+0

Несомненно. Что касается серверов, у меня нет настроек, о которых я знаю. Он вычисляется на основе содержимого каждого файла, поэтому, если контент один и тот же, не должно быть большой проблемы. Однако некоторые из них сообщили о проблемах, когда серверы не работают с одной и той же версией .NET, например: http://stackoverflow.com/a/15071452/1373170 –

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