2010-08-20 3 views
0

Я запускаю приложение, и я пробовал YSlow и получил класс F на большинстве своих практик. Я загружаю jscript, который работает над уменьшением. Я хочу, чтобы иметь возможность кэшировать некоторые из них, потому что страницы вызываются много раз.Кэширование страниц asp.net

У меня есть один возраст, и я хотел кэшировать скрипты и файлы css.

Как это достичь? Есть ли рекомендуемые рекомендации? Есть ли другие улучшения производительности, которые я могу сделать?

+0

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

+0

Не знаете, что вы спрашиваете здесь. Рекомендации YSlow относятся к стороне клиента. Кэширование ASP.NET - это серверная сторона. Внедрение кеша ASP.NET ничего не изменит в рейтинге YSlow. –

+1

Примечание: игнорируйте то, что YSlow говорит об электронных тегах, если вы не находитесь на ферме. Если вы находитесь на ферме, предложите более сложный подход. Совет по отключению электронных тегов хуже, чем бесполезно и ущемляет производительность. –

ответ

4
  1. вы перечитайте RFC 2616 еще в этом году? Если нет, сделайте. Попытка создать сайты без сильного знакомства с HTTP - это как-то соблазнить кого-то, когда вы очень пьяны; просто потому, что это делают многие другие люди, это не значит, что у вас будет хорошая производительность.

  2. Если ресурс можно безопасно повторно использовать в течение заданного периода времени (например, безопасно для следующего часа/дня/месяца), скажите это. Используйте компонент максимального возраста в заголовке управления кешем, а также истекает (максимальный возраст лучше, чем истекает, но ничего не делает).

  3. Если вы знаете время, когда-либо измененное, скажем так в заголовке Last-Modified (см. Примечание ниже).

  4. Если вы не знаете, когда что-то последнее изменилось, но можете добавить возможность знать, сделайте это (например, строки базы данных timestamp в UPDATE).

  5. Если вы можете вести запись каждый раз, когда что-то изменилось, сделайте это и создайте из него электронный тег. В то время как E-теги не должны основываться на времени, исключение - если вы знаете, что они не могут измениться в более тонком разрешении (время до ближайшей .5 секунды в порядке, если вы не можете иметь более одного изменения каждые 0,5 секунды и т. Д. .)

  6. Если вы получили запрос с модификацией «с поправкой-временем» с датой, соответствующей последнему времени изменения, или «Нет-совпадение», соответствующее e-тегу, отправьте 304 вместо всей страницы.

  7. Использовать сжатие Gzip или Deflate (deflate немного лучше, когда клиент говорит, что он может обрабатывать оба), но обратите внимание, что вы должны изменить e-tag. Отправка правильного заголовка Vary для этого прерывает кеширование IE, поэтому вместо этого вместо V-агента вместо него (несовершенное решение для несовершенного мира). Если вы скатите свое собственное сжатие в .NET, заметите, что очистка потока сжатия вызывает ошибки, напишите обертку, которая только очищает вывод на Flush() до финального сброса в Close().

  8. Не побеждайте кеширование, выполненное для вас. Отключение электронных тегов в статических файлах дает вам лучшую оценку YSlow и худшую производительность (за исключением веб-ферм, когда следует использовать более сложное решение, рекомендованное YSlow).Игнорируйте то, что YSlow говорит об отключении электронных тегов (возможно, они исправили эту ошибку сейчас и больше не говорят об этом), если вы не находитесь на веб-ферме, где разные типы серверов могут обрабатывать один и тот же запрос (например, IIS и Apache, имеющий дело с одним и тем же URI, Yahoo - вот почему это сработало для них, большинство людей - нет).

  9. Благодарим публики за закрытыми лицами, если не присвоено.

  10. Избегайте делать что-либо, что зависит от сеансов. Если вы можете отключить сеансы, тем лучше.

  11. Избегайте отправки большого количества просмотров. Если вы можете сделать что-то без viewstate, тем лучше.

  12. Перейдите в IIS и посмотрите раздел HTTP Headers. Установите соответствующие значения для статических файлов. Обратите внимание, что это можно сделать для каждого сайта, для каждого каталога и для каждого файла.

  13. Если у вас действительно массивный файл (.js, .css), то укажите ему номер версии и поместите эту версию в URI, используемый для доступа к ней (blah.js /? Version = 1.1.2). Затем вы можете установить действительно длинную дату истечения срока действия (1 год) и/или жестко закодированный электронный тег и не беспокоиться о неподвижности кеша, так как в следующий раз вы измените номер версии, а в остальной части Интернета это новый ресурс, а чем обновленный.

Edit:

Я сказал "примечание ниже" и не добавить примечание.

Последнее измененное время любого ресурса, является самым последним из:

  1. Anything (сценарий, код-сзади), используемый для создания сущности посланной.

  2. Все, что используется как часть его.

  3. Все, что использовалось как часть его, которое теперь удалено.

Из них номер 3 может оказаться самым сложным, поскольку он был удален. Одно из решений - отслеживать изменения самого ресурса и обновлять его при удалении чего-либо, используемого для его создания, а другое - иметь «мягкое удаление», в котором у вас есть элемент, но отмеченный как удаленный и не используемый в Любым другим путем. Только то, что лучший способ отслеживать этот материал, зависит от приложения.

+0

Большое спасибо. Действительно полезный ввод. – Churchill

1

Вы должны просто создать отдельные файлы .js и .css, и браузер выполняет кэширование для вас. Также неплохо использовать js-minimizer, который удаляет все пробелы из js-файлов.

Если у вас есть огромный ViewState, например> 100Kb, попробуйте уменьшить его. Если ViewState по-прежнему огромен, вы можете хранить ViewState на сервере в виде файла ...

http://aspalliance.com/472

Вы также можете использовать кэширование на странице, если страница не слишком динамичная ...

http://msdn.microsoft.com/en-us/library/06bh14hk.aspx

1

Вы также можете ссылаться на общие библиотеки js и css на доверенные интернет-магазины. Например, если вы добавляете jquery как <script src="http://code.jquery.com/jquery-latest.js"></script>, файл jquery, вероятно, был кэширован браузером клиента из-за другого веб-сайта, который ссылается на этот адрес раньше, даже если он кэшируется из-за вашего веб-сайта. Этот способ может иметь плюсы и минусы, но есть такой способ. Также я не знаю, изменится ли ответ YSlow таким образом.

+0

Про, как вы описали, con - дополнительный удар по dns-lookup, если клиент ничего не видел из этого домена. Pro сильно перевешивает con, если используется несколько файлов из одного домена. Я не знаю, изменяет ли реакция YSlow, но кто заботится - инструменты должны работать на нас, а не на инструменты. –

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