Waarom voelt Immich minder responsief aan op verschillende clients?

Eva Wong is de Technisch Schrijver en en vaste knutselaar bij ZimaSpace. Een levenslange geek met een passie voor homelabs en open-source software, zij is gespecialiseerd in het vertalen van complexe technische concepten naar toegankelijke, praktische handleidingen. Eva gelooft dat zelf-hosting leuk moet zijn, niet intimiderend. Met haar tutorials stelt ze de community in staat om hardware-setup te ontrafelen, van het bouwen van hun eerste NAS tot het beheersen van Docker-containers.

Immich kan op één client trager aanvoelen doordat rendering aan de clientzijde, het decoderen van afbeeldingen, de cachestatus en het netwerkpad extra werk toevoegen nadat de server heeft geantwoord.

Een gezin kan dezelfde bibliotheek bekijken vanuit een desktopbrowser, een oudere telefoon en een tablet, terwijl de Immich-server, opslag en database ongewijzigd blijven. Toch kan één apparaat tijdlijnen of voorbeelden later openen, omdat het end-to-endverzoek ook werk omvat dat buiten de server plaatsvindt. De nuttige vergelijking is daarom de reactietijd van de server tegenover de extra tijd die elke client nodig heeft om het resultaat te ontvangen, te decoderen, te cachen en te tekenen.

De client verandert het werk nadat Immich heeft geantwoord

Een Immich-verzoek eindigt niet wanneer de server JSON, een thumbnail-URL of een afbeeldingsrespons heeft voorbereid. De client moet die respons nog verwerken, de interface bijwerken, rendering inplannen en reageren op gebruikersinvoer. Een snelle server kan daarom samengaan met een traag aanvoelende client wanneer het apparaat of de browser extra tijd nodig heeft om de geretourneerde gegevens om te zetten in een zichtbaar, interactief scherm.

Dat onderscheid is vooral belangrijk in browsers, waar JavaScript, gebeurtenisafhandeling, stijlberekening, layout en een groot deel van het tekenen concurreren om werk op de hoofdthread. Als een oudere telefoon of een drukke browser die thread langer bezet houdt, kunnen tikken en scrollen vertragen, ook al voltooide de Immich-API ongeveer even snel als op een snellere desktop.

Daarom geeft alleen het vergelijken van server-CPU of databaselatentie geen volledig beeld van de ervaring. De bespreking van native clients en browserclients door ZimaSpace laat hetzelfde systeemprincipe zien: één backend kan verschillende uitvoerpaden aan de clientzijde bedienen. Bij Immich is de eerste diagnostische vraag of de vertraging optreedt voordat de respons aankomt of nadat de client met de verwerking ervan begint.

Het renderen van afbeeldingen kan snelle reacties traag laten aanvoelen

Bij het bekijken van foto's is het verschil tussen clients duidelijker, omdat een galerij niet alleen uit tekst en API-metadata bestaat. Een client kan veel thumbnails of een grotere voorbeeldweergave opvragen, sommige daarvan in het geheugen bewaren, gecomprimeerde afbeeldingsgegevens decoderen, ze schalen voor de viewport en meerdere afbeeldingen samenvoegen terwijl de gebruiker blijft scrollen. De hoeveelheid en timing van dat lokale werk kan sterk verschillen per apparaat, zelfs wanneer ze hetzelfde Immich-middel opvragen.

Gecomprimeerde formaten zoals JPEG en WebP moeten worden gedecodeerd voordat pixels kunnen worden weergegeven. Snellere CPU's, beter geoptimaliseerde decoders, meer beschikbaar geheugen en verschillende browserengines kunnen die fase verkorten. Op een zwakkere client kan het netwerk al klaar zijn terwijl decoderen en tekenen het deel vormen waarop de gebruiker daadwerkelijk wacht.

De praktische consequentie is dat een grotere of scherpere voorbeeldweergave niet gratis is alleen omdat de server die snel kan genereren. Afbeeldingen met een hogere resolutie vereisen meer geheugen voor gedecodeerde pixels en meer werk om te schalen en te tekenen. Als één client vooral traag wordt bij het openen van volledige voorbeelden of het snel scrollen door dichte tijdlijnen, terwijl eenvoudige metadataschermen responsief blijven, is het pad voor het renderen van afbeeldingen een waarschijnlijkere verklaring dan een capaciteitslimiet die de hele server betreft.

Een warme cachestatus verandert de snelheid bij herhaald bezoek

