Rozwiązanie, które otwiera się w sekundę z dysku lokalnego, otwiera się w trzydzieści sekund z udziału osiąganego przez tunel. Tunel rzadko jest przyczyną samą w sobie. Zmienia się to, że operacje, które były wywołaniami lokalnymi, stają się synchronicznymi podróżami w obie strony, a edytor wykonuje kilka z nich, zanim pojawi się okno. Poniższy mechanizm wyjaśnia, dlaczego każda jest kosztowna i które można usunąć.

Co edytor robi, gdy plik jest otwarty

Edytor ze śledzeniem zmian utrzymuje subskrypcję każdego otwartego pliku. Wolumen lokalny obsługuje tę subskrypcję z systemu plików bez sieci. Przez udział ta sama funkcja może zdegenerować się do powtarzanych odczytów metadanych, ponieważ model powiadomień nie zachowuje się tak samo przez SMB. Wyłączenie śledzenia zmian jest uczciwym pierwszym eksperymentem, bo usuwa całą klasę żądań bez dotykania tunelu.

System projektów dodaje własny ruch. Ładowanie rozwiązania wylicza katalogi, czyta pliki projektu i może sondować SDK lub pakiety, a każde sondowanie jest podróżą w obie strony, gdy ścieżka jest zdalna. Rozwiązanie z wieloma projektami mnoży tę liczbę, dlatego czas otwierania rośnie szybciej, niż sugerowałyby rozmiary plików.

Wyszukiwania powłoki, które wygasają, zanim pojawi się menu

Windows dokłada drugie źródło zatorów, które nie ma nic wspólnego z IDE. Eksplorator i jego rozszerzenia powłoki co otwarcie menu kontekstowego ponownie rozwiązują drukarki, zamapowane dyski i wcześniej używane skróty. Gdy te cele są w sieci, do której tunel nie dociera, każde rozwiązanie blokuje się do wygaśnięcia limitu czasu, i dopiero wtedy menu się rysuje. Dlatego kliknięcie prawym przyciskiem może zawisnąć na sekundy, podczas gdy sam plik otwiera się normalnie.

Usuń martwe mapowania i kolejki drukowania albo zostaw tylko te, które istnieją w sieci, w której naprawdę jesteś. To samo rozumowanie obejmuje wszystko, co w tle rozwiązuje ścieżkę, w tym listy ostatnich plików i przypięte foldery.

net use
Get-Printer | Select-Object Name, PortName
Measure-Command { Get-ChildItem \files\proj | Out-Null }

Dlaczego wygrywa lokalna kopia robocza

Praca bezpośrednio na udziale to najgorsze ustawienie dla pętli edycji, kompilacji i testów, ponieważ edytor, kompilator i klient kontroli wersji każdy osobno czyta te zdalne pliki. Każdy z nich płaci za własną podróż, a kompilacja płaci raz na plik. Lokalna kopia z wypychaniem przez repozytorium zastępuje powódź drobnych przekroczeń jednym zamierzonym. Łącze nie poprawiło się; liczba przekroczeń runęła.

To zmiana strukturalna, a nie ćwiczenie z dostrajania, i właśnie dlatego działa, gdy ustawienia tunelu nie działają. Ujawnia też tryb awarii: jeśli kompilacja z lokalną kopią nadal jest wolna, udział nigdy nie był problemem.

Przenieś historię jako jeden obiekt

Gdy samo repozytorium musi przekroczyć tunel, wyślij historię w jednym obiekcie, zamiast ją przechodzić. Pakiet to jeden plik, a więc jeden transfer, podczas gdy checkout przechodzący tysiące luźnych obiektów kosztuje tysiące przekroczeń. Mercurial i Git oba obsługują tę formę.

hg bundle --base 9f2c1a7e outgoing.hg
hg unbundle outgoing.hg
git bundle create repo.bundle main
git clone repo.bundle repo

Rewizja bazowa to część, którą trzeba trafić, bo decyduje, ile historii podróżuje. Pakowanie wszystkiego działa i marnuje łącze, a pakowanie od ostatniej wspólnej zmiany przenosi tylko to, czego brakuje drugiej stronie.

Zmierz trzy operacje, zanim obwinisz przepustowość

Zmierz trzy rzeczy osobno: jeden mały plik otwarty, jeden katalog wyliczony, jeden zapis ukończony. Jeśli wszystkie trzy są wolne proporcjonalnie do liczby plików, kosztem są podróże w obie strony. Jeśli jedno się zacina, a pozostałe są w porządku, podejrzewaj limit czasu wobec nieosiągalnego zasobu, a nie przepustowość. Zanotuj, w jakiej sieci było urządzenie przy każdym uruchomieniu, bo laptop, który łączy się ponownie z innym profilem, może zmienić odpowiedź między próbami.

Potem powtórz te same trzy wobec lokalnej kopii projektu. Różnica to cena udziału, i to liczba, którą trzeba przytoczyć, gdy ktoś proponuje szybsze łącze jako rozwiązanie.

Powiązane artykuły