ПОЧЕМУ Google Insight просит предоставить статические ресурсы с эффективной политикой кэширования изображений с истекшим сроком действия?

Ранее, как я тестировал в Google Insights, он перечисляет несколько изображений, CSS и JS файлов, которые могут быть добавлены до истечения срока годности, по крайней мере, это то, что я понял для этого:

Служите статическим ресурсам с эффективной политикой кэширования

Поэтому я тестирую, добавляя изображение в корзину aws s3 и устанавливая продолжительность на 7 дней. как я проверил в Chrome Dev Tool, он показывает Cache-Control: max-age=604800, Размер говорит, что извлечено из памяти и код состояния равен 304.

Но теперь, когда я снова тестирую информацию о скорости на странице Google, он все еще показывает это конкретное изображение под

Служите статическим ресурсам с эффективной политикой кэширования

раздел.

Если срок действия / длительность добавляется согласно предложенному, почему он все еще показывает изображение здесь? Что-нибудь еще, что я должен сделать, чтобы этот статический файл служил правильно?

1 ответ

Маяк от Google предлагает год, но также объясняет, что его эвристика носит более общий характер, чем жестко заданный предел.

Если вы хотите последовать их совету, проще всего использовать год, хотя меньшее значение должно пройти проверку.

Из примера:

Cache-Control: max-age=31536000

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

Эвристика объясняется как полученная из реальной статистики, а не имеющая конкретное значение:

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

В исходном коде вы можете увидеть, как определяется эвристика:

// Ignore assets that have very high likelihood of cache hit
const IGNORE_THRESHOLD_IN_PERCENT = 0.925;

...

const cacheHitProbability = CacheHeaders.getCacheHitProbability(cacheLifetimeInSeconds);
if (cacheHitProbability > IGNORE_THRESHOLD_IN_PERCENT) continue;

...
static getCacheHitProbability(maxAgeInSeconds) {
// This array contains the hand wavy distribution of the age of a resource in hours at the time of
// cache hit at 0th, 10th, 20th, 30th, etc percentiles.
// Example: a max-age of 12 hours already covers ~50% of cases, doubling to 24 hours covers ~10% more.
...
const RESOURCE_AGE_IN_HOURS_DECILES = [0, 0.2, 1, 3, 8, 12, 24, 48, 72, 168, 8760, Infinity];
assert.ok(RESOURCE_AGE_IN_HOURS_DECILES.length === 12, 'deciles 0-10 and 1 for overflow');

Короче говоря: я считаю, что порог составляет около трех месяцев (около max-age=8337600), но вряд ли совпадение с точным значением более полезно, чем выбор года.

Другие вопросы по тегам