From 4ed89604e095b9860d98a9125d76a9c344fa6061 Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Fri, 13 Sep 2024 07:09:47 +0300 Subject: [PATCH] Fingerprint.md --- dev/architecture/Fingerprint.md | 28 +++++++++++++++++++ dev/architecture/highload/Инвалидация кэша.md | 2 +- .../Кэширование на стороне браузера.md | 2 +- meta/zero/00 Git.md | 8 +++++- meta/zero/00 Разработка.md | 4 +++ 5 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 dev/architecture/Fingerprint.md diff --git a/dev/architecture/Fingerprint.md b/dev/architecture/Fingerprint.md new file mode 100644 index 00000000..c530da02 --- /dev/null +++ b/dev/architecture/Fingerprint.md @@ -0,0 +1,28 @@ +--- +aliases: +tags: + - maturity/🌱 +date: 2024-09-10 +zero-link: + - "[[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]" +parents: + - "[[highload/Инвалидация кэша|Инвалидация кэша]]" +linked: + - "[[../garden/ru/dev/architecture/highload/Кэширование на стороне браузера|Кэширование на стороне браузера]]" +--- +При реализации [[highload/Кэширование на стороне браузера|кэширования на стороне браузера]] важно иметь механизм [[highload/Инвалидация кэша|инвалидации кэша]]. Иначе пользователи могут продолжить видеть неактуальные JS-скрипты и CSS-стили, что приведет к проблемам. + +Самый простой способ побороть эту проблему, это использовать fingerprint файла. То есть, когда файл меняется, вы меняете его название. Делается это обычно добавлением какого-нибудь префикса/суфикса к названию файла. + +Например у нас есть файл стилей `style.css`, мы можем посчитать для него MD5 хэш и добавить его в название. Тогда у нас получится следующее название: `style.e626dd36e0085927f334adbe3eb38e7a.css`. + +При любом изменении файла MD5 хэш должен пересчитываться. Таким образом при изменении файла у него будет другое название, и браузер будет вынужден скачать его в любом случае. +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]] +**Родитель**:: [[highload/Кэширование на стороне браузера|Кэширование на стороне браузера]] +**Источник**:: [[highload/Инвалидация кэша|Инвалидация кэша]] +**Создана**:: [[2024-09-10]] +**Автор**:: +### Дополнительные материалы +- \ No newline at end of file diff --git a/dev/architecture/highload/Инвалидация кэша.md b/dev/architecture/highload/Инвалидация кэша.md index d7c318a4..b99bd28d 100644 --- a/dev/architecture/highload/Инвалидация кэша.md +++ b/dev/architecture/highload/Инвалидация кэша.md @@ -23,7 +23,7 @@ linked: - Опасно из-за риска мгновенной инвалидации и сопутствующей [[Перестройка кэша|перестройки кэша]] - Использование [[../../algorithm/Алгоритмы вытеснения|алгоритмов вытеснения]] -Дополнительно для работы со статическими файлами можно отменить [[../../../../../_inbox/Fingerprint|Fingerprint]]. +Дополнительно для работы со статическими файлами можно отменить [[../Fingerprint|Fingerprint]]. Один из подходов это инвалидация по времени. Для кэшированных данных устанавливается TTL, и по прошествию времени кэш удаляется. Такое вариант подходит для редко изменяемых данных, устаревание которых не приводит к серьезным проблемам в бизнес-логике, например словари. При таком варианте важно подобрать оптимальное время жизни кэша, слишком маленькое время жизни будет давать плохую производительность, слишком большое ухудшит опыт пользователей. В оценке эффективности кэша поможет метрика [[CacheMissRate]]. diff --git a/dev/architecture/highload/Кэширование на стороне браузера.md b/dev/architecture/highload/Кэширование на стороне браузера.md index 3481fb39..d4cb6d51 100644 --- a/dev/architecture/highload/Кэширование на стороне браузера.md +++ b/dev/architecture/highload/Кэширование на стороне браузера.md @@ -31,7 +31,7 @@ linked: Инвалидация: - Самый простой вариант указывать версию в GET параметрах. -- Для статики можно использовать [[Fingerprint]] +- Для статики можно использовать [[../Fingerprint]] *** ## Мета информация diff --git a/meta/zero/00 Git.md b/meta/zero/00 Git.md index fbdcdd63..ea0bcfe3 100644 --- a/meta/zero/00 Git.md +++ b/meta/zero/00 Git.md @@ -6,4 +6,10 @@ zero-link: title: Git --- - [Удаление .DS_Store из Git репозитория](../../dev/git/Удаление%20.DS_Store%20из%20Git%20репозитория.md) -- [Откатываем git reset hard в Idea](../../dev/git/Откатываем%20git%20reset%20hard%20в%20Idea.md) \ No newline at end of file +- [Откатываем git reset hard в Idea](../../dev/git/Откатываем%20git%20reset%20hard%20в%20Idea.md) +- [00 Снипеты для Git](../../garden/ru/meta/zero/00%20Снипеты%20для%20Git.md) + +Изменение места создания папки `.git`: +```bash +git init --separate-git-dir=/path/to/my-git-storage /path/to/my-project +``` \ No newline at end of file diff --git a/meta/zero/00 Разработка.md b/meta/zero/00 Разработка.md index 41e3d5c4..fef749b4 100644 --- a/meta/zero/00 Разработка.md +++ b/meta/zero/00 Разработка.md @@ -1,6 +1,10 @@ --- tags: - type/zero-link +title: Разработка +aliases: + - Разработка +zero-link: --- - [Java разработка](00%20Java%20разработка.md) - Архитектура