mtime comparison considered harmful



Наткнулся тут на статью 2018 года, о том что использовать mtime (оно же modified time) для инвалидации компиляции (да и в целом любых задач) такая себе идея.



В статье рассматривается пример с make, однако всё описанное можно спокойно транслировать на любой инструмент. В нашем мире очень часто кеширование реализуют именно на основе mtime. Оно и понятно, получить атрибут файла быстрее, чем прочитать его контент и получить хеш от него. Но хеш позволяет переиспользовать кеш между окружениями, в CI и т.д. Ну и само собой, если получать хеш дольше, чем выполнение самой операции, то и кешировать нет смысла.



Благо, сейчас почти у всех инструментов есть возможность передать --cache-strategy metadata, чтобы использовать для кеширования именно контент файла. Такая опция есть в prettier, ESLint, а вот в Stylelint пока нет.



P.S. На статью я наткнулся, когда гулял по интернетам в поисках вариантов кеширования компиляции Elixir, но нашёл только грустное ишью. Так и компилируем по 4 минуты всё приложение 🙁