Ich habe diese Frage auf SO gestellt, aber es wurde vorgeschlagen, es hier zu versuchen. Also hier geht es:
Mein bisheriges Verständnis von Javascript war, dass es eine clientseitige Sprache ist, die Ereignisse aufzeichnet und eine Webseite dynamisch macht.
Aber als ich den Vergleich zwischen MongoDB und CouchDB las, bemerkte ich, dass beide Javascript verwenden. Dies lässt mich den Grund für die Wahl von JavaScript gegenüber anderen herkömmlichen Sprachen hinterfragen.
Ich denke, ich versuche, die Rolle von JavaScript und seine Vorteile gegenüber anderen Sprachen zu verstehen.
Update: Ich frage nicht nach den Sprachen / Treibern, die von den beiden Datenbanken unterstützt werden. Der Vergleich sagt:
Sowohl CouchDB als auch MongoDB verwenden Javascript. CouchDB verwendet Javascript ausgiebig, auch beim Erstellen von Ansichten .
MongoDB unterstützt auch die Ausführung willkürlicher Javascript-Funktionen auf dem Server und verwendet Javascript für Karten- / Reduzierungsvorgänge.
Mein Unverständnis hat damit zu tun, warum JavaScript überhaupt für die Backend-Arbeit verwendet wird. Warum wird es bevorzugt, um Ansichten in CouchDB zu erstellen oder um Karten- / Reduzierungsoperationen zu verwenden? Warum wurden C / C ++ oder Java nicht verwendet? Was sind die Vorteile bei der Verwendung von Javascript für solche Back-End-Arbeit?
quelle
Antworten:
Mobiler Code und plattformübergreifend
JavaScript wird als mobiler Code bezeichnet . Der Code wird vom Server (in diesem Fall MongoDB und CouchDB) zum Client (dem Webbrowser) transportiert und auf dem Client ohne Installationsvorgang ausgeführt.
Auf vielen Plattformen sind auch JavaScript-Laufzeitumgebungen (Webbrowser) weit verbreitet. Das macht JavaScript zu einer guten plattformübergreifenden Sprache.
JavaScript wird nicht als primäre Back-End-Sprache verwendet
Das MongoDB-Backend ist in C ++ und die CouchDB in Erlang implementiert. Daher wird JavaScript nicht als primäre Sprache für das Backend dieser Systeme verwendet.
Von mongodb.com :
Von couchdb.apache.com :
quelle
Weil JavaScript eine Skriptsprache ist.
Es ist eine flexible und dynamische Sprache, die den Menschen vertraut ist.
Der andere Grund, warum JavaScript verwendet wird, liegt darin, dass es gut mit dem von diesen Datenbanken verwendeten JSON-Format übereinstimmt.
Und schließlich benötigen diese Datenbanken eine Sprache, die interpretiert werden kann. Weil der Code für diese Abfragen über das Netzwerk gesendet wird.
Also brauchst du eine
Sprache. Ich denke nicht, dass JavaScript hier eine schlechte Wahl ist. Es wird wahrscheinlich für die C-Syntax gewählt.
Nun ist es eine gute Frage, warum JavaScript einer anderen Skriptsprache vorgezogen wurde .
quelle
Now why JavaScript was chosen over another scripting language
: Ich könnte spekulieren, dass dies daran liegt, dass JavaScript die am häufigsten verwendete Skriptsprache ist, die über die Verwendung in Browsern sehr gut getestet wurde, und dass es einige hervorragende Open-Source-Interpreter-Implementierungen gibt. CouchDB verwendetuneval()
einen Hinweis darauf, dass sie ihren Interpreter auf SpiderMonkey aufgebaut haben .Wir werden alle bescheidene Kuchen essen müssen, wenn wir feststellen, dass JS verwendet wird, um zu schreiben:
Datenbanken
Server
Betriebssystem
und eine Vielzahl von Bibliotheken, Frameworks, Rendering-Engines und Kompilierungssprachen,
... weil es besser ist.
Im Ernst, bitte ... hör mir zu. Nicht den Boten erschießen.
Fragen Sie Microsoft, warum Windows 8 mit JS als erstklassigem Bürger erstellt wird. Oder Mozillas neues mobiles Betriebssystem oder IBMs Rivertrail, PhoneGap, ExtJS oder WebGL.
Aber das Bessere ist subjektiv: Also müssen wir einen Drilldown durchführen und vergleichen. Was ist besser?
Es begann mit AJAX ... und es hat nicht aufgehört.
Nicht blockierendes E / A. Das ist eine wirklich große Sache und es lohnt sich zu wissen. In JS ist dies das Rückrufmuster. Es stellt sich heraus, dass Callbacks einen nicht blockierenden Server aktivieren können: Node.js ~ ca. 8 Codezeilen. setTimeout () ist ein Rückruf. Asynchrone Verarbeitung mit einem Thread.
Flexibilität. Was? -Java und C haben Klassen und Schnittstellen, werden aber als objektorientiert bezeichnet. JavaScript hat nur Objekte. Aber es heißt ... etwas anderes.
- Nur Objekte zu haben ist eine nette Sache für die Flexibilität, da Mitglieder und Methoden zur Laufzeit vollständig dynamisch sind. -Prototypische Vererbung ist nicht beängstigend. Einige Experten beschreiben es als Objekt-Pack-Pack. -JS ist fehlerfreundlich. -Code kann zusammengemischt werden, um Composite-Komponenten zu erhalten, ohne viel Aufwand oder Kenntnisse über ... 'Schnittstellen', 'Abstraktion', 'Vererbung', 'Kapselung', 'Polymorphismus'. Gute Dinge, aber wie Nike in JS; du machst es einfach.
Daten-Übersetzung. Mit JSON können Objekte von vorne nach hinten und von hinten nach vorne übertragen werden. Keine XML-Datenübersetzungen. JSON ist eindeutig einfach.
Geringe Lernkurve. Es ist möglich, äußerst komplexen Code auszuschneiden und einzufügen und ihn dann schrittweise zu debuggen. Ich höre einen Kollegen ... "Noobs". Aber es ist nicht nur für Noobs.
-Es stellt sich heraus, dass dies eine wirklich schöne Funktion für Rapid Prototyping ist. Und überall tauchen Websites auf, die dieses Design-in-Browser-Konzept nutzen, und das noch umfassender. Laufzeit-Prototyping. Kasse JSFiddle und CodePen, auch MicroJS. GitHub.
UPDATE: seit diesem Posting wird JavaScript von anderen Sprachen ausgiebig genutzt.
quelle
Mit mehr kann man weniger machen - dazu gibt es ein paar Schulen. Die Ausführlichkeitsschule möchte, dass alles bis ins kleinste Detail beschrieben wird, was jeder Idiot verstehen kann. JS ist ein Mitglied der anderen Schule, in der Sie die Komplexität so aufteilen können, dass Sie sich einen Überblick verschaffen können, bevor Sie verstehen, wie die feineren Details funktionieren. Es ist viel einfacher, in JS auf eine Schnittstelle zu schreiben, als in den meisten Sprachen, IMO.
Erstklassige Funktionen, Verschlüsse, prototypische Vererbung - Es ist eine wirklich sehr flexible Kombination. Wir können den Unterricht nachahmen, wenn wir wollen. Aber das wird von jenen, die JS wirklich gut verstehen, als etwas sinnloses Unterfangen angesehen. Compositing ist für JS viel besser geeignet als verkettete Vererbung.
Das Blockieren ist auf einer höheren Ebene nützlich. Ja, du hast mich gehört. Es hilft Ihnen, den Fokus auf den JS als Messenger und nicht auf das Arbeitspferd zu richten, und verarbeitet so gut wie die Warteschlange selbst, während Unterbrechungen durch asynchrones Verhalten zwischen Funktionsaufrufen berücksichtigt werden.
Ich würde sagen, dass die Lernkurve für das Schreiben von leistungsfähigem JS tatsächlich etwas steil ist, aber wenn Sie erst einmal da sind, ist es ein Kinderspiel. Es ist jedoch überhaupt nicht schwer, vorgebackene Sachen in JS auf der niedrigeren Fähigkeitsstufe zu implementieren.
quelle
Diese Frage ist etwas veraltet, aber der Grund für die Verwendung von JavaScript im Vergleich zu Java / C ++ ist, dass weder Java noch C ++ Codefragmente problemlos unterstützen.
Selbst wenn JavaScript niemals erfunden worden wäre, wären Java oder C ++ eine gute Wahl für Quellcode-Fragmente, die auf der Serverseite ausgeführt werden. Sie würden sich eine andere Sprache aussuchen oder ihre eigene erfinden. Früher verwendeten Produkte, um ihre eigene Sprache zu erstellen, ihre eigenen Produktionsregeln, AST, Dolmetscher usw. zu definieren, die auf ihre Domäne spezialisiert waren.
Mit JavaScript ist es jedoch extrem einfach, eine domänenspezifische Sprache (Domain Specific Language, DSL) für Ihr Produkt zu erstellen und die Engine einzubetten, ohne sich um die Erstellung der gesamten anderen nicht domänenbezogenen Infrastruktur kümmern zu müssen.
quelle
Ereignisgesteuertes Programmiermodell
JavaScript wurde mit einem ereignisgesteuerten Nicht-Shared-Memory-Ansatz für die Datenverarbeitung erstellt. In der UI-Entwicklung ist dies ein völlig alter Hut. Es gibt keine Vermutung, dass Ihre "Anwendung" die Kontrolle über einen Prozess hat. Es gibt keine Prozess-API. Es gibt auch keine Hauptfunktion.
Ihre "Anwendung" ist eine Sammlung von Skripten, die ausgeführt werden, wenn ein bestimmtes Ereignis eintritt, z
Dies passt ziemlich gut zu den kleinen Teilen der Verarbeitungslogik, die für Datentransformationen benötigt werden.
Skriptsprache
In der Lage zu sein, ohne eine Kompilierungsstufe auszuführen, bedeutet, dass Verarbeitungsanweisungen leicht gespeichert werden können. Sie können das Skript einfach als Text speichern und ohne spezielle Datentypen oder Kenntnisse weitergeben.
Ganz einfach, stabil und abwärtskompatibel
Der Code, den Sie heute schreiben, ist nicht viel anders als vor 10 Jahren. Die Versionierung ist für die Nutzer, die sie einbetten, wahrscheinlich kein großes Problem.
Darsteller
Es gibt mehrere gute Open-Source-Engines, in die jede Menge Arbeit investiert wurde. Es wird viel schneller ausgeführt als viele Alternativen.
Geschweifte Klammern
Viele Menschen sind mit einer Reihe von Programmiersprachen in ihrem Komfort eingeschränkt. Sie können zum Beispiel nur Java oder C # programmieren. Sie erwarten daher, dass sie JavaScript leicht erlernen können, da es vertraut aussieht. Das ist natürlich eine Illusion. Als ich Python lernte, war es ungefähr so schnell wie das Erlernen von JavaScript. Syntax ist nur dann emotional bedeutsam, wenn sie nicht vollständig undurchsichtig ist.
quelle