Frage

Ich begann zu experimentieren gerade mit Aptana Jaxer Server-Seite JavaScript-Engine für mein nächstes Projekt. Und ich habe einige quesions darüber

  • Mit dem Server-Seite JS verwenden, können wir die gesamte Web-Anwendung implementieren, ohne Server-Seite Sprachen zu verwenden (wie C #, Java, etc.). Oder Server-Seite JS befindet sich zwischen dem Web-Server und andere Langauge-Stack in.

  • Ist es wirklich ein besserer Ansatz ??

  • Was sind die advandages und disadvandages?

  • , wie das funktioniert gut in Bezug auf Leistung?

  • Gibt es eine Echtzeit-Implementierung (öffentliche Websites) nur Serverseite JS verwenden (keine andere Sprachen)?

  • Was sind die Alternativen zur Verfügung über Aptana Jaxer (Open Source) ??

  • Wie gut können wir implementieren & db Transaktionen maitain? können wir das in JS tun .. Serverside?

  • ist es möglich, RESTful und SOAP-Dienste in server JS .. ??

  • zu entwickeln

Ich weiß, das ist zu lang (und naive Fragen). Ich hoffe nur jemand haben bereits über alle diese kommen, während server JS implementieren.

EDIT:

Wie pro Matthew & Ken Kommentare, ich habe ein wenig Klarheit in die Frage hinzugefügt Ist es wirklich ein besserer Ansatz ??

Das ist, was ich ..

zu stellen beabsichtige

Ist es wirklich ein besserer Ansatz als Server-Seite Sprachen verwenden (unter der Annahme c #), wie wir dies mit der c # -Implementierung einer Website (Performance, Sprachfunktionen) vergleichen ?? Und welches ist ein besserer Ansatz, mit JS allein in server oder JS in der mittleren Schicht zwischen anderen Sprechen Stack und Webserver ??

War es hilfreich?

Lösung

Ich bin der Entwickler für Myna (www.mynajs.org), ein Open-Source-Server-Side-JS Plattform auf Basis von Rhino und Java. Ich werde die Probleme anzugehen, wie sie zu Myna beziehen, aber viele dieser Punkte gelten für serverseitige JS allgemein:

Mit Server-Seite JS verwenden, können wir ohne den Einsatz von Server-Seite Sprachen (wie C #, Java, etc.) die gesamte Web-Anwendung implementieren. Oder Server-Seite JS befindet sich zwischen dem Web-Server und andere Langauge-Stack in.

In Myna ist es möglich, Ihre gesamte App in JS zu schreiben. Myna bereits API für Datenbankzugriff umfasst, Object Relational Mapping, crytogrophy, OpenID, usw.

Ist es wirklich ein besserer Ansatz als c # / Java?

Mit einem Rhino-basierten Server ist es trivial zu Java Drop-Down wann immer erforderlich. Sie können ganz einfach Open-Source / Gewerbe / Hand codiert Java-Bibliotheken installieren und dann Skript sie von JS. Dies bedeutet, dass Sie die schnelle Entwicklung von JS erhalten, aber die Vorteile der Java-Plattform

maintain

Was sind die Vor- und Nachteile?

Vorteile:

  • Schnelle Entwicklung : In Myna erstellen Sie nur Dateien im Webroot mit einer .sjs Erweiterung. Das heißt, Sie bearbeitet-save-Refresh-Browser Zyklus erstellen kann mit sehr schnell Code für die Fehlersuche / Zwicken.

  • Einfache JSON : JS Unterstützung serverseitige zu haben bedeutet, sich bewegenden komplexen Strukturen ist sehr einfach

  • Gemeinsamer Code : Wenn Sie die die gleiche Funktion sowohl auf dem Server und dem Browser ausführen müssen, können Sie den gleichen Code verwenden

  • Dynamische ORM : Statisch typisierte kompilierten Sprachen machen es schwer, Objekte zur Laufzeit zu verändern. Das bedeutet in der Regel, dass ORM im Voraus festgelegt werden muss. In Myna Gebäude ORM ist so einfach wie

    var manager =new Myna.DataManager("DataSource name").getManager("table name");
    

    Sie erhalten ein Objekt, das, ohne jemals explizit definiert, die DB-Tabellen alle grundlegenden CRUD-Operationen tun. Als weiteres Beispiel Sie eine Zeile mit allen passenden Werte aus einem Formular Post einfügen können:

    manager.create($req.data);
    
  • Functional Programing : Wenn Sie begonnen haben, mit erweiterten JavaScript Spieleigenschaften, dann werden Sie erkennen, wie nützlich sie Server-Seite sind. Aufgrund der konsequenten serverseitigen Umgebung ist es sicher, erweiterte Funktionen wie Array Extras verwenden , Generatoren und Iteratoren Destrukturierung Zuweisungen und E4X

Nachteile:

  • Extras : Statisch typisierte Sprachen wie C # und Java haben hervorragende IDE und Entwickler-Tools. Dynamische Sprachen wie JS haben einfach nicht die Tool-Unterstützung vor. Persönlich finde ich, dass die starke Reduzierung des Standardcode und pingelig Art Casting für das macht, aber das ist immer noch ein großer Nachteil, wenn man viel in der Entwicklung gemacht in IDEs wurde. Wenn Sie derzeit eine IDE verwenden, sollten Sie mit jedit für dynamische Sprachen

  • Fälligkeit / Standardisierung : Serverside JS ist immer noch ein neues Paradigma, und es gibt viele Spieler und keine klaren Gewinner. ECMA hat keine Standards für die server JS. Wie in Brandon Antwort erwähnte, ist die Commonjs Gruppe versucht, einen server JS Standard und M zu bilden,yna hat experimenteller Commonjs unterstützt über Narwhal

, wie das funktioniert gut in Bezug auf Leistung?

In roher Rechengeschwindigkeit, einige dynamischen Sprachen können statisch wie C # und Java getippt kompilierten Sprachen entsprechen. Having said that, es wirklich keine Rolle spielt. Jeder Teil Ihrer Anwendung, die rechenintensiv ist, sollte wahrscheinlich in Java geschrieben werden, oder verwenden Sie eine vorhandene Java-Bibliothek. Ich würde nicht vorschlagen, dass jemand eine Datenbank in JS zum Beispiel schreiben. Für reale Web-Anwendungen / SOA-Service, die primäre Ursache der Verlangsamung ist nicht roh Rechengeschwindigkeit, ist es ineffizient, Code, vor allem des Datenbankzugriff. Myna hilft dabei, indem Sie Dinge wie:

  • intern Caching kompilierten JS-Skripte
  • intern über gecached vorbereitete Anweisungen für Datenbanktransaktionen
  • Abfrage und Ausgabe Fragment Caching
  • Datenbank Verbindungspooling
  • Automatische ETag Hash-Unterstützung
  • Profilwerkzeuge
  • Lazy Loading von Metadaten

wie gut wir implementieren & db Transaktionen halten? können wir tun, dass in server JS ..?

Wenn Sie meine Transaktion in „eine Reihe von SQL-Anweisungen, die rückgängig gemacht werden können oder engagiert“, dann ist Myna noch nicht Transaktionen unterstützen. Ich bin offen dies umzusetzen, wenn es genug Interesse ist.

Wenn Sie meinen, „welche Art von Datenbank-Unterstützung ist serverseitige JS haben?“ dann ist die Antwort plattformabhängig. Die Myna Plattform bietet die folgenden Datenbankfunktionen:

  • Eine web-basierte Administrationsanwendung, wo Sie „Datenquellen“, das heißt Datenbankverbindungsinformationen definieren. Anschließend können Sie diese Datenquellen nach Namen abfragen. Myna enthält JDBC-Treiber für H2, MySQL, Microsoft SQL Server und PostgreSQL, aber jeder JDBC oder ODBC-Datenquelle kann verwendet werden,
  • Myna.Database und < a href = "http://www.mynajs.org/shared/docs/js/libOO/files/Table-sjs.html" rel = "nofollow noreferrer"> Myna.Table Datenbank-neutral metdata Zugang bieten sowie das Erstellen von Tabellen und Modifikation.
  • Myna Abfrage Objekt unterstützt maxRows , Paging, SQL-Parameter, benutzerdefinierte Zeilenhandler, Abfrage-of-Abfrage, Caching und mehr
  • Myna DataManager- Objekt unterstützt Laufzeit ORM Objekterstellung

ist es möglich, RESTful und SOAP-Dienste in server JS .. ??

zu entwickeln

REST und SOAP-Unterstützung sind plattformspezifische Funktionen. Myna WebService Objekt unterstützt folgende Protokolle:

  • SOAP
  • XML-RPC
  • JSON-RPC
  • Ext Direkt
  • JSON-MYNA (Ein einfaches Protokoll, die normale Form Beiträge verwendet und gibt JSON. Einfach aus dem Browser verwenden)

Myna versteht auch die PUT und DELETE-Request-Methoden und präsentiert Zugriff Körperinhalt in Text und binäre Form zu verlangen, so dass es möglich ist, diese RESTful Methoden in einer anwendungsspezifischen Art und Weise zu handhaben.

Debuggen

Traditionelle Breakpoint-Debugging ist eine echte Herausforderung server. Obwohl Rhino Debugger Haken unterstützt, wäre dies von einem stateless Web-App mit ziemlich beteiligt. Persönlich benutze ich nicht einmal Breakpoint-Debugger, selbst wenn sie verfügbar sind (z Firebug). Stattdessen ziehe ich Protokollierung.

In Myna,

 Myna.log(type,label,detail)

wird eine niedrige Priorität Thread erzeugen eine HTML-Log-Nachricht zu Myna die Protokolldatenbank zu schreiben. Diese Protokolle können dann searched durch den Myna Administrator. Logs auch Zeitstempel und verstrichenen Millisekunden aufzeichnen zu Zwecken Profilierungs. Myna.dump (obj) kann auch eine HTML-Tabelle darzustellen Darstellung eines Objekts verwendet werden. Myna protokolliert auch alle un-behandelt Ausnahmen mit Stack-Traces, Quellcode-Kontext und Anforderungsdetails. Zwischen dump (), log () und der Standard-Fehlerbehandlung Ich habe nicht viel Schwierigkeiten Debuggen Myna Code

Andere Tipps

Mit Server-Seite JS verwenden, können wir die gesamte Web-Anwendung implementieren, ohne Server-Seite Sprachen zu verwenden (wie C #, Java, etc.).

Es sollte nicht notwendig sein, um Code in einer anderen Sprache zu schreiben, obwohl viele serverseitige JavaScript-Frameworks verwenden, um die Rhino-Engine, die Sie alle Java-Code aufrufen können.

Ist es wirklich ein besserer Ansatz ??

Ich glaube nicht, JavaScript (als Sprache) ist wirklich eine bessere oder schlechtere Option als herkömmliche serverseitige Sprachen. Es hat Vorteile (zusammen mit anderen dynamischen Sprachen wie Ruby und Python) wie Flexibilität, schnelles Prototyping (kein Wortspiel beabsichtigt), Flexibilität, usw. Auf der anderen Seite ist es nicht die Bibliothek Unterstützung hat, dass Java und C # oder statische Typisierung (ich werde nicht in die Debatte bekommen, über die hier besser ist, ich mag beides aus verschiedenen Gründen).

Wenn Sie das Beste aus beiden wollen, können Sie JavaScript als Skriptsprache, eingebettet in Ihrer Anwendung verwenden. Rhino für Java und JScript.NET machen es einfach, „native“ Objekte in JavaScript zu manipulieren. Sie könnten zum Beispiel, schreiben Sie Ihre Domain-Klassen in Java oder C # und Skript sie mit JavaScript, wo Sie mehr Flexibilität wünschen. Wenn Sie komfortabel genug mit JavaScript sind, in einer Sprache schreiben kann jedoch einfacher sein.

Ich habe noch nie eine „echte“ serverseitige Anwendung mit JavaScript geschrieben, so kann ich nicht wirklich ein Urteil darüber, ob es besser oder schlechter als .NET (Ich habe auch nie benutzt JScript.NET). Ich habe allerdings mit ein paar Rahmenbedingungen für Spaß rumgespielt und ich bin derzeit meine persönliche Website mit Helma NG neu zu schreiben. Bis jetzt ist es eine gute Erfahrung (viel besser als PHP, die ich habe nie wirklich mochte) gewesen.

Was sind die advandages und disadvandages?

advantanges:

  • nur eine Sprache benötigt für die serverseitige und clientseitige Programmierung.
  • Möglichkeit zur gemeinsamen Code, für Dinge wie Formularvalidierung. Jaxer können Sie Skripts auf dem Client, Server, oder beides.
  • Sie erhalten in JavaScript programmiert werden (vorausgesetzt, Sie wie die Sprache).

Nachteile:

  • Viele Frameworks sind experimental / nicht sehr ausgereift.
  • Sie müssen JavaScript programmiert werden (vorausgesetzt, Sie die Sprache nicht mögen).

, wie das funktioniert gut in Bezug auf Leistung?

Die Leistung soll in etwa vergleichbar mit anderen Skriptsprachen sein.

gibt es eine Echtzeit-Implementierung (öffentliche Websites) nur mit Serverseite JS (keine andere Sprachen)?

Ich weiß nicht, von irgendwelchen großen Websites mit JavaScript, aber es kann etwas sein.

Was sind die Alternativen zur Verfügung über Aptana Jaxer (Open Source) ??

Wikipedia hat ein große Liste von Optionen , aber es hat nicht viel nützlich Information. Es gibt viele Möglichkeiten mit einer breiten Palette an Reife und Größe.

Hier sind ein paar, die ich kenne (in unterschiedlichem Ausmaß)

  • Helma -. Rhino (Java) basiertes Framework mit aktiver Datensatz
  • Helma NG - Helma Next Generation (experimentelle Rewrite, unter aktiver Entwicklung).
  • Phobos - Hat eine gute Unterstützung in NetBeans .
  • v8cgi - Klein und einfach, nutzt Googles V8-Motor, wahrscheinlich nicht produktionsfertige noch .
  • Jaxer - Läuft auf Spider mit einer DOM-Implementierung, so dass Sie die Seite mit Frameworks wie jQuery oder Prototype manipulieren kann. Hat eine gute IDE-Unterstützung in Aptana Studio.

wie gut wir implementieren &db-Transaktionen halten? können wir tun, dass in server JS ..?

Rhino-basierten Frameworks können Sie Java-Klassen verwenden, so dass Sie haben die volle JDBC-Unterstützung. Ich habe nicht Jaxer Datenbank-Bibliotheken verwendet, so dass ich weiß nichts über seine Fähigkeiten.

ist es möglich, RESTful und SOAP-Dienste in server JS .. ??

zu entwickeln

RESTful APIs sollte kein Problem sein. Ich weiß nicht, jede spezifischen Unterstützung für SOAP, aber es sollte möglich .

Als Vorwort, verwende ich SSJS an meinem Job. Wir betreiben eine ziemlich große (im Hinblick auf die Komplexität sowie Seitenaufrufe) Website auf Spider. Ich werde Matthäus ausgezeichnete Antwort hinzufügen, wo ich Erfahrung.

Ist es wirklich ein besserer Ansatz als Server-Seite Sprachen verwenden (unter der Annahme c #)

"Better" wirklich hängt, was man damit tun will. JavaScript selbst hat einige großartige Funktionen, sowie ziemlich schrecklich diejenigen. Wenn Sie ernsthaft über JS (Client oder Server) zu entwickeln, kann ich nicht genug empfehlen, dass Sie Douglas Crockford Präsentation zu sehen, Javascript: The Good Parts , wenn Sie nicht bereits haben. Er hat einen fantastischen Job gemacht, die cruft Aussortieren, und er ist ein ausgezeichneter Redner zu booten.

Die größte Sache, die ich die SSJS Welt gerade jetzt fehlen finden, ist Reife. Ich bin mit C # nicht vertraut, aber JavaScript hat keine reife Standard-Bibliothek, und keine reifen mittels Paketverteilung. Für mich ist das ein großes Stück des Puzzles.

Wie gesagt, halten Sie Ihre Augen auf der Commonjs Gruppe. Sie arbeiten daran, genau diese Dinge zu definieren. Die Jaxer Api Dokumentation Außerdem sind die Einbauten, die mit diesem Rahmen enthalten sind.

, wie das funktioniert gut in Bezug auf Leistung?

JavaScript selbst ist keine langsame Sprache, noch ist es ein besonders schneller. Wie Matthew darauf hingewiesen, sollte es zu jeder anderen Skriptsprache vergleichbar sein würden Sie verwenden. Der Krieg zwischen der Browser-Anbieter zu sehen, wer den schnellsten Browser profitiert auch die SSJS Masse aufbauen kann.

Die Generations-Speicherbereinigungs, dass das V8-Team in ihren Motor baut, ist ein gutes Beispiel dafür. die virtuelle Maschine zu stoppen nicht erreichbar Objekte aus dem Heap befreien und ihr Gedächtnis zurückfordern kann etwas langsam sein, aber sie haben gemildert, dass die Menge der Objekte durch die Reduzierung, die überprüft werden muß, wenn der Garbage Collector ausgeführt wird.

wie gut wir implementieren & db Transaktionen halten? können wir tun, dass in server JS ..?

Jaxer erscheint MySQL und SQLite Datenbank-APIs zu haben. Wie Matthew erwähnt, wenn Sie Rhino verwenden, können Sie die JDBC-API verwenden.

Bearbeiten : hinzugefügt Links

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top