Dlaczego Home Assistant może działać mniej responsywnie na niektórych klientach?

Eva Wong jest Technicznym pisarzem i stałym majsterkowiczem w ZimaSpace. Całe życie geek z pasją do homelabów i oprogramowania open-source, specjalizuje się w tłumaczeniu skomplikowanych koncepcji technicznych na przystępne, praktyczne przewodniki. Eva wierzy, że samodzielne hostowanie powinno być zabawą, a nie czymś onieśmielającym. Poprzez swoje samouczki umożliwia społeczności rozwiewanie tajemnic konfiguracji sprzętu, od budowy pierwszego NAS po opanowanie kontenerów Docker.

Home Assistant może wydawać się mniej responsywny na jednym kliencie, ponieważ wykonanie po stronie serwera stanowi tylko część całej ścieżki; renderowanie, pamięć podręczna, trasa i aktualizacje zależą od klienta.

Szybki komputer stacjonarny i powolny telefon nie muszą oznaczać niespójnej wydajności Home Assistant Core. Serwer może dostarczać ten sam stan, podczas gdy mobilny WebView potrzebuje więcej czasu na zbudowanie pulpitu, przetworzenie niestandardowych kart, wyświetlenie obrazów lub nadrobienie bieżących zdarzeń. Zdiagnozuj tę różnicę, mierząc osobno czas odpowiedzi serwera i renderowania po stronie klienta, a następnie porównaj ten sam pulpit, adres URL i sieć, zanim zmienisz hosta.

Główna przyczyna często pojawia się dopiero po odpowiedzi Home Assistant Core

Responsywność klienta obejmuje nawiązywanie połączenia, uwierzytelnianie, początkowy transfer danych, wykonywanie kodu JavaScript, układanie komponentów, dekodowanie obrazów, aktualizacje kart, obsługę dotyku oraz ciągłe zdarzenia WebSocket. Core kontroluje tylko część tej sekwencji. Aktualizacja serwera nie naprawi silnika przeglądarki, który jest faktycznym wąskim gardłem, podobnie jak reset pamięci podręcznej nie naprawi powolnego zapytania do bazy danych.

W jednym z przypadków opisanych przez społeczność Home Assistant pulpit działał szybko na komputerze, ale na iOS wielokrotnie znikał i zawieszał się podczas przewijania, co pokazuje, jak renderowanie mobilne może zdominować odczuwalne opóźnienie. Istotną wskazówką było zachowanie zależne od klienta przy tym samym serwerze i pulpicie.

Najpierw porównaj prosty i złożony pulpit na obu klientach. Jeśli oba klienty wykazują takie samo oczekiwanie po stronie serwera, ale tylko jeden ma problemy po otrzymaniu treści, kontynuuj analizę w interfejsie. Jeśli wszystkie klienty działają wolno przed pojawieniem się pierwszych danych, cofnij analizę do Home Assistant, pamięci masowej, sieci, DNS-u lub ścieżki integracji.

Cztery przyczyny różnic w responsywności między klientami

Główne przyczyny to wydajność renderowania klienta, stan pamięci podręcznej, różne trasy połączenia oraz koszt przetwarzania wielu bieżących aktualizacji. Mogą występować jednocześnie, dlatego zmiana jednego ustawienia czasem poprawia objaw, ale nie wyjaśnia całej różnicy. Podczas testów utrzymuj pulpit i serwer bez zmian, sprawdzając każdą zmienną osobno.

Przewodnik projektowania pulpitów wskazuje, że rozbudowane niestandardowe szablony, częste ponowne renderowanie kart i starszy sprzęt klienta mogą znacząco zwiększać koszt renderowania po stronie klienta. Nie chodzi o uniwersalną wartość czasu ładowania, lecz o to, że ten sam serwer może działać inaczej, gdy klient renderuje inną ilość pracy lub ma zupełnie inne zasoby urządzenia.

Skorzystaj z poniższych oznak, aby ustalić, gdzie pojawia się różnica. Przyczyna jest wiarygodna tylko wtedy, gdy jedna kontrolowana zmiana wpływa na powolnego klienta, podczas gdy host Home Assistant i drugi klient pozostają bez zmian. Nie stosuj jednocześnie kilku „optymalizacji wydajności”, ponieważ niszczy to dowody potrzebne do wskazania faktycznej granicy problemu.

Przyczyna 1: Klient ma mniejszą wydajność renderowania

  • Mechanizm: karty, szablony, obrazy i układ strony zużywają zasoby procesora, pamięci i procesora graficznego urządzenia.
  • Oznaka: odpowiedzi serwera są podobne, ale jeden telefon lub tablet przewija, renderuje albo reaguje na dotknięcia z opóźnieniem.
  • JEŚLI–TO: jeśli minimalny pulpit działa szybko na tym samym urządzeniu, główną przyczyną jest obciążenie renderowaniem po stronie klienta.