Een client die al door een album heeft gebladerd, kan thumbnails, scripts, metadata of gedecodeerde bronnen hergebruiken die een nieuwe client nog moet ophalen en verwerken. Daardoor verloopt een tweede ronde sneller, maar dat betekent niet dat de server plotseling meer capaciteit heeft. Het betekent dat een deel van het verzoekspad is weggevallen, omdat de client vanuit een warmere toestand begon dan tijdens de eerste ronde.

Uit echte browseronderzoeken blijkt dat cachehitpercentages verschillen per browser, versie, apparaat en tijdstip. De exacte percentages van Facebook zijn geen Immich-benchmark, maar het mechanisme is relevant: twee clients kunnen dezelfde server bereiken met een verschillende lokale cachegeschiedenis. Een desktopbrowser met een warme cache kan daardoor veel responsiever lijken dan een pas geïnstalleerde telefoonapp, zonder dat dit bewijst dat een van beide clients inherent sneller is.

Cache kan ook misleidende voor-en-na-tests veroorzaken. Als je hetzelfde album meerdere keren vernieuwt, kan download- en verwerkingswerk uit latere runs verdwijnen, waardoor de snelste run vaak hergebruik meet in plaats van een representatieve gezinssituatie. Als je clients wilt vergelijken, leg dan zowel een koud of pas geopend pad als een herhaalpad vast; het verschil daartussen levert op zichzelf nuttig bewijs over de mate waarin elke client afhankelijk is van lokaal hergebruik.

-15% OFF
Single board computer zimaboard2

Wanneer clientverschillen de vertraging niet meer verklaren

Clientverschillen zijn niet langer de belangrijkste verklaring wanneer meerdere verder verschillende clients onder dezelfde belasting tegelijkertijd trager worden. Als een desktopbrowser, telefoon en tablet allemaal langer wachten op tijdlijngegevens of preview-responsen terwijl server-CPU, opslaglatentie, databaseactiviteit of netwerkgebruik stijgt, is de gedeelde infrastructuur een waarschijnlijkere beperking van de responsiviteit dan een implementatie van één specifieke client.

Bij end-to-endtiming moet je naar meer kijken dan naar het onderdeel dat het eenvoudigst te meten lijkt. Een latentieanalyse van Datadog laat zien dat roundtriplatentie netwerkoverdracht, proxies, verbindingspools en het decoderen door de applicatie kan omvatten, dus niet alleen de database zelf. Hetzelfde principe geldt voor Immich: een gezond databasecijfer kan vertraging elders tussen het begin van het verzoek en een gerenderd resultaat niet uitsluiten.

Een nuttige grenscontrole is symmetrie. Als slechts één client traag is terwijl een andere op hetzelfde LAN en met hetzelfde album snel blijft, verdienen clientuitvoering, caching of lokaal netwerkverkeer meer aandacht. Als elke client ongeveer tegelijkertijd dezelfde latentiegrens overschrijdt, vooral tijdens imports, het genereren van thumbnails, back-ups of andere hostactiviteiten, is de verklaring verschoven van clientvariatie naar een gedeelde beperking in server, opslag of netwerk.

Gebruik een gecontroleerde clienttest om de grens te vinden

Kies één representatief album en houd de serverversie, netwerklocatie, account, fotoset en status van achtergrondtaken constant. Test elke client afzonderlijk en leg drie waarneembare tijden vast: het laden van de eerste tijdlijn, het openen van dezelfde grote voorbeeldweergave en snel scrollen door een vast fotobereik. Noteer ook of de server tijdens elke run een piek in het gebruik laat zien, want een clientvergelijking is ongeldig als de backendbelasting tussen de metingen verandert.

Voer elke client eenmaal uit vanuit een bewust koude toestand en direct daarna opnieuw. Bij prestatietests worden resultaten voor het eerste en herhaalde bezoek vaak afzonderlijk bekeken, omdat gevulde caches werk uit latere verzoeken verwijderen. Bij Immich laat het verschil van koud naar warm zien hoeveel hergebruik de ervaring verandert, terwijl het verschil tussen clients onder dezelfde cacheconditie verschillen blootlegt die waarschijnlijker lokaal bij het apparaat of de applicatie liggen.

Beschouw een verschil alleen als clientgebonden wanneer het zich in ten minste drie runs herhaalt en de snellere client sneller blijft terwijl server- en netwerkomstandigheden vergelijkbaar blijven. Als alle clients tegelijk slechter presteren, stop dan met het afstellen van de client en onderzoek het gemeenschappelijke pad. Als alleen acties met veel afbeeldingen uiteenlopen, richt je dan op decoderen en renderen. Als het verschil alleen bij de eerste run optreedt, is cachestatus — niet duurzame servercapaciteit — de beter verdedigbare conclusie.

Tech & AI HUB

Meer om te lezen

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.