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