2016-05-12 4 views
0

У меня слишком много страниц в приложении, которые в основном загружают один и тот же набор файлов xml и js для взаимодействия и проверки на стороне клиента. Итак, у меня около дюжины строк, таких как этот <script type="text/javascript" src="JS/CreateMR.js"></script> или как этот <xml id="DefaultDataIslands" src="../XMLData/DataIslands.xml">.Загрузка файлов src один раз за сеанс в asp.net

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

Я пытаюсь найти способ загрузить их только на страницу входа в систему, а затем использовать этот временный файл в качестве источника. Можно ли это сделать? Если да, как и с чего начать?

P.S. Также будет работать ссылка на учебник, так как в настоящее время я не знаю об этом.

Edit:

Я не могу кэшировать всю страницу, потому что страницы генерируются во время выполнения на основе различных возможных режимов просмотра. Я могу только кэшировать js и xml-файл. Кэшировать все может быть проблемой.

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

Редактировать: Оказывается, кэширование уже включено, просто мой сервер действует сумасшедшим. Проверьте снимок экрана ниже.

С Cache With cache (304 response)

Без кэша Without cache (200 response)

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

Что касается реальной проблемы, оказывается, мне не нужно ничего делать, чтобы включить кеширование файлов xml и js. Если бы идея браузеров не кэшировала файлы js без использования определенного тега.

ответ

2

Совершенно возможно и на самом деле рекомендуется.

Содержимое кэша браузера, отправленное с соответствующими заголовками кеширования HTTP, и не будет запрашивать его снова до истечения срока действия кеша. Это сделает ваши страницы более быстрыми и более отзывчивыми, а загрузка вашего сервера намного легче.

Here is a good read, для того чтобы вы начали.

Here is ASP.NET MVC caching guide. Основное внимание уделяется кэшированию содержимого, возвращаемого контроллерами.

Here is a read about caching static content на IIS с ASP.NET MVC.

+0

Спасибо. В настоящее время я читаю руководство по кешу HTTP. – jitendragarg

+0

Хорошо, я прочитал первый документ. Не знаю, как реализовать его в ASP. Я ищу учебник по этому поводу. Посмотрим, смогу ли я его найти. Что касается кэширования вывода, мы уже включили это приложение в нашем приложении, но по какой-то причине оно не кэширует файлы xml. Я не могу кэшировать результаты db, поскольку это производственное приложение, где данные изменяются примерно 10 раз в минуту. Вот почему даже индексирование и просмотр не очень помогают. – jitendragarg

+0

@jitendragarg, ваши статические файлы JS и XML должны отправлять по умолчанию заголовки кэширования (если только они не динамически генерируются контроллером или ASP.NET-страницей aspx). Вы можете проверить это, проверив заголовки ответов в своем браузере. Найдите заголовки 'cache-control' и' expires'. –

2

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

  1. Если вы используете инструменты F12 в своем браузере для отладки сетевых запросов, убедитесь, что опция disable cache не установлена.В противном случае он заставляет браузер игнорировать кешированные файлы.
  2. Убедитесь, что ваш сервер отправляет и уважает cache headers - он должен вернуть статус HTTP 304 Unmodified после первого запроса на статический файл.
  3. Взгляните на Asp.Net Bundling and minification - если у вас есть, например, несколько исходных файлов js, вы можете связать их в один файл, который будет кэшироваться по первому запросу. Кроме того, если вы используете внешние js-библиотеки, вы можете загрузить их с CDN вместо своего сервера - это приведет к выгрузке вашего сервера и включению браузера пользователя в использование кешированной версии скрипта (что означает, что если какая-то другая страница, которую посетил пользователь, также использовалась тот же скрипт, браузер уже должен его кэшировать).
+0

Я проверил, по умолчанию возвращает правильный код состояния. Дело только в том, что он принимает одинаковые 900 мс независимо от статуса. Не то, что я могу решить на стороне кода, конечно. Пора попросить администратора сервера проверить проблему. – jitendragarg

0
  • Один подход кэширование статических файлов через IIS, добавив <clientCache> элемент в web.config файле. Элемент <clientCache> элемента <staticContent> указывает связанные с кешем заголовки HTTP, которые IIS и более поздние версии отправляют веб-клиентам, которые контролируют, как веб-клиенты и прокси-серверы будут кэшировать содержимое, которое IIS и более поздние возвращает.

How to configure static content cache per folder and extension in IIS7?

Client Cache

для получения дополнительной информации на стороне клиента кэширование читать эту часть книги Ultra-Fast ASP.NET 4.5:

Browser Cache and Caching Static Content

  • Другой подход кэширование части страницы. если ваше использование веб-формы:

Caching Portions of an ASP.NET Page

и если вы используете MVC, используйте Donut Hole Caching

ASP.NET MVC Extensible Donut Caching

Donut Caching and Donut Hole Caching with Asp.Net MVC

0

браузер должен запросить сервер, если файл был изменен или нет, поскольку он помещен в кеш, поэтому http statusc ode 304. Читать дальше от https://httpstatuses.com/304.

Как это asp.net, пожалуйста, убедитесь, что вы первый запуская его с

<compilation debug="false"/> 

как включение отладки имеет некоторые побочные эффекты, которые включают в себя.

"All client-javascript libraries and static images that are deployed via 
WebResources.axd will be continually downloaded by clients on each page 
view request and not cached locally within the browser." 

Больше читать https://blogs.msdn.microsoft.com/prashant_upadhyay/2011/07/14/why-debugfalse-in-asp-net-applications-in-production-environment/

+0

Режим отладки является ложным, и файлы получают правильный статус. Проверьте скриншоты. Дело только в том, что в некоторых случаях требуется больше времени, чем без кеша. Я предполагаю, что это всего лишь аппаратное обеспечение сервера, которое вызывает 50 мс времени в оба конца. – jitendragarg