Przyczyna 2: Różni klienci używają innych zasobów z pamięci podręcznej

  • Mechanizm: przeglądarka, WebView lub aplikacja towarzysząca mogą przechowywać zasoby interfejsu i stan aplikacji w różny sposób.
  • Oznaka: twarde odświeżenie, wyczyszczenie pamięci podręcznej interfejsu lub czysty profil przeglądarki zmienia zachowanie bez zmian po stronie serwera.
  • JEŚLI–TO: jeśli poprawa występuje tylko na czystym kliencie, traktuj stan pamięci podręcznej jako dowód lokalny dla klienta, a nie jako miarę wydajności serwera.

Przyczyna 3: Ścieżki połączenia w rzeczywistości nie są takie same

  • Mechanizm: jeden klient korzysta z wewnętrznego adresu URL, a drugi dociera przez proxy, zdalny adres URL, alternatywny DNS, VPN lub inną ścieżkę Wi-Fi.
  • Oznaka: czas do pierwszej odpowiedzi zmienia się jeszcze przed rozpoczęciem renderowania pulpitu.
  • JEŚLI–TO: jeśli oba klienty zaczynają działać podobnie przy tym samym adresie URL i w tej samej sieci, różnicę powodowała ścieżka, a nie Core.

Przyczyna 4: Natężenie zdarzeń zmienia koszt utrzymywania aktualnego widoku

  • Mechanizm: duży pulpit subskrybuje wiele zmieniających się encji i musi przetwarzać powtarzające się aktualizacje WebSocket.
  • Oznaka: strona działa coraz mniej płynnie po dłuższym czasie otwarcia lub podczas wzmożonej aktywności czujników.
  • JEŚLI–TO: jeśli ograniczenie liczby subskrybowanych kart lub encji generujących częste aktualizacje usuwa opóźnienia, decydującym kosztem po stronie klienta jest przetwarzanie aktualizacji.

Odróżnij pamięć podręczną klienta od wydajności serwera

Ciepła pamięć podręczna może przyspieszać kolejne ładowania dzięki przechowywaniu zasobów interfejsu i stanu aplikacji, dlatego szybsze drugie ładowanie nie dowodzi wysokiej wydajności serwera. Z drugiej strony nieaktualna pamięć podręczna może powodować nieprawidłowe działanie klienta lub sprawiać, że po aktualizacjach działa on wolno. Pamięć podręczna jest więc warunkiem testu, który należy kontrolować, a nie samym wynikiem pomiaru wydajności.

Analiza interfejsu Home Assistant opisuje dużą aktywność zdarzeń WebSocket wraz z powolnym ponownym renderowaniem po powrocie aplikacji Android na pierwszy plan, pokazując, jak natężenie bieżących aktualizacji może wpływać na interfejs po początkowym załadowaniu. Jest to inna ścieżka zasobów niż opóźnienie wykonywania automatyzacji w Home Assistant.

Wykonuj zarówno testy z ciepłą pamięcią podręczną, jak i kontrolowane testy na czystym kliencie. Jeśli zimne ładowanie jest wolne, ale kolejne dotknięcia i aktualizacje działają płynnie, decydujące są zasoby startowe. Jeśli aplikacja działa coraz wolniej im dłużej pozostaje zasubskrybowana, zmierz przetwarzanie zdarzeń i aktualizacje pulpitu. Jeśli reset pamięci podręcznej zmienia zachowanie tylko jednego urządzenia, nie przedstawiaj tego wyniku jako dowodu większej wydajności serwera.

Użyj macierzy klientów z tą samą ścieżką i tym samym pulpitem

Testuj przeglądarkę na komputerze, przeglądarkę mobilną i aplikację towarzyszącą, korzystając z tego samego lokalnego adresu URL w tej samej sieci Wi-Fi, używając jednego minimalnego pulpitu i standardowego pulpitu produkcyjnego. Szczegółowy przewodnik projektowania mobilnych pulpitów wyraźnie traktuje responsywny układ i ograniczenia interfejsu jako kwestie po stronie klienta, dlatego czas połączenia, odpowiedź serwera, pierwsze użyteczne renderowanie i potwierdzenie urządzenia należy rejestrować osobno. W osobnym teście powtórz pomiar dla ścieżki zdalnej.

ZimaSpace wyjaśnia wcześniejszy etap sieciowy w artykule o opóźnieniach DNS w sieci LAN: klient może czekać, zanim aplikacja w ogóle otrzyma żądanie. Połącz te czasy z pomiarami interfejsu, aby nie przypisywać renderowaniu opóźnienia powodowanego przez resolver lub proxy.

Uznaj serwer za sprawny, jeśli wiele klientów wykazuje podobne czasy odpowiedzi API i wywołań usług, nawet gdy czasy renderowania się różnią. Zoptymalizuj pulpit powolnego klienta, gdy jego koszt renderowania lub aktualizacji jest odstający. Eskaluj analizę do Core, pamięci masowej lub wydajności integracji tylko wtedy, gdy opóźnienie występuje przed etapami zależnymi od klienta. Dzięki temu „responsywność” będzie odnosić się do zmierzonego fragmentu ścieżki, a nie do jednego subiektywnego wrażenia z ekranu.

Centrum Technologii i Sztucznej Inteligencji

Więcej do przeczytania

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.