Antwort aus Front-End-Perspektive:
Hören Sie nicht zu, wie alle sagen, dass dies nicht möglich ist, da ein experimenteller Webdienst der San Francisco State University, den ich 1996 mitschrieb, vor ein paar Jahren endlich in den Internet-Himmel kam und in dieser Zeit keine einzige Browser-Kompatibilitätskorrektur benötigte ; Das ist fast die Hälfte Ihres 40-Jahres-Ziels. Und dieses JavaScript-basierte Front-End, das ich 1998 für ein Projekt des Stanford Research Institute erstellt habe, wurde ein paar Jahre später durch etwas auffälligeres ersetzt, aber es gibt keinen Grund, warum die ursprüngliche Benutzeroberfläche mit geringfügigen Kompatibilitätskorrekturen heute noch nicht ausgeführt werden konnte.
Der Trick besteht darin, sicherzustellen, dass Ihre App nur allgemein unterstützte W3C / ECMA-Standards verwendet und ein klares Design unter Ihrer Kontrolle hat. Während viele Web-Apps, die auf die trendige Technologie der 90er Jahre zugeschnitten sind, heute nicht mehr oder überhaupt nicht mehr funktionieren, sind es Web-Apps der 90er Jahre, die nach den wichtigsten Standards geschrieben wurden, immer noch. Sie mögen passé aussehen, aber sie funktionieren.
Hier geht es nicht darum, eine Web-App zu schreiben, die auf ihrem Server hochfährt und dort 40 Jahre bleibt, ohne dass jemand sie erneut berührt. Es geht darum, ein Fundament zu schaffen, das noch Jahrzehnte in Gebrauch sein kann und das wachsen kann, um neue Funktionen zu unterstützen, ohne dass es von Grund auf neu erstellt werden muss.
Zuallererst müssen Sie nach offiziellen Standards und nur nach offiziellen Standards codieren . Keine JavaScript-Funktionen, die nicht Teil eines ratifizierten ECMAScript-Standards sind. ES5.1 ist die aktuelle Version und wird im Allgemeinen unterstützt, sodass das Ziel sicher ist. Ebenso sind aktuelle Versionen von HTML5, CSS und Unicode gut. Keine experimentellen JavaScript-, CSS3- oder HTML-Funktionen (die mit Herstellerpräfixen oder ohne 100% ige Übereinstimmung zwischen den Browsern). Und keine browserspezifischen Kompatibilitätshacks. Sie können eine neue Funktion verwenden, sobald sie im Standard enthalten ist. Alle Benutzer unterstützen sie ohne Präfixe.
ES5-Unterstützung würde bedeuten, IE8 oder früher fallen zu lassen, was ich sowieso vorschlage, da es browserspezifische Hacks erfordert, die in ein paar Jahren unbrauchbar werden. Ich würde den Strikten Modus von ES5 vorschlagen, um die beste Langlebigkeitschance zu erzielen. Dadurch wird die Basiskompatibilität Ihres Browsers mit IE10 und den neuesten Versionen aller anderen festgelegt . Diese Browser bieten auch native Unterstützung für viele der HTML5-Funktionen zur Formularüberprüfung und Platzhalter, die sehr lange nützlich sein werden.
Neue Versionen von ECMAScript sind weiterhin mit älteren Versionen kompatibel. Daher ist es viel einfacher, zukünftige Funktionen zu übernehmen, wenn Ihr Code gemäß den aktuellen Standards geschrieben wurde. Beispielsweise können Klassen, die mit der bevorstehenden class
Syntax definiert wurden , vollständig mit Klassen ausgetauscht werden, die mit der aktuellen constructor.prototype
Syntax definiert wurden. So kann ein Entwickler in fünf Jahren Klassen Datei für Datei in das ES6-Format umschreiben, ohne dass irgendetwas kaputt geht - vorausgesetzt natürlich, Sie haben auch gute Komponententests.
Zweitens sollten Sie trendige JavaScript-App-Frameworks vermeiden, insbesondere wenn sie die Art und Weise ändern, in der Sie Ihre App codieren. Backbone war der letzte Schrei, dann waren es SproutCore und Ember, und jetzt ist Angular das Framework, für das jeder gerne wirbt. Sie mögen nützlich sein, haben aber auch eines gemeinsam: Sie brechen häufig Apps und erfordern Codeänderungen, wenn neue Versionen herauskommen und ihre Langlebigkeit fraglich ist. Ich habe kürzlich eine Angular 1.1-App auf 1.2 aktualisiert und musste einiges umschreiben. Ebenso sind für den Wechsel von Backbone 2 zu 3 viele HTML-Änderungen erforderlich. Standards bewegen sich aus einem bestimmten Grund nur langsam, aber diese Frameworks bewegen sich schnell und Dinge, die regelmäßig kaputt gehen, sind die Kosten.
Außerdem machen neue offizielle Standards alte Frameworks häufig überholt. In diesem Fall mutieren diese Frameworks entweder (mit aktuellen Änderungen) oder bleiben zurück. Wissen Sie, was mit allen konkurrierenden Versprechenbibliotheken der Welt passieren wird, wenn ECMAScript 6 ratifiziert ist und alle Browser die standardisierte Versprechen-Klasse unterstützen? Sie sind veraltet und werden von ihren Entwicklern nicht mehr aktualisiert. Wenn Sie sich für das richtige Framework entschieden haben, passt sich Ihr Code möglicherweise gut an, und wenn Sie nicht sicher sind, ob es sich um eine größere Umgestaltung handelt.
Wenn Sie also daran denken, eine Bibliothek oder ein Framework von Drittanbietern zu übernehmen, fragen Sie sich, wie schwer es sein wird, diese in Zukunft zu entfernen. Wenn es sich um ein Framework wie Angular handelt, das niemals entfernt werden kann, ohne die App von Grund auf neu zu erstellen, ist dies ein gutes Zeichen dafür, dass es in einer 40-jährigen Architektur nicht verwendet werden kann. Wenn es sich um ein Kalender-Widget eines Drittanbieters handelt, das Sie mit einer benutzerdefinierten Middleware abstrahiert haben, dauert das Ersetzen einige Stunden.
Drittens geben Sie ihm eine gute, saubere App-Struktur. Auch wenn Sie kein App-Framework verwenden, können Sie Entwickler-Tools, Skripts und ein gutes, übersichtliches Design nutzen. Ich persönlich bin ein Fan des Abhängigkeitsmanagements von Closure Toolkit, da es leichtgewichtig ist und der Overhead beim Erstellen Ihrer App vollständig entfernt wird. LessCSS und SCSS eignen sich auch hervorragend zum Organisieren Ihrer Stylesheets und zum Erstellen standardbasierter CSS-Stylesheets für die Veröffentlichung.
Sie können Ihren eigenen Code auch in Einwegklassen mit einer MVC-Struktur organisieren. Das wird es viel einfacher machen, mehrere Jahre in die Zukunft zurückzukehren und zu wissen, was Sie gedacht haben, als Sie etwas geschrieben haben, und nur die Teile zu ersetzen, die es brauchen.
Sie sollten auch den Ratschlägen des W3C folgen und Präsentationsinformationen vollständig aus Ihrem HTML-Code entfernen. (Dazu gehören Cheats wie das Vergeben von Namen für Präsentationsklassen für Elemente wie "großer grüner Text" und "zwei Spalten breit".) Wenn Ihr HTML semantisch und CSS präsentativ ist, ist es viel einfacher, es zu pflegen und anzupassen auf neue Plattformen in der Zukunft. Es wird auch einfacher, Unterstützung für spezialisierte Browser für blinde oder behinderte Menschen hinzuzufügen.
Viertens, automatisieren Sie Ihre Tests und stellen Sie sicher, dass Sie eine nahezu vollständige Abdeckung haben. Schreiben Sie Komponententests für jede Klasse, egal ob serverseitig oder in JavaScript. Stellen Sie im Front-End sicher, dass jede Klasse in jedem unterstützten Browser gemäß ihrer Spezifikation ausgeführt wird. Automatisieren Sie diese Tests von Ihrem Build-Bot für jedes Commit. Dies ist sowohl für die Langlebigkeit als auch für die Zuverlässigkeit wichtig, da Sie Fehler frühzeitig erkennen können, selbst wenn sie von aktuellen Browsern verdeckt werden. Sowohl die JSUnit-basierten Test-Frameworks von Jasmine als auch von Google Closure sind gut.
Sie sollten auch vollständige UI-Funktionstests durchführen, in denen Selenium / WebDriver gut ist. Grundsätzlich schreiben Sie ein Programm, das Ihre Benutzeroberfläche durchläuft und es so verwendet, als würde eine Person es testen. Verdrahten Sie diese ebenfalls mit dem Build-Bot.
Wie andere bereits erwähnt haben, sind Ihre Daten König. Denken Sie über Ihr Datenspeichermodell nach und stellen Sie sicher, dass es auf Langlebigkeit ausgelegt ist. Stellen Sie sicher, dass Ihr Datenschema solide ist, und stellen Sie sicher, dass es bei jedem Commit gründlich getestet wird. Und stellen Sie sicher, dass Ihre Serverarchitektur skalierbar ist. Dies ist noch wichtiger als alles, was Sie am Frontend tun.