Domanda

Ho appena iniziato a sperimentare con Aptana Jaxer lato server motore JavaScript per il mio prossimo progetto. E ho qualche quesions circa che

  • Utilizzando lato server JS, possiamo implementare l'intera applicazione web senza l'utilizzo di linguaggi lato server di (come C #, Java, ecc). O lato server JS siede tra il server Web e altri stack di langauge.

  • E 'davvero un approccio migliore ??

  • quali sono le advandages e disadvandages?

  • come funziona bene in termini di prestazioni?

  • v'è alcuna implementazione in tempo reale (siti web pubblici) solo con JS lato server (non in altre lingue)?

  • quali sono le alternative disponibili oltre Aptana jaxer (open source) ??

  • quanto bene possiamo implementare e maitain transazioni db? possiamo farlo in serverside JS ..?

  • è possibile sviluppare servizi RESTful e sapone in serverside JS .. ??

So che questo è troppo lungo (e domande ingenue). Sto solo sperando che qualcuno ha già incontrato tutti questi durante l'implementazione lato server JS.

Modifica

Come per Matteo & Ken commenti, ho aggiunto un po 'di chiarezza alla domanda E' davvero un approccio migliore ??

questo è quello che ho intenzione di chiedere ..

E 'davvero un approccio migliore rispetto all'utilizzo di linguaggi lato server di assumere (C #), come possiamo paragonare questo con il C # implementazione di un sito web (prestazioni, funzionalità del linguaggio) ?? E che uno è un approccio migliore, utilizzando JS solo serverside o JS in strato intermedio tra altri stack di lingua e webserver ??

È stato utile?

Soluzione

Io sono l'autore di Myna (www.mynajs.org), un server-side Open Source JS piattaforma basata su Rhino e Java. Io affrontare i problemi in cui si riferiscono a Myna, ma molti di questi punti si applicano al lato server JS in generale:

Utilizzando lato server JS, possiamo implementare l'intera applicazione web senza l'utilizzo di linguaggi lato server di (come C #, Java, ecc). O lato server JS siede tra il server Web e altri stack di langauge.

In Myna è possibile scrivere la vostra intera applicazione in JS. Myna già include API per l'accesso database, Object Relational Mapping, crytogrophy, OpenID, ecc

E 'davvero un approccio migliore rispetto c # / Java?

Con un server basato su Rhino è banale per scendere fino a Java in caso di necessità. Si può facilmente installare le librerie Java open-source / commerciali / codificati a mano e poi li script da JS. Questo significa che si ottiene il rapido sviluppo di JS, ma mantenere i vantaggi della piattaforma Java

Quali sono i vantaggi e gli svantaggi?

Pro:

  • Il rapido sviluppo : In Myna basta creare i file nella Webroot con un'estensione .sjs. Ciò significa che è possibile creare un ciclo di modifica-save-refresh browser con è molto veloce per il debug del codice / tweaking.

  • Facile JSON : Avere JS supporto server-side significa spostare strutture complesse è molto facile

  • codice condiviso : Se è necessario eseguire la la stessa funzione sia sul server e il browser, è possibile utilizzare lo stesso codice

  • Dinamico ORM : lingue tipi statici compilati rendono difficile modificare gli oggetti in fase di esecuzione. Ciò significa che di solito ORM deve essere definito in anticipo. In Myna edificio ORM è semplice come

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

    È possibile ottenere un oggetto che può fare tutte le operazioni CRUD di base senza definire mai in modo esplicito le tabelle del database. Un altro esempio è possibile inserire una riga con tutti i valori corrispondenti da un post form:

    manager.create($req.data);
    
  • Funzionale Programmazione : Se si è iniziato a giocare con avanzate funzioni JavaScript allora si potranno apprezzare quanto utile sono sul lato server. A causa del ambiente sul lato server coerente è sicuro da usare funzionalità avanzate come Extra array , generatori e iteratori , assegnazioni destrutturazione e E4X

cons:

  • Strumenti : lingue staticamente tipizzati come C # e Java hanno eccellenti strumenti di IDE e di sviluppo. linguaggi dinamici come JS semplicemente non hanno ancora il supporto strumento. Personalmente trovo che la forte riduzione nel codice standard e il tipo pignolo fusione rende per questo, ma questo è ancora un grosso svantaggio se avete fatto un sacco di sviluppo in IDE. Se si sta utilizzando un IDE, è possibile utilizzare jedit per linguaggi dinamici

  • Maturità / standardizzazione : Serverside JS è ancora un nuovo paradigma, e ci sono molti giocatori e non chiari vincitori. ECMA non ha gli standard per serverside JS. Come indicato nella risposta di Brandon, il CommonJS gruppo sta tentando di formare un serverside JS standard ed Myna ha CommonJS sperimentali supporto via Narwhal

come funziona bene in termini di prestazioni?

In velocità di calcolo grezzo, alcuni linguaggi dinamici possono eguagliare staticamente tipizzato linguaggi compilati come C # e Java. Detto questo, in realtà non importa. Qualsiasi parte della vostra applicazione che è computazionalmente intensive dovrebbe probabilmente essere scritto in Java, o utilizzare una libreria Java esistente. Non vorrei suggerire che chiunque scrivere un database in JS per esempio. Per le applicazioni web reali / servizi SOA, la causa principale di rallentamenti non è cruda velocità di calcolo, è il codice inefficiente, in particolare l'accesso al database. Myna aiuta con questo facendo le cose come:

  • script JS internamente caching compilati
  • istruzioni preparate internamente con memorizzate nella cache per le transazioni di database
  • query e frammento di output caching
  • Connessione al database pool
  • Supporto hash automatico ETag
  • Strumenti da profilatura
  • lazy loading di metadati

quanto bene possiamo implementare e mantenere le transazioni db? possiamo farlo in serverside JS ..?

Se vuoi dire transazione come in "un insieme di istruzioni SQL che possono essere invertiti o impegnati", quindi Myna non supporta ancora le transazioni. Sono aperto ad attuare questo se c'è abbastanza interesse.

Se vuoi dire "che tipo di supporto per i database non sul lato server hanno JS?" allora la risposta dipende dalla piattaforma. La piattaforma Myna fornisce le seguenti funzionalità di database:

  • Un'applicazione di amministrazione web-based in cui è possibile definire le "origini dati", cioè database di informazioni di connessione. È quindi possibile interrogare queste origini dati per nome. Myna include i driver JDBC per H2, MySQL, Microsoft SQL Server, e PostgreSQL, ma qualsiasi origine dati JDBC o ODBC può essere utilizzato
  • Myna.Database e < a href = "http://www.mynajs.org/shared/docs/js/libOO/files/Table-sjs.html" rel = "nofollow noreferrer"> Myna.Table fornire l'accesso metdata database neutro così come la creazione di tabelle e la modifica.
  • Query oggetto di Myna supporta maxRows , paging, parametri SQL, i gestori di fila personalizzati, query di-query, caching e molto altro ancora
  • DataManager oggetto supporta runtime la creazione di oggetti ORM

è possibile sviluppare servizi RESTful e sapone in serverside JS .. ??

REST e SOAP supporto sono piattaforme specifiche caratteristiche. oggetto WebService supporta i seguenti protocolli:

  • SOAP
  • XML-RPC
  • JSON-RPC
  • Ext diretto
  • JSON-MYNA (Un semplice protocollo che utilizza normali messaggi di forma e restituisce JSON. Facile da usare dal browser)

Myna comprende anche il PUT e DELETE metodi di richiesta e presenta accesso richiedere contenuto del corpo in testo e forma binaria, in modo che sia possibile gestire questi metodi RESTful in maniera specifica applicazione.

Debug

debug punto di interruzione tradizionale è una vera e propria sfida serverside. Anche se Rhino supporta ganci debugger, l'utilizzo di questi da una web app senza stato sarebbe piuttosto coinvolto. Personalmente non ho nemmeno usare i debugger breakpoint anche quando sono disponibili (ad esempio Firebug). Invece io preferisco la registrazione.

In Myna,

 Myna.log(type,label,detail)

si genera un thread a bassa priorità di scrivere un messaggio di log HTML per database di registrazione di Myna. Questi registri possono poi essere Searched tramite l'amministratore Myna. Registri registrano anche timestamp e millesimi di secondo trascorsi a fini di profilazione. Myna.dump (obj) può anche essere utilizzato per presentare una rappresentazione tabella HTML di qualsiasi oggetto. Myna registra anche tutte le eccezioni non-trattati con tracce di stack, contesto codice sorgente, e dettagli della richiesta. Tra il dump (), log (), e il gestore di errore predefinito non ho molta difficoltà il debug di codice Myna

Altri suggerimenti

Utilizzando lato server JS, possiamo implementare l'intera applicazione web senza l'utilizzo di linguaggi lato server di (come C #, Java, ecc).

Non dovrebbe essere necessario scrivere codice in tutte le altre lingue, anche se molti server-side framework JavaScript utilizzano il motore di Rhino, che consente di chiamare qualsiasi codice Java.

E 'davvero un approccio migliore ??

Non credo JavaScript (come linguaggio) è davvero una scelta migliore o peggiore rispetto ai linguaggi lato server tradizionali. Ha vantaggi (insieme ad altri linguaggi dinamici come Ruby e Python), come la flessibilità, la prototipazione rapida (no pun intended), flessibilità, ecc D'altra parte, non ha il supporto delle librerie che Java e C # hanno o tipizzazione statica (non voglio entrare nel dibattito su quale sia il migliore qui, mi piace sia per ragioni diverse).

Se si desidera che il meglio di entrambi, è possibile utilizzare JavaScript come linguaggio di scripting, integrato nell'applicazione. Rhino per Java, e JScript.NET lo rendono facile da manipolare oggetti "native" in JavaScript. Si potrebbe, ad esempio, scrivere le classi di dominio in Java o C #, e li script con JavaScript in cui si desidera una maggiore flessibilità. Se siete abbastanza confortevole con JavaScript, scrivendo in una sola lingua può essere più semplice però.

Non ho mai scritto un'applicazione server-side "reale" usando JavaScript, quindi non posso davvero fare un giudizio sul fatto che è meglio o peggio di .NET (ho anche mai usato JScript.NET). Ho giocato in giro con un paio di quadri per il divertimento e anche se attualmente sto riscrivendo il mio sito personale utilizzando Helma NG. Finora è stata una buona esperienza (molto meglio di PHP, che non ho mai veramente piaciuto).

quali sono le advandages e disadvandages?

Advantanges:

  • Solo una lingua necessaria per server-side e la programmazione lato client.
  • Possibilità di codice condiviso, per cose come validazione dei form. Jaxer consente di eseguire gli script sul client, server, o entrambi.
  • Si arriva a programmare in JavaScript (assumendo che ti piace la lingua).

Svantaggi:

  • Molti quadri sono sperimentali / non molto maturo.
  • Devi programmare in JavaScript (supponendo che non ti piace la lingua).

come funziona bene in termini di prestazioni?

Le prestazioni dovrebbero essere di circa paragonabile ad altri linguaggi di scripting.

v'è alcuna implementazione in tempo reale (siti web pubblici) usando solo lato server JS (senza altre lingue)?

Non so di nessun grandi siti web utilizzando JavaScript, ma ci può essere un po '.

quali sono le alternative disponibili oltre Aptana jaxer (open source) ??

lunga lista di opzioni , ma non ha molto utile informazione. Ci sono un sacco di opzioni con una vasta gamma di maturità e dimensioni.

Qui ci sono alcuni che ho familiarità con (a vari livelli)

  • Helma -. Rhino (Java) con framework basato record attivo
  • Helma NG - Helma Next Generation (riscrittura sperimentale, in fase di sviluppo attivo).
  • Phobos - ha un buon supporto in NetBeans .
  • v8cgi - Piccolo e semplice, utilizza il motore V8 di Google, probabilmente non pronto per la produzione ancora .
  • Jaxer - funziona a Spidermonkey con un'implementazione DOM, in modo da poter manipolare la pagina con framework come jQuery o Prototype. Ha un buon supporto IDE in Aptana Studio.

quanto bene possiamo implementare &mantenere le transazioni db? possiamo farlo in serverside JS ..?

quadri Rhino-based consente di utilizzare classi Java, in modo da avere il pieno supporto JDBC. Non ho usato le librerie di database di Jaxer, quindi non so nulla circa le sue capacità.

è possibile sviluppare servizi RESTful e sapone in serverside JS .. ??

RESTful API non dovrebbe essere alcun problema. Non so di alcun sostegno specifico per SOAP, ma dovrebbe essere possibile .

Come una prefazione, io uso SSJS al mio lavoro di giorno. Noi usiamo un ragionevolmente grande (in termini di complessità e di pagine viste) sito web su SpiderMonkey. Io aggiungere alla risposta eccellente di Matteo in cui ho esperienza.

E 'davvero un approccio migliore rispetto all'utilizzo di linguaggi lato server di assumere (c #)

"Better" in realtà dipende cosa si vuole fare con esso. JavaScript stessa ha alcune caratteristiche grandi, così come quelli abbastanza terribile. Se siete seriamente di sviluppare JS (client o server), non posso raccomandare abbastanza altamente che si guarda la presentazione di Douglas Crockford, JavaScript: le parti buone se non l'hai già. Ha fatto un lavoro fantastico sistemare la cruft, e lui è un eccellente oratore per l'avvio.

La cosa più grande che trovo il mondo SSJS manca in questo momento è la maturità. Non ho familiarità con C #, ma non ha JavaScript libreria standard maturo, e nessun mezzo maturi di distribuzione del pacchetto. Per me questo è un grande pezzo del puzzle.

Detto questo, tenere d'occhio la href="http://wiki.commonjs.org/wiki/CommonJS" rel="nofollow noreferrer"> CommonJS gruppo

come funziona bene in termini di prestazioni?

JavaScript per sé non è un linguaggio lento, né è uno particolarmente veloce. Come Matthew ha sottolineato, dovrebbe essere paragonabile a qualsiasi altro linguaggio di scripting si usa. La guerra tra il browser vendor per vedere chi può costruire il browser più veloce andrà a beneficio della folla SSJS pure.

Il garbage collection generazionale che la squadra V8 a costruire nel loro motore è un grande esempio di questo. Arrestare la macchina virtuale per liberare gli oggetti non raggiungibili dal mucchio e recuperare la memoria può essere un po 'lento, ma hanno mitigato che riducendo la quantità di oggetti che devono essere controllati quando il garbage collector esegue.

quanto bene possiamo implementare e mantenere le transazioni db? possiamo farlo in serverside JS ..?

Jaxer sembra avere MySQL e SQLite API di database. Come detto Matthew, se si utilizza Rhino, è possibile utilizzare l'API JDBC.

Modifica : link aggiunti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top