Лучший способ предотвратить кеширование файлов JavaScript браузером

Начиная с .NET 4.0 вы можете использовать ExpressionVisitor , чтобы найти свойства:

class ExprVisitor : ExpressionVisitor {
    public bool IsFound { get; private set; }
    public string MemberName { get; private set; }
    public Type MemberType { get; private set; }
    protected override Expression VisitMember(MemberExpression node) {
        if (!IsFound && node.Member.MemberType == MemberTypes.Property) {
            IsFound = true;
            MemberName = node.Member.Name;
            MemberType = node.Type;
        }
        return base.VisitMember(node);
    }
}

Вот как вы используете этого посетителя:

var visitor = new ExprVisitor();
visitor.Visit(expr);
if (visitor.IsFound) {
    Console.WriteLine("First property in the expression tree: Name={0}, Type={1}", visitor.MemberName, visitor.MemberType.FullName);
} else {
    Console.WriteLine("No properties found.");
}

22
задан Marcus Leon 17 November 2010 в 16:45
поделиться

3 ответа

Если Причина, по которой мы хотим предотвратить кэширование, состоит в том, чтобы гарантировать, что более новая версия файлов загружается, когда мы делаем новую версию. , вы хотите, чтобы новая js загружалась, когда ЕСТЬ НОВАЯ версия не всегда.

Для этого вы хотите, чтобы значение "ts" было связано с файлом, а не со временем дня. Вы можете использовать одну из этих систем:

  1. ts = метка времени файла
  2. ts = MD5 (или любая другая контрольная сумма) файла
  3. ts = версия кода. Если у вас есть сценарий, который выполняет развертывание, убедитесь, что он добавляет код версии (или дату выпуска) в некоторый включаемый файл, который будет присвоен ts.

Таким образом, браузер будет перезагружать файл, только если он новый и не всегда.

13
ответ дан 29 November 2019 в 03:49
поделиться

В целях отладки установите панель инструментов веб-разработчика для FireFox и активируйте там «деактивировать кэш»

Обновление:
Когда у вас есть Установив FireBug, вы можете отключить кэширование, а также в настройках вкладки сети .

1
ответ дан 29 November 2019 в 03:49
поделиться

Если вы можете включить Java Servlet Filter в свое приложение, вот рабочее решение: CorrectBrowserCacheHandlerFilter.java

По сути, когда ваш браузер запрашивает статические файлы, сервер будет перенаправлять все запросы к тому же, но с параметром запроса хеша (например, ?v=azErT), который зависит от содержимого целевого статического файла.

При этом браузер никогда не будет кешировать статические файлы, объявленные, например, в вашем index.html (потому что всегда будет получать 302 Moved Temporarily), но будет только кешировать файлы с хеш-версией (сервер ответит 200 ] для них). Таким образом, кэш браузера будет эффективно использоваться для тех статических файлов с хэш-версией.

Отказ от ответственности: я автор CorrectBrowserCacheHandlerFilter.java.

0
ответ дан 29 November 2019 в 03:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: