Code optimieren in einer Welt, die nicht optimieren will

Veröffentlicht: 2019-11-22

Vorzeitige Optimierung ist die Wurzel allen Übels.

Unter Entwicklern ist das ein geläufiges Sprichwort. Es ergibt Sinn. Eine vorzeitige Optimierung kann bedeuten, dass die Arbeit später wiederholt werden muss, und Zeit ist die begrenzteste Ressource des Entwicklers. Es kann bedeuten, dass wertvolle Zeit für die Optimierung von Szenarien aufgewendet wird, die für die Benutzer eines Produkts noch nicht existieren. Es kann bedeuten, Code zu schreiben, der schwerer zu verstehen ist, mit unklaren Leistungssteigerungen.

Als ich vor etwa einem Jahr am WordPress-Theme-Review-Team teilnahm, stieß ich erneut auf diesen Ratschlag. Vorzeitige Optimierung ist die Wurzel allen Übels. Die Antwort richtete sich an einen Designautor, der die Anzahl und das Gewicht der Skripte verringern wollte, die sein Design laden musste. Einerseits könnte der Theme-Autor ein 1,29-kb-Skript ohne Abhängigkeiten laden, um die Arbeit zu erledigen. Die andere Möglichkeit bestand darin, das jQuery-abhängige Skript zu verwenden, das im Kern von WordPress für insgesamt 105 kb enthalten ist, da „die meisten“ WordPress-Sites ohnehin jQuery laden.

Für mich war die Antwort einfach. Verwenden Sie das kleinere Skript, es sei denn, das Kernskript wurde bereits auf dem Frontend geladen. An voreilige Optimierung habe ich nicht gedacht. Ich hielt es für eine einfache alte, 08/15-Alltagsoptimierung.

Entwickler sollten eine vorzeitige Optimierung nicht mit dem Konzept verwechseln, frühzeitig im Prozess intelligente Designentscheidungen zu treffen. Sie sollten auch nicht bis zur letzten Entwicklungsphase warten, um mit der Optimierung zu beginnen, zu einer Zeit, in der der Schwerpunkt darauf liegt, ein Produkt an die Endbenutzer zu bringen. Das ist ein Zeichen für einen schlechten Produktdesignprozess.

Im vergangenen Jahr blieb dieses Gespräch bei mir hängen. Es hat mir geholfen, einen erschreckenden Trend besser wahrzunehmen, nicht nur in der WordPress-Entwickler-Community, sondern bei der Webentwicklung im Allgemeinen. Viel zu oft sind Entwickler so weit von normalen Benutzern entfernt und die Technologie, auf die sich diese Benutzer verlassen, ist kaum mehr als ein nachträglicher Einfall. Stattdessen sollte es immer im Vordergrund jedes Entwicklers stehen.

Das übermäßige Vertrauen in dieses missbrauchte Zitat hat dazu beigetragen, den Trend voranzutreiben, das Seitengewicht in Megabyte statt in Kilobyte zu messen. Es wird zu oft als pauschale Rechtfertigung dafür verwendet, in der Entwicklungsphase keine Optimierung vorzunehmen und dies durch Dateikomprimierung und Caching in der Produktion auszugleichen.

Ein Teil des Schreibens von Qualitätscode besteht darin, diesen Code in jeder Phase des Entwicklungsprozesses zu optimieren. Es geht darum, schwierige Entscheidungen zu treffen, um unnötige Dinge zu streichen, wenn die Software zusammenkommt. Caching sollte der letzte Ausweg sein, nachdem alles andere bereinigt wurde.

Bei der vorzeitigen Optimierung geht es eher darum, zu versuchen, zu optimieren, wenn es keine klaren Gewinne gibt, oder an Mikrooptimierungen zu arbeiten, die das Design der Software mit wenig bis gar keinem Nutzen verändern. Das bedeutet nicht, offensichtliche Leistungssteigerungen während der Entwicklung zu übersehen.

Nicht jeder ist im Gigabit-Internet

Die meisten Entwickler, die ich kenne, nutzen superschnelle Internetverbindungen, oft mit Download-Geschwindigkeiten von 1 Gbit/s und unbegrenztem Datenvolumen. In dieser Situation vergisst man leicht, dass große Teile der Welt immer noch über langsame Verbindungen mit Datenbeschränkungen verfügen.

Einige assoziieren langsame Verbindungen sogar mit Drittweltländern, in denen Millionen von Menschen 2G-Mobiltelefontechnologie nutzen. Es gibt jedoch große Teile der Vereinigten Staaten und anderer Industrieländer, die keine direkten Kabel- oder DSL-Leitungen haben, die in Städten und Vororten allgemein verfügbar sind.

Diese Trennung ist direkt ersichtlich, wenn andere Entwickler Chats mit mir initiiert haben. In den letzten Jahren wurde es immer häufiger, dass sie um einen Video-Chat baten. Es wird nicht einmal hinterfragt, ob so etwas möglich ist (Videochats sind für mich bestenfalls unzuverlässig). Die Möglichkeit, jederzeit per Video zu chatten, ist selbstverständlich.

In der Gegend, in der ich wohne, gibt es zwei Internetdienstoptionen: Satellit oder DFÜ. Auch die örtliche Telefongesellschaft weigert sich, in diesem Bereich DSL anzubieten, wegen Infrastrukturkosten mit jahrzehntealten Telefonleitungen. Aufgrund der unerschwinglichen Kosten des Satelliten-Internetzugangs, der normalerweise mit Datenlimits einhergeht, bleiben viele bei der Einwahl stecken. Mobilfunkunternehmen ändern das Spiel bis zu einem gewissen Grad, vorausgesetzt, der Service ist zuverlässig, aber es gibt Stürze bei dieser Route, die Daten- oder Hotspot-Einschränkungen beinhalten können.

Für ein so technologisch fortgeschrittenes Land können viele seiner Einwohner kaum dort aufholen, wo andere vor einem Jahrzehnt waren.

Obwohl ich das Glück habe, meinen Wohnort selbst auszusuchen, und mich nichts davon abhält, umzuziehen, haben die meisten diese Option nicht. Sie stecken mit dem Besten, was sie sich leisten können. Auch auf dem Land ist das Internet aus dem Alltag nicht mehr wegzudenken und Entwickler machen es diesen Menschen nicht leicht.

Während dies anekdotisch ist, ist es die nackte Realität des ländlichen Lebens in den USA.

Der Vorteil des Lebens in den Hinterwäldern von Alabama ist, dass es meine Perspektive als Entwickler verändert hat. Das bedeutete, dass ich jede Code-Entscheidung für jedes Plugin und Thema, das ich erstellte, hinterfragen musste. Bei Data Caps musste ich sicherstellen, dass ich nicht zu viele Ressourcen verwende.

Mehr als alles andere hat eine Datenobergrenze meine Nutzung des Internets verändert. Ich nutze jetzt einen Werbeblocker. Ich habe eine Erweiterung, um Videos vom automatischen Laden zu entfernen. Ich deaktiviere JavaScript auf umfangreichen Websites, die ich verwenden muss. Einige Seiten scheinen interessant, aber ich kehre nie zu ihnen zurück, weil sie Ressourcenfresser sind.

Wenn Sie an einem Ort leben, an dem jedes Byte zählt, vermeiden Sie es, sie zu verschwenden.

Obwohl nicht immer erfolgreich, habe ich seit meinem Übergang ins Kleinstadtleben versucht, Anwendungen so zu entwickeln, dass sie Menschen dienen, die nicht das Privileg haben, einen blitzschnellen Internetzugang zu haben.

Wenn Sie darauf hinweisen, geht es darum sicherzustellen, dass Entwickler sich bewusst sind, dass Optimierung wichtig ist. Es spielt in jeder Phase des Entwicklungsprozesses eine Rolle. Es ist wichtig, weil diese Menschen mit langsamen Verbindungen und Datenbeschränkungen auch Produkte kaufen, Dienste nutzen, Inhalte lesen und all die anderen Dinge tun müssen, die Menschen im Internet tun.

Wenn Sie ein Entwickler sind, der darüber nachdenkt, diesen Schieberegler, Wischmechanismus für Mobilgeräte oder ein anderes schickes Gadget hinzuzufügen, denken Sie an diejenigen, die warten müssen, bis diese Funktion geladen wird. Stellen Sie sicher, dass seine Abhängigkeiten nicht zu viele zusätzliche Ressourcen laden. Recherchieren Sie, ob Sie eine leichtere Implementierung finden können. Aber fragen Sie sich zuerst, ob es notwendig ist.

Die Themes und Plugins, die WordPress-Entwickler erstellen, sollten niemals der Engpass für eine Website sein. Wir können es besser.