Wir müssen gute Nachbarn sein!

13. Juni 2024

|

Marcus

Smartphones und Tablet werden zwar jedes Jahr immer schneller und besser aber dennoch gibt es eine Herausforderung für uns Architekten, Programmierer und Designer: Wir müssen wieder sorgsamer mit knappen Ressourcen (Speicher, CPU, Akku) umgehen, sonst werden unsere Apps wahrscheinlich bald von Benutzer:innen gelöscht. Meine Aufforderung hierzu ist:

Wir müssen gute Nachbarn sein!

Obwohl wir alle auch in der realen Welt gute Nachbarn sein sollten, meine ich das natürlich im übertragenen Sinne, schon fast wieder als Metapher. In meiner Wohnnachbarschaft trage ich, wie jede:r andere Bewohner:in zur Lebensqualität 🤘🏼🎶 meiner Stadt, meines Bezirks, meines Viertels, meiner Gegend, meiner Straße, meines Zuhauses oder meines Blocks bei. 🎶🤘🏼 Genauso trägt jede einzelne App zur User Experience eines Smartphones, eines Tablets, einer Smartwatch usw. bei. Es wird erwartet, dass sich alle an „geltende Regeln“ halten. Regelverletzungen werden in realen wie digitalen Nachbarschaften meist recht schnell „geregelt“.

Gute Nachbarn halten sich jedoch nicht nur an die Regeln, sondern unterstützen sich gegenseitig über diese Regeln hinaus, um das Leben in der Gemeinschaft zu verbessern. So parken gute Nachbarn mit eigenem Parkplatz auch auf diesem und belegen nicht die wenigen frei zugänglichen Parkplätze, auf die andere Bewohner ohne eigenen Parkplatz angewiesen sind. Diese guten Nachbarn gehen offensichtlich rücksichtsvoll mit der knappen Ressource Parkplätze um.

Ich habe mir die derzeit laufende Apple World Wide Developer Conference (WWDC) zum Anlass genommen, um in diesem Artikel nur Apple Beispiele zu verwenden. Die vorgestellten Konzepte gelten in gleicher oder sehr ähnlicher Weise aber auch für andere Geräte und Betriebssysteme.

Rücksichtsvoller Umgang mit knappen Ressourcen

Ein rücksichtsvoller Umgang mit knappen Ressourcen wird auch in der App Entwicklung wieder wichtiger. Durch den schnellen technologischen Fortschritt wurden wir in der jüngeren Vergangenheit verwöhnt und sind es gewohnt, dass sich ein Speicher- oder Performance-Problem unserer Software oft mit der nächsten Hardware-Generation quasi von selbst löst („Hit it with Hardware!“).

Ressourcenknappheit im zeitlichen Verlauf

Die Einführung von Smartphones und anderen mobilen Endgeräten hatte zwar zunächst einen ressourcenschonenderen Umgang gefordert, aber auch hier bringt jede neue Hardware-Generation mehr Ressourcen mit sich. Spätestens jedoch mit der Einführung von Wearables und Kleinstgeräten für das Internet of (Every)Thing(s) müssen wir auf Softwareseite wieder schonender mit knappen Ressourcen umgehen. Zu diesen knappen Ressourcen gehören unter anderem Speicherplatz (Disk Space), Hauptspeicher, Rechenleistung und Akku-Kapazität.

Speicherplatz

Obwohl der Speicherplatz auf Mobilgeräten immer größer wird, reicht er meist dennoch nicht aus. Wir speichern nämlich immer mehr Bilder, Apps, Musik usw. auf unseren Geräten. Apple trägt jüngst seinen Teil dazu bei, die knappe Ressource Speicherplatz besser zu nutzen. So benötigt beispielsweise schon jetzt das Betriebssystem nach manchen Updates sogar deutlich weniger Speicherplatz als zuvor, obwohl oftmals sogar neue Features hinzukommen. Eine solche Verschlankung sollten wir auch berücksichtigen, wenn wir für unsere eigenen Apps Updates zur Verfügung stellen.

App Slicing

