![](http://webcf.waybackmachine.org/web/20200919222416im_/https://habrastorage.org/getpro/habr/avatars/371/51f/213/37151f213dce4543faf649cbb6522063.jpg)
Ускоряем кеш проекта в NoVerify (линтер для PHP) в 10 раз
![](https://webcf.waybackmachine.org/web/20200919222416im_/https://habrastorage.org/getpro/habr/upload_files/90a/1c4/716/90a1c47163b0ba28635d4d062a66bbce.jpg)
Одним вечером, обсуждая с Искандером @quasilyte сложности в разработке линтера для PHP на Go, Искандер упомянул, что тесты как-то долго идут при локальном прогоне (около минуты, и, как мне кажется, для Go это довольно долго). Стали копать, и быстро выяснилось, что в основном «тормозят» тесты, которые запускают NoVerify (название линтера) в режиме со включенным race-детектором. На каждый запуск индексируется репозиторий phpstorm-stubs, в котором содержатся все определения встроенных функций/классов/констант, которые есть в PHP, и индексация этого репозитория занимает около 4 секунд на 4-ядерной машине (замечу, что без race detector всё существенно быстрее). Поскольку таких прогонов делается несколько, по одному на каждый тестируемый open-source проект, суммарное время исполнения всех тестов может занимать минуты. NoVerify позиционирует себя как очень быстрый линтер для PHP, поэтому, конечно же, такая производительность несколько печалит и нужно было найти какое-то решение.