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

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

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

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

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

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

раздел.

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

1 Ответ

0 голосов
/ 22 января 2019

Маяк 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), но маловероятно, что сопоставление с точным значением более полезно, чем выбор года.

...