Um dieses „App Thinning“ für zu unterstützen, stellt Apple mit „Slicing“ schon seit iOS 9 eine Funktionalität zur Verfügung. Apps, die für verschiedene Geräte entwickelt wurden (z.B. iPhone SE, iPhone 15, iPhone 15 Pro Max, iPad mini, iPad, iPad Pro 13″), wurden bisher vollständig auf die unterstützten Geräte übertragen. Zur optimalen Darstellung auf dem jeweiligen Geräte werden hierzu aber mehrere Versionen einer Grafik in unterschiedlichen Auflösungen erstellt. Bisher werden alle Versionen auf jedem Gerät gespeichert. Mit Slicing werden automatisch nur noch genau die Versionen übertragen, die vom jeweiligen Gerät benötigt werden.

Um gute Nachbarn zu sein, sollten wir jedoch diesen neu gewonnen Speicherplatz nicht verschwenden, sondern vielmehr darauf achten, wo wir in unseren eigenen Apps noch zusätzlichen Speicherplatz freisetzen können. Reicht vielleicht mal ein stärker komprimiertes JPG aus oder muss es wirklich immer ein PNG sein? Falls es ein PNG sein muss, reichen vielleicht auch mal die 256 Farben eines 8-Bit PNG?

Wenn möglich, empfehlen wir direkt auf WEBP zu setzen. Dort kann man auswählen, ob man komprimieren oder unkomprimiert speichern möchte. Die Kompression ist zudem deutlich besser als bei JPG. Kleine Dateigrößen sind auch gerade für den Austausch zwischen iPhone und Apple Watch hilfreich. Denn wenn wir auf die Smartwatch sehen, dann wollen wir eins definitiv nicht sehen: Das Lade- bzw. Synchronisations-Symbol. Eine verbesserte Speichernutzung trägt damit auch zu einer besseren Performanz und somit zu einer besseren User Experience bei.

Hauptspeicher und Rechenleistung

Der sorgsame Umgang mit knappen Ressourcen gilt neben dem Speicherplatz ganz genauso für den Umgang mit Hauptspeicher und Rechenleistung (CPU und GPU). Auch hier gilt zunächst, dass die eigene App auf den ersten Blick nichts davon hat, dass sie sorgsam mit diesen Ressourcen umgeht, solange man nicht an die Leistungsgrenze kommt. Dennoch trägt auch die sorgsame Nutzung dieser Ressourcen zur User Experience des Smartphones bei. Benötigt die aktuell (im Vordergrund) benutzte App weitere Ressourcen, so wird auf dem iPhone beispielsweise diejenige App vom Betriebssystem beendet, die momentan im Hintergrund die meisten Ressourcen benötigt.

War das unsere App, dann beeinträchtigt das nicht nur die Ladezeiten für deren nächstes Öffnen, sondern ggf. sogar deren Funktionalität, da Hintergrundoperationen nicht mehr durchgeführt werden können. Wir tun somit gut daran, auf die Ressourcennutzung unserer Apps zu achten (so dass wir zumindest nicht die meisten Ressourcen verbrauchen bzw. verschwenden und damit oben auf der Liste stehen).

Dies ist vor allem bei „echtem“ Multitasking noch wichtiger. Wir können nicht davon ausgehen, dass unsere App alleine im Vordergrund ist, sondern sie muss sich die Ressourcen ggf. mit einer weiteren App teilen. Der eigenen App steht nur ein Drittel, die Hälfte oder der ganze Bildschirm zur Verfügung. Apple empfiehlt hier „Nice-to-Have-Funktionalitäten“ zu opfern, wenn die eigene App derzeit nur zur Hälfte oder einem Drittel angezeigt wird.

Akku-Laufzeit

Der sorgsame Umgang mit Rechenleistung wirkt sich zudem positiv auf die Akkulaufzeit aus. Wir erwarten heute, dass wir unser Smartphone den ganzen Tag lang nutzen können („All-day Battery Life“). Im besten Fall müssen wir es tagsüber nicht aufladen. Dies ist jedoch bei intensiver Nutzung des Geräts leider immer noch nicht möglich. Zwar werden die Akkus immer größer und leistungsfähiger, jedoch müssen wir als Softwareentwickler auch hier unseren Teil dazu beitragen. Mit Bezug auf die Rechenleistung gilt hier die Faustregel „Schneller = weniger Energieverbrauch“.

