Asbest Longjohns anziehen ...
Gestern mein Titel mit Packt Publications, Reactive Programming mit JavaScript . Es ist nicht wirklich ein Node.js-zentrierter Titel; Die ersten Kapitel sollen die Theorie behandeln, und die späteren codeintensiven Kapitel behandeln die Praxis. Da ich es nicht wirklich für angebracht hielt, den Lesern keinen Webserver zur Verfügung zu stellen, schien Node.js bei weitem die naheliegende Wahl zu sein. Der Fall wurde geschlossen, bevor er überhaupt geöffnet wurde.
Ich hätte einen sehr rosigen Blick auf meine Erfahrungen mit Node.js werfen können. Stattdessen war ich ehrlich über gute und schlechte Punkte, denen ich begegnet bin.
Lassen Sie mich einige Zitate einfügen, die hier relevant sind:
Warnung: Node.js und sein Ökosystem sind heiß genug, um dich schwer zu verbrennen!
Als ich Assistent eines Lehrers in Mathematik war, war einer der nicht offensichtlichen Vorschläge, die mir gesagt wurden, einem Schüler nicht zu sagen, dass etwas „einfach“ sei. Der Grund war im Nachhinein etwas offensichtlich: Wenn Sie den Leuten sagen, dass etwas einfach ist, kann sich jemand, der keine Lösung sieht, (noch mehr) dumm fühlen, weil er nicht nur nicht versteht, wie er das Problem lösen kann, sondern auch das Problem Sie sind zu dumm, um zu verstehen, dass es einfach ist!
Es gibt Fallstricke, die nicht nur Leute aus Python / Django nerven, die die Quelle sofort neu laden, wenn Sie etwas ändern. Bei Node.js ist das Standardverhalten, dass bei einer Änderung die alte Version bis zum Ende der Zeit oder bis zum manuellen Stoppen und Neustarten des Servers aktiv bleibt. Dieses unangemessene Verhalten nervt Pythonistas nicht nur. Es irritiert auch native Node.js-Benutzer, die verschiedene Problemumgehungen bereitstellen. Die StackOverflow-Frage „Automatisches Neuladen von Dateien in Node.js“ hat zum Zeitpunkt dieses Schreibens über 200 Upvotes und 19 Antworten. Eine Bearbeitung leitet den Benutzer zu einem Nanny-Skript, Node-Supervisor, mit der Homepage unter http://tinyurl.com/reactjs-node-supervisor. Dieses Problem bietet neuen Benutzern die Möglichkeit, sich dumm zu fühlen, weil sie dachten, sie hätten das Problem behoben, aber das alte, fehlerhafte Verhalten bleibt völlig unverändert. Und es ist leicht zu vergessen, den Server zu bouncen; Ich habe das schon mehrmals gemacht. Und die Botschaft, die ich geben möchte, lautet: „Nein, du bist nicht dumm, weil dieses Verhalten von Node.js dir den Rücken gebissen hat. Es ist nur so, dass die Designer von Node.js keinen Grund sahen, hier angemessenes Verhalten zu zeigen. Versuchen Sie, damit umzugehen, vielleicht nehmen Sie ein wenig Hilfe vom Node-Supervisor oder einer anderen Lösung, aber gehen Sie bitte nicht weg und fühlen Sie sich dumm. Du bist nicht derjenige mit dem Problem; Das Problem liegt im Standardverhalten von Node.js. “
Dieser Abschnitt wurde nach einigen Debatten belassen, gerade weil ich nicht den Eindruck erwecken möchte, dass es einfach ist. Ich schneide mir wiederholt die Hände, während ich die Dinge zum Laufen bringe, und ich möchte Schwierigkeiten nicht beseitigen und Sie darauf einstellen, zu glauben, dass es einfach ist, Node.js und sein Ökosystem gut zu funktionieren, und wenn es auch für Sie nicht einfach ist Sie wissen nicht, was Sie tun. Wenn Sie mit Node.js nicht auf unangenehme Schwierigkeiten stoßen, ist das wunderbar. Wenn Sie dies tun, würde ich hoffen, dass Sie nicht weggehen und das Gefühl haben: "Ich bin dumm - mit mir muss etwas nicht stimmen." Sie sind nicht dumm, wenn Sie böse Überraschungen im Umgang mit Node.js erleben. Du bist es nicht! Es ist Node.js und sein Ökosystem!
Der Anhang, den ich nach dem steigenden Crescendo in den letzten Kapiteln und dem Abschluss nicht wirklich wollte, spricht über das, was ich im Ökosystem finden konnte, und bot eine Problemumgehung für den schwachsinnigen Literalismus:
Eine andere Datenbank, die perfekt zu passen schien und möglicherweise noch einlösbar ist, ist eine serverseitige Implementierung des HTML5-Schlüsselwertspeichers. Dieser Ansatz hat den entscheidenden Vorteil einer API, die die meisten guten Front-End-Entwickler gut genug verstehen. Im Übrigen ist es auch eine API, die die meisten nicht so guten Front-End-Entwickler gut genug verstehen. Während mit dem Paket node-localstorage kein Zugriff auf die Wörterbuchsyntax angeboten wird (Sie möchten localStorage.setItem (Schlüssel, Wert) oder localStorage.getItem (Schlüssel) verwenden, nicht localStorage [Schlüssel]), wird die vollständige localStorage-Semantik implementiert , einschließlich eines Standardkontingents von 5 MB - WARUM ?Müssen serverseitige JavaScript-Entwickler vor sich selbst geschützt werden?
Für clientseitige Datenbankfunktionen ist ein Kontingent von 5 MB pro Website eine großzügige und nützliche Menge an Freiraum, damit Entwickler damit arbeiten können. Sie könnten eine viel niedrigere Quote festlegen und Entwicklern dennoch eine unermessliche Verbesserung gegenüber dem Hinken zusammen mit der Cookie-Verwaltung bieten. Ein Limit von 5 MB eignet sich nicht sehr schnell für die clientseitige Verarbeitung von Big Data, aber es gibt eine wirklich recht großzügige Erlaubnis, mit der einfallsreiche Entwickler viel tun können. Auf der anderen Seite ist 5 MB kein besonders großer Teil der meisten kürzlich gekauften Festplatten. Wenn Sie und eine Website sich nicht darüber einig sind, wie viel Speicherplatz angemessen genutzt wird, oder wenn eine Website einfach nur bescheuert ist, kostet dies nicht wirklich Sie viel und Sie sind nicht in der Gefahr einer überfüllten Festplatte, es sei denn, Ihre Festplatte war bereits zu voll.
Es kann jedoch vorsichtig darauf hingewiesen werden, dass Sie, wenn Sie derjenige sind, der Code für Ihren Server schreibt, keinen zusätzlichen Schutz benötigen, um Ihre Datenbank auf eine tolerierbare Größe von 5 MB zu bringen. Die meisten Entwickler benötigen und wollen keine Tools, die als Kindermädchen fungieren und sie vor dem Speichern von mehr als 5 MB serverseitiger Daten schützen. Und das 5-MB-Kontingent, das auf der Clientseite ein goldener Balanceakt ist, ist auf einem Node.js-Server ziemlich albern. (Bei einer Datenbank für mehrere Benutzer, wie in diesem Anhang beschrieben, wird möglicherweise etwas schmerzhaft darauf hingewiesen, dass dies nicht 5 MB pro Benutzerkonto sind, es sei denn, Sie erstellen für jedes Benutzerkonto eine separate Datenbank auf der Festplatte. Dies sind 5 MB, die von beiden Benutzern gemeinsam genutzt werden alle Benutzerkonten zusammen. Das könnte bekommen schmerzhaft werdenWenn Sie viral werden!) In der Dokumentation heißt es, dass das Kontingent anpassbar ist. Vor einer Woche wurde jedoch eine E-Mail an den Entwickler gesendet, in der er gefragt wurde, wie das Kontingent geändert werden soll, ebenso wie die Frage von StackOverflow. Die einzige Antwort, die ich finden konnte, ist in der Github CoffeeScript-Quelle, wo sie als optionales zweites ganzzahliges Argument für einen Konstruktor aufgeführt ist. Das ist also einfach genug, und Sie können ein Kontingent angeben, das einer Festplatten- oder Partitionsgröße entspricht. Abgesehen von der Portierung einer Funktion, die keinen Sinn ergibt, hat der Autor des Tools eine Standardkonvention zur Interpretation von 0 als „unbegrenzt“ für eine Variable oder Funktion, bei der eine Ganzzahl eine maximale Grenze für eine bestimmte Ressourcennutzung angeben soll, nicht vollständig befolgt. Das Beste, was Sie mit dieser Fehlfunktion tun können, ist wahrscheinlich anzugeben, dass das Kontingent Unendlich ist:
if (typeof localStorage === 'undefined' || localStorage === null)
{
var LocalStorage = require('node-localstorage').LocalStorage;
localStorage = new LocalStorage(__dirname + '/localStorage',
Infinity);
}
Zwei Kommentare der Reihe nach austauschen:
Die Menschen haben sich unnötigerweise ständig mit JavaScript als Ganzes in den Fuß geschossen, und ein Teil von JavaScript, das zu einer respektablen Sprache gemacht wurde, war ein Douglas Crockford, der im Wesentlichen sagte: „JavaScript als Sprache hat einige wirklich gute und einige wirklich schlechte Teile. Hier sind die guten Teile. Vergiss einfach, dass noch etwas da ist. “ Vielleicht wird das heiße Node.js-Ökosystem seinen eigenen „Douglas Crockford“ entwickeln, der sagt: „Das Node.js-Ökosystem ist ein kodierender Wilder Westen, aber es gibt einige echte Juwelen zu finden. Hier ist eine Roadmap. Hier sind die Bereiche, die um fast jeden Preis zu vermeiden sind. Hier sind die Gebiete mit einigen der reichsten Gehaltsabrechnungen, die in JEDER Sprache oder Umgebung zu finden sind. “
Vielleicht kann jemand anderes diese Worte als Herausforderung nehmen und Crockfords Führung folgen und „die guten Teile“ und / oder „die besseren Teile“ für Node.js und sein Ökosystem aufschreiben. Ich würde eine Kopie kaufen!
Angesichts des Enthusiasmus und der Arbeitszeit bei allen Projekten kann es in einem oder zwei oder drei Jahren gerechtfertigt sein, alle Bemerkungen über ein unreifes Ökosystem, die zum Zeitpunkt dieses Schreibens gemacht wurden, scharf zu mildern. In fünf Jahren könnte es wirklich Sinn machen zu sagen: „Das Node.js-Ökosystem von 2015 hatte mehrere Minenfelder. Das Node.js-Ökosystem für 2020 hat mehrere Paradiese. “