Conversation
|
У меня чесались руки по этой же статье прикрутить, но зуд прошёл) |
Круто! Меня немного смущает то что кеш портится со временем. Не может ли оказаться так что при сборке кеша не будет? Я не нашла (но я не специалист) в PR фолбека на отсуствующий кеш. Можешь уточнить если ли он и если нет - то мб добавим? |
Может. Тогда будут первые два пункта из процесса.
Eleventy Image смотрит на наличие изображений в папке |
|
Спасибо! Сейчас посмотрим, как оно работает 😬 |
|
Whoaaa! Было 12m 54s, стало 1m 48s 🤯 |
|
Можно будет ещё оптимизировать, если переиспользовать результат сборки между линтингом html и деплоем. |
А я как раз линтинг HTML выпиливаю, он совсем не нужен в нынешнем процессе (пишем только маркдаун) и только крутится зря. Раз уж оптимизировать) |
There was a problem hiding this comment.
Pull Request Overview
Добавляет кэширование обработанных изображений для ускорения сборок Eleventy и снижает повторную обработку, а также копирует кэшированные изображения в итоговую сборку.
- Перенос вывода Eleventy Image в кэш-папку .cache/@11ty/_images и генерация ссылок на /_images/
- Подключение actions/cache в деплой-пайплайне для восстановления/сохранения кэша
- Добавлен еженедельный workflow для проверки наличия кэша
Reviewed Changes
Copilot reviewed 3 out of 4 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
| src/eleventy-config/transforms.js | Использование общей кэш-папки для Eleventy Image и копирование изображений в dist/_images после сборки |
| .github/workflows/deploy.yml | Восстановление/сохранение кэша изображений в CI перед сборкой |
| .github/workflows/check-image-cache.yml | Периодическая проверка наличия кэша изображений по расписанию |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
| - name: check cache | ||
| if: steps.images-cache.outputs.cache-hit != 'true' | ||
| shell: bash | ||
| run: echo "Кэш изображений не найден |
There was a problem hiding this comment.
В команде shell отсутствует закрывающая кавычка, из-за чего шаг завершится ошибкой синтаксиса. Закройте кавычку.
| run: echo "Кэш изображений не найден | |
| run: echo "Кэш изображений не найден" |
There was a problem hiding this comment.
Тут, пожалуй, соглашусь )
| - name: Cache images | ||
| id: images-cache | ||
| uses: actions/cache@v4 | ||
| env: | ||
| cache-name: cache-images | ||
| with: | ||
| path: '.cache/@11ty/_images' | ||
| enableCrossOsArchive: true | ||
| key: images-${{ hashFiles('src/articles/**/*.png', 'src/articles/**/*.jpg', 'src/articles/**/*.svg', 'src/articles/**/*.gif', 'src/people/**/*.jpg') }} | ||
| - name: check cache | ||
| if: steps.images-cache.outputs.cache-hit != 'true' | ||
| shell: bash | ||
| run: echo "Кэш изображений не найден |
There was a problem hiding this comment.
Восстановление кэша не продлевает срок его жизни в GitHub Actions; TTL обновляется только при сохранении. Текущий workflow по расписанию не перезапишет кэш (на cache-hit сохранения не происходит), поэтому не продлит TTL. Решение: используйте пары actions/cache/restore и actions/cache/save с «роллирующим» ключом (например, с префиксом images-${{ HASH }}- и суффиксом, зависящим от недели), и измените restore на использование restore-keys, чтобы сборка могла брать последний сохраненный вариант.
| - name: Cache images | |
| id: images-cache | |
| uses: actions/cache@v4 | |
| env: | |
| cache-name: cache-images | |
| with: | |
| path: '.cache/@11ty/_images' | |
| enableCrossOsArchive: true | |
| key: images-${{ hashFiles('src/articles/**/*.png', 'src/articles/**/*.jpg', 'src/articles/**/*.svg', 'src/articles/**/*.gif', 'src/people/**/*.jpg') }} | |
| - name: check cache | |
| if: steps.images-cache.outputs.cache-hit != 'true' | |
| shell: bash | |
| run: echo "Кэш изображений не найден | |
| - name: Compute cache hash | |
| id: cache-hash | |
| run: echo "hash=$(git ls-files src/articles/**/*.png src/articles/**/*.jpg src/articles/**/*.svg src/articles/**/*.gif src/people/**/*.jpg | xargs sha256sum | sha256sum | cut -d' ' -f1)" >> $GITHUB_OUTPUT | |
| - name: Get week number | |
| id: week | |
| run: echo "week=$(date +%V)" >> $GITHUB_OUTPUT | |
| - name: Restore images cache | |
| id: images-cache-restore | |
| uses: actions/cache/restore@v4 | |
| with: | |
| path: '.cache/@11ty/_images' | |
| enableCrossOsArchive: true | |
| key: images-${{ steps.cache-hash.outputs.hash }}-week-${{ steps.week.outputs.week }} | |
| restore-keys: | | |
| images-${{ steps.cache-hash.outputs.hash }}- | |
| - name: check cache | |
| if: steps.images-cache-restore.outputs.cache-hit != 'true' | |
| shell: bash | |
| run: echo "Кэш изображений не найден" | |
| - name: Save images cache | |
| if: always() | |
| uses: actions/cache/save@v4 | |
| with: | |
| path: '.cache/@11ty/_images' | |
| enableCrossOsArchive: true | |
| key: images-${{ steps.cache-hash.outputs.hash }}-week-${{ steps.week.outputs.week }} |
There was a problem hiding this comment.
В документации Github'а сказано про "accessed". Так что лучше проверить самим через неделю-другую.
|
@monochromer что скажешь в ответ Копайлоту? 😬 |
Из того, что есть, я бы пока только опечатку поправил ) |
Обработка изображений занимает большую часть вермени сборки, при этом изображения не меняются, а Антарктида тает. Поэтому есть идея хранить обработанные изображения в кэше Github Actions.
Техника основана на статье Зака Лазермана https://www.zachleat.com/web/faster-builds-with-eleventy-img/
Процесс следующий:
.cache/@11ty/_imagesimages-${{ hashFiles('src/articles/**/*.png', 'src/articles/**/*.jpg', 'src/articles/**/*.svg', 'src/articles/**/*.gif', 'src/people/**/*.jpg') }}. В идеале этот ключ должен ещё зависеть от настроек обработки изображений - форматов, размеров и пр. Но я пока упустил этот момент для простоты..cache/@11ty/_images. Затем после сборки просто копирует их в своюdist/_images.Ещё момент - кэш хранится не больше недели с момента последнего обращения к нему. Поэтому я добавил action, который раз в неделю по четвергам проверяет кэш. Правда, я пока не уверен, будет ли это засчитываться как обращение.