Wenn wir somit eine rechenintensive Operation durchführen, so braucht eine „naive“ (Algorithmus-) Variante ohne Optimierung am meisten Energie, gefolgt von einer optimierten Operation. Noch weniger Energie benötigt eine Operation, wenn sie parallel von mehreren CPUs ausgeführt werden kann (Multicore-Optimierung). Optimiert man die Operation dann noch durch OpenCL oder GPU Nutzung, so spart man noch mehr Energie. Dies erscheint zunächst nicht offensichtlich, da eine Operation, die parallel mehrere CPUs und die GPU in Anspruch nimmt, natürlich viel mehr Energie benötigt. Laut Apple kann die Operation aber so viel schneller ausgeführt werden, dass es sich am Ende auszahlt. Es lohnt sich somit nicht, einfach naiv jede Operation so umzusetzen, wie man es schon immer gemacht hat, sondern beispielsweise Bibliotheken zu verwenden, die für Multicore-Nutzung optimiert sind.

Schneller = weniger Energieverbrauch. Operationen die bezüglich Multicore, OpenCL und GPU Benutzung optimiert wurden beanspruchen zwar den Prozessor mehr, sind aber deutlich schneller. Operationen mit naiv umgesetzten Algorithmen beanspruchen zwar den Prozessor weniger, durch die lange Rechenzeit wird jedoch am Ende deutlich mehr Akkuleistung verschwendet.

Neben der Multicore-Optimierung gibt es noch weitere Empfehlungen zur Optimierung der Akkulaufzeit:

  • Nur dann transparente Overlays in Videos verwenden, wenn wirklich nötig, da diese Overlays energiesparende Mechanismen aushebeln.
  • Networking (Bluetooth, WLAN, LTE) minimieren. Muss die App wirklich immer im Hintergrund synchronisiert werden, oder reicht es vielleicht die Synchronisation bei der nächsten Benutzung durchzuführen?
  • Sleep Zustand nicht verzögern.
  • Operationen erst dann durchführen, wenn der Benutzer deren Ergebnis benötigt.
  • GPS Nutzung nicht übertreiben. Man muss auch nicht immer gleich alles in der App aktuell halten. Man kann z.B. auch Minutenlang die Position einfach von der Hardware tracken lassen (Motionprocessor) und aktualisiert die App erst später, z.B. sobald die App wieder in den Vordergrund kommt. d.h. verwendet wird.
  • Operationen dann durchführen, wenn der Benutzer das Gerät gerade aktiv verwendet.

Nicht immer das letzte rauspressen

Es wird sich zeigen, ob wir Architekten, Programmierer und Designer gute Nachbarn sein können und (augenscheinlich) uneigennützig unsere Apps bezüglich des Umgangs mit knappen Ressourcen optimieren. Vielleicht pressen wir auch weiterhin alles bis aufs Letzte aus den verfügbaren Ressourcen raus („Nach mir die Sintflut.“).

Hiervor möchte ich auf jeden Fall noch einmal warnen. Es geht nämlich nicht nur um die Optimierung der User Experience des Smartphones für den Benutzer. Ein rücksichtsvoller bzw. rücksichtsloser Umgang mit knappen Ressourcen hat ggf. auch einen Einfluss auf das eigene Business. So kann beispielsweise eine App, die wenig Speicherplatz und Akkulaufzeit „frisst“, momentan sogar ein Alleinstellungsmerkmal (USP) sein. Dies gilt insbesondere für Apps, für die es viele Konkurrenz-Apps gibt, die sich nicht wirklich in ihrer Funktionalität unterscheiden (z.B. Wetter-Apps).

Smartphone-Nutzer:innen haben heute ganz einfach Überblick darüber, welche Apps die Ressourcen ihrer Smartphones verschwenden. Auf dem iPhone werden unter Einstellungen unter „Einstellungen->Batterie“ bzw. „Einstellungen->Allgemein->iPhone-Speicher“ werden alle Apps in einer Rangliste aufgeführt.

Soll eine App gelöscht werden, die zu viel Speicherplatz benötigt, so kann die App direkt dort gelöscht werden. Dazu werden nur 2 Klicks benötigt. Wer jedoch sorgsam mit den knappen Ressourcen umgeht, hat nichts zu befürchten.

Bist du ein guter Nachbar? Was sind deine Top Strategien zum Sparen von Ressourcen? Schreib sie uns in die Kommentare.

Marcus

Bitte teilen

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert