This commit is contained in:
parent
ae3ddb3a5a
commit
4ed89604e0
28
dev/architecture/Fingerprint.md
Normal file
28
dev/architecture/Fingerprint.md
Normal file
@ -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]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
-
|
@ -23,7 +23,7 @@ linked:
|
||||
- Опасно из-за риска мгновенной инвалидации и сопутствующей [[Перестройка кэша|перестройки кэша]]
|
||||
- Использование [[../../algorithm/Алгоритмы вытеснения|алгоритмов вытеснения]]
|
||||
|
||||
Дополнительно для работы со статическими файлами можно отменить [[../../../../../_inbox/Fingerprint|Fingerprint]].
|
||||
Дополнительно для работы со статическими файлами можно отменить [[../Fingerprint|Fingerprint]].
|
||||
|
||||
Один из подходов это инвалидация по времени. Для кэшированных данных устанавливается TTL, и по прошествию времени кэш удаляется. Такое вариант подходит для редко изменяемых данных, устаревание которых не приводит к серьезным проблемам в бизнес-логике, например словари. При таком варианте важно подобрать оптимальное время жизни кэша, слишком маленькое время жизни будет давать плохую производительность, слишком большое ухудшит опыт пользователей. В оценке эффективности кэша поможет метрика [[CacheMissRate]].
|
||||
|
||||
|
@ -31,7 +31,7 @@ linked:
|
||||
|
||||
Инвалидация:
|
||||
- Самый простой вариант указывать версию в GET параметрах.
|
||||
- Для статики можно использовать [[Fingerprint]]
|
||||
- Для статики можно использовать [[../Fingerprint]]
|
||||
|
||||
***
|
||||
## Мета информация
|
||||
|
@ -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)
|
||||
- [Откатываем 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
|
||||
```
|
@ -1,6 +1,10 @@
|
||||
---
|
||||
tags:
|
||||
- type/zero-link
|
||||
title: Разработка
|
||||
aliases:
|
||||
- Разработка
|
||||
zero-link:
|
||||
---
|
||||
- [Java разработка](00%20Java%20разработка.md)
|
||||
- Архитектура
|
||||
|
Loading…
Reference in New Issue
Block a user