Cache PHP z pilota na wszystkie strony
Po tygodniu obserwacji pilota. Szybkie wejścia na każdej stronie, bez zakupów.
Efekt
Kolejne wejścia 0,2–0,4 s, po przerwie kilka sekund zamiast kilkudziesięciu.
Kto
Zmiana standardu dev; wdrożenie lokalne.
Raport wewnętrzny · 7 listopada 2026
Komputer Adama rozmawia z NAS jedną kolejką, a NAS trzyma kod na wolnych dyskach. Gdy kilka narzędzi naraz przeglądało duże repozytoria, wszystko inne czekało w tej samej kolejce. Część przyczyn usunęliśmy dziś, a do pełnej szybkości potrzebne są jeszcze dwie decyzje.
Od 6 listopada pliki wszystkich projektów leżą na NAS. Na komputerze Adama zostały narzędzia, zależności (vendor, node_modules), historia Git, bazy danych i Docker. Podglądy stron, Mentor, edytory i agenci AI czytają kod z NAS przez sieć, wszyscy przez to samo połączenie.
Sieć jest w porządku: 10 Gb/s i ok. 0,2 ms opóźnienia. Problem leży w liczbie drobnych pytań o pliki. Każde z nich czeka w jednej kolejce, a NAS obsługuje je po kolei.
Strona WordPress przy jednym wyświetleniu sprawdza około 3600 plików. Jeśli każde sprawdzenie trwa ułamek milisekundy, nikt tego nie zauważy. Na wolnych dyskach albo w kolejce za innym programem robią się z tego dziesiątki sekund.
Pierwszy odczyt z dysków NAS jest ok. tysiąc razy wolniejszy od SSD. NAS pamięta odczytane metadane tylko przez kilkadziesiąt minut, więc strona otwierana raz na jakiś czas prawie zawsze trafia na wolny wariant.
Każda przyczyna ma pomiar albo ślad wywołań systemowych. Kolejność odpowiada wpływowi na to, co widzieli użytkownicy.
Narzędzie agenta AI uruchomiło trzy przeglądy repozytorium dużej strony WordPress i samo się zamknęło. Procesy pracowały dalej przez 69 minut, choć nikt nie czekał na ich wynik. Razem z innymi zadaniami trzymały w kolejce do NAS od 26 do 105 żądań. Każdy odczyt pliku przez stronę czekał wtedy 40–150 ms. Stąd wcześniejszy pomiar: 200 plików PHP w 471 s.
Po zakończeniu tych procesów kolejka spadła do zera, a odczyt 100 plików PHP przyspieszył z 14,6 s do 0,27 s. Ta sama praca przez osobne połączenie z NAS trwała w zatorze 0,7–1 s zamiast 9–20 s.
Indeksy Git zostały na SSD z danymi starego dysku. Dla Gita każdy plik wyglądał na podejrzany, więc każdy przegląd czytał i porównywał całą zawartość repozytorium przez sieć. Agenci robią takie przeglądy w tle co kilkanaście sekund i nigdy nie zapisują wyniku. Dotyczyło to 10 repozytoriów, w tym czterech stron po 13–25 tys. plików.
Odświeżyliśmy indeksy. Przegląd największych repozytoriów nadal trwa 2,5–9 minut, ale nie czyta już całych plików.
Ustawienie opcache wymagane w standardzie dev każe sprawdzić datę każdego dołączanego pliku. Przez 60 sekund pamięta to system, potem wszystkie ~3600 pytań idzie do NAS naraz. Pierwsze wejście po minucie przerwy trwało 20–70 s albo kończyło się błędem 504.
Ślad jednego wejścia: 4297 wywołań na plikach z NAS, w tym 3603 sprawdzenia dat (sama wtyczka SEO: 1335).
Pierwsze listowanie katalogu kosztuje ok. 7,6 ms na plik, powtórne 48 razy mniej. Ten sam katalog potrafił się listować raz 0,3 s, raz 16 s, zależnie od tego, co akurat robił NAS.
Kosz NAS w głównym folderze nie był wykluczony z Gita, a wylistowanie go trwa ponad 90 s. Brama podglądów przy budzeniu strony ponawiała zapytanie co 10 s i zostawiała w tle kolejne zimne starty. Restart bramy przegląda katalogi wszystkich stron przez 25 minut. W Mentorze serwer API sprawdza przy każdym żądaniu katalog public na NAS.
Wszystkie projekty dzielą jedną kolejkę do NAS. Ciężka operacja w jednym projekcie spowalnia każdy inny, także u innych osób.
| Czynność | Co się dzieje dziś | Po pełnym wdrożeniu planu |
|---|---|---|
| Podgląd strony klienta | Kolejne wejścia do ok. 1 s, po przerwie 20–70 s albo 504. | Kolejne wejścia 0,2–0,4 s. Pierwsze wejście po uśpieniu nadal wolniejsze, dopóki NAS nie dostanie SSD. |
| Agenci AI na repozytorium strony | Każdy agent co kilkanaście sekund prosi Git o stan repozytorium. Na repozytorium z całym WordPressem to minuty pracy NAS, a kilku agentów naraz zapycha kolejkę dla wszystkich. | Osobne połączenie dla narzędzi, strażnik osieroconych procesów, mniejsze repozytoria tam, gdzie śledzony jest tylko motyw. |
| Kilka projektów naraz | Testy, przeglądy Git i kopie w jednym projekcie spowalniają podglądy pozostałych. | Podglądy stron na osobnym połączeniu, niezależne od narzędzi. |
| Mentor | API ok. 190 ms, harmonogram co minutę uruchamia procesy czytające kod z NAS. | Pliki statyczne poza NAS, cache PHP dla procesów CLI: kilkadziesiąt ms. |
| Edycja z innego komputera (np. Mac przez SMB) | Zmiana widoczna do 60 s później; w pilocie do 15 min. | Powiadomienia o zmianach z NAS skracają to do sekund. |
| Restart narzędzi i usług | Restart bramy podglądów obciąża NAS przez ok. 25 min. | Brama bierze listę katalogów z osobnego połączenia; restarty krótkie. |
Na jednej stronie WordPress (13,5 tys. plików) PHP przestał sprawdzać daty plików przy każdym wejściu. Brama podglądów sama zgłasza PHP, który plik się zmienił, i tylko ten plik jest kompilowany od nowa. Gdy nie wiadomo, co się zmieniło, PHP przeładowuje całość, co trwa dłużej, ale daje pewność. Test edycji: zmiana pojawiła się na stronie, a po cofnięciu zniknęła.
Po pilocie jedno wejście wysyła do NAS 32 zapytania zamiast 4297. Pozostały głównie sprawdzenia plików, których nie ma. System nie zapamiętuje takiej odpowiedzi dłużej niż sekundę, więc przy obciążonym NAS nadal kosztują czas.
Każda zmiana ma kopię i opisany sposób cofnięcia w karcie zadania. Nie przenosiliśmy plików i nie usuwaliśmy danych.
Od największego efektu przy najmniejszym koszcie.
Po tygodniu obserwacji pilota. Szybkie wejścia na każdej stronie, bez zakupów.
Efekt
Kolejne wejścia 0,2–0,4 s, po przerwie kilka sekund zamiast kilkudziesięciu.
Kto
Zmiana standardu dev; wdrożenie lokalne.
Podglądy stron przestają czekać za Gitem, testami i agentami.
Efekt
Koniec zatorów, w których jedna operacja blokuje wszystkich.
Kto
Administrator uruchamia jeden przygotowany skrypt (z kopią i cofnięciem).
Osobna pula SSD albo cache SSD w NAS. Najpierw trzeba sprawdzić model, dyski i wolne sloty.
Efekt
Pierwszy odczyt pliku z kilku milisekund do ułamka milisekundy. Pomaga też Gitowi i stronom po uśpieniu.
Kto
Właściciel NAS: sprawdzenie w panelu UGOS, ewentualny zakup.
Strażnik osieroconych procesów Git, .gitignore w repozytoriach, które śledzą tylko motyw (jedno ma 118 plików śledzonych i 17 tys. nieśledzonych), poprawki w Mentorze.
Efekt
Mniej pracy w tle i mniejsze ryzyko powtórki dzisiejszego zatoru.
Kto
Lokalnie; .gitignore za zgodą opiekuna projektu.
Gdyby powyższe nie wystarczyło. NAS zostaje głównym miejscem plików, a strony czytają kopię synchronizowaną w sekundach.
Efekt
Czasy jak przed migracją, niezależnie od NAS.
Kto
Zmiana standardu „pliki stron fizycznie na NAS”; zajmuje miejsce na SSD.