Domanda

Al momento, l'unico pienamente supportata la lingua, e lo standard de facto per l'albero DOM manipolazione del browser JavaScript.Sembra che ha profondi problemi di design che lo rendono un campo minato di bug e falle di sicurezza, anche per i principianti.

Sapete di quelle esistenti o previste iniziativa per introdurre una migliore (ridisegnato) lingua di ogni tipo (non solo javascript) per albero DOM, la manipolazione e le richieste HTTP per la prossima generazione di browser?Se sì, qual è la tabella di marcia per la sua integrazione in, diciamo, Firefox, e se no, per quali motivi (oltre che di interoperabilità) dovrebbe essere JavaScript l'unica lingua supportata sul browser?

Ho già usato jQuery e ho anche letto "javascript:le parti buone".Infatti i suggerimenti sono bene, ma quello che non riesco a capire è:perché solo javascript?Sul lato server (il-tuo-preferito-piattaforma os), siamo in grado di manipolare un albero DOM, con ogni linguaggio, anche fortran.Perché il lato client (il browser) il solo supporto per javascript?

È stato utile?

Soluzione

Il problema con javascript non è il linguaggio stesso - è una perfetta buona prototipato e linguaggio dinamico. Se venite da un background OO c'è un po 'di una curva di apprendimento, ma non è colpa del linguaggio.

La maggior parte della gente suppone che Javascript è come Java, perché ha la sintassi simile e un nome simile, ma in realtà è molto più simile a Lisp. In realtà è abbastanza adatto per manipolazione del DOM.

Il vero problema è che è compilato dal browser, e che significa che funziona in modo molto diverso a seconda del client.

Non solo è il DOM effettivo diverso a seconda del browser, ma c'è una differenza enorme in termini di prestazioni e il layout.


Modifica seguente chiarimento in questione

Supponiamo più linguaggi interpretati sono stati sostenuti - avete ancora gli stessi problemi. I vari browser sarebbe ancora buggy e hanno diverse DOM.

In aggiunta si dovrebbe avere un interprete integrata nel browser o in qualche modo installato come un plug-in (che si potrebbe verificare la presenza di prima servito la pagina) per ogni lingua. Ci sono voluti secoli per arrivare Javascript coerente.

Non è possibile utilizzare linguaggi compilati allo stesso modo - allora si sta introducendo un eseguibile che non possono essere facilmente esaminato per quello che fa. Molti utenti potrebbero scegliere di non farlo funzionare.

OK, quindi che dire di una sorta di sandbox per il codice compilato? Suona come applet Java per me. O ActionScript in Flash. O C # in Silverlight.

Che dire di un certo tipo di standard IL? Che ha più potenziale. Sviluppare in qualsiasi lingua che si desidera e quindi compilarlo a IL, che il browser quindi squadre investigative comuni.

Ad eccezione, JavaScript è una specie di già che IL - basta guardare a GWT . Esso consente di scrivere programmi in Java, ma distribuirli come HTML e JS.


Modifica seguenti ulteriori chiarimenti in questione

Javascript non è, o meglio non è stato, l'unica lingua supportata dai browser: indietro nei secoli bui di Internet Explorer si può scegliere tra il Javascript o VBScript per l'esecuzione in IE. Tecnicamente IE non ha nemmeno l'esecuzione di JavaScript - correva JScript (soprattutto per evitare di dover pagare per Sun la parola java , Oracle ancora proprio il nome di JavaScript ).

Il problema era che VBScript era di proprietà di Microsoft, ma anche che semplicemente non era molto buona. Mentre Javascript è stata l'aggiunta di funzionalità e di ottenere strumenti di debug tasso superiore in altri browser (come Firebug) VBScript rimasto IE-only e praticamente non-debuggable (strumenti di sviluppo in Internet Explorer 4/5/6 nessuno inesistente erano). Nel frattempo VBScript anche ampliato per diventare una bella potente strumento di scripting nel sistema operativo, ma nessuna di queste funzioni erano disponibili nel browser (e quando erano sono diventati enormi buchi di sicurezza).

Ci sono ancora alcune applicazioni interne aziendali là fuori che utilizzano VBScript (e un po 'si basano su questi buchi di sicurezza), e sono ancora in esecuzione IE7 (si sono fermati solo IE6 perché MS infine ucciso fuori).

stato attuale

Come Javascript per è stato un incubo e ha preso 20 anni. E ancora non ha il supporto coerente, con caratteristiche del linguaggio (specificati nel 1999) ancora mancante da alcuni browser e un sacco di spessori sia necessario.

L'aggiunta di una lingua alternativa per l'interpretazione in browser deve affrontare due problemi principali:

  • Come tutti i produttori di browser per implementare il nuovo standard di lingua -. Qualcosa che ancora non sono riusciti a JavaScript in 20 anni

  • Una seconda lingua diluisce potenzialmente il sostegno che già avete, che consente (per esempio) di IE per avere secondo tasso supporto JavaScript, ma grande VBScript (di nuovo). Io davvero non voglio essere la scrittura di codice in lingue diverse per differenti browser.

Non dovrebbe essereEd che Javascript non e 'finita' - è ancora in evoluzione per diventare migliore con i nuovi browser. Il ultima versione è anni avanti delle implementazioni dei browser e che stanno lavorando su quello successivo.

Altri suggerimenti

La compilazione del Javascript

Per ora, utilizzando un linguaggio compilato in Javascript sembra essere l'unico modo realistico per raggiungere tutte le piattaforme, mentre la scrittura più intelligente di codice, e questo probabilmente rimarrà il caso per un lungo periodo di tempo.Con ogni nuova offerta, ci sarà sempre una ragione per la quale uno o più venditori non si punta alla nave.

(Ma io davvero non credo che questo sia un problema.Javascript è stato ben ottimizzato da ora.Il codice macchina è anche pericoloso se scritti a mano, ma funziona bene come una compilazione di destinazione e di esecuzione della lingua).

Così tante opzioni

C'è un sempre crescente numero di lingue che la compilazione del Javascript.Un elenco abbastanza completo può essere trovato qui:

Degno di nota

Citerò penso che sono degni di nota (mentre senza dubbio trascurare alcune gemme che io non ho):

  • Spider apparso nel 2016.Si pretende di prendere le migliori idee di Andare, Swift, Python, C# e CoffeeScript.Non tipizzate, ma ha alcuni minori caratteristiche di sicurezza.

  • Olmo:Haskell può essere il più intelligente di lingua di tutti, e l'Olmo è una variante di Haskell per Javascript.È altamente tipo-aware e conciso, e offre Funzionali Reattivi Di Programmazione come alternativa accurata reattivo, template o MVC spaghetti.Ma può essere abbastanza uno shock per procedurali programmatori.

  • Google Andare è finalizzato alla concisione, semplicità e sicurezza.Vai di codice può essere compilato in Javascript da GopherJS.

  • Dart era di Google dopo il tentativo di sostituire Javascript.Offre interfacce e classi astratte attraverso un C/Java-come sintassi con optional di battitura.

  • Haxe è come Flash, ma è possibile target più lingue pertanto il codice può essere ri-utilizzato in Java, C, Flash, PHP e Javascript programmi.Offre type-safe e oggetti dinamici.

  • Opalang aggiunge zucchero sintattico per Javascript l'accesso diretto al database, smart continuazioni, tipo di controllo e di assistervi con il client/server di separazione.(Legato a NodeJS e MongoDB.)

  • GorillaScript, "una compilazione-di-linguaggio JavaScript progettate per l'utente durante il tentativo di evitare alcuni errori comuni." è simile a Coffeescript, ma più completo, che fornisce un sacco di funzioni extra per aumentare la sicurezza e ridurre le boilerplate modelli.

  • LiteScript cade da qualche parte nel mezzo Coffeescript e GorillaScript.Offre async/rendimento sintassi per "inline" callback e il controllo delle variabili di errori di battitura.

  • Microsoft Dattiloscritto è un piccolo sottoinsieme di Javascript che permette di inserire il tipo di restrizioni su argomenti della funzione, che potrebbe prendere un paio di bug.Allo stesso modo BetterJS consente di applicare restrizioni, ma in puro Javascript, aggiungendo chiamate extra o specificando i tipi in JSDoc commenti.E ora Facebook ha offerto Flusso inoltre esegue tipo di inferenza.

  • LiveScript è uno spin-off da Coffeescript, che era famoso per la sua brevità, ma non ha un aspetto molto leggibile per me.Probabilmente non è la migliore per le squadre.

Come scegliere?

Quando la scelta di un linguaggio alternativo, ci sono alcuni fattori da considerare:

  • Se altri sviluppatori unire il vostro progetto in futuro, quanto tempo ci vorrà loro di arrivare fino a velocità e imparare questa lingua, o quali sono le probabilità che si sa già?

  • La lingua troppo poche le caratteristiche (codice sarà ancora piena di boilerplate) o troppe funzioni (ci vorrà molto tempo per padroneggiare, e fino ad allora alcuni validi codice può essere indecifrabile)?

  • Non si hanno le caratteristiche di cui avete bisogno per il vostro progetto?(Fa il vostro progetto ha bisogno di verifica del tipo e delle interfacce?C'è bisogno di smart continuazioni per evitare nidificati richiamata inferno?C'è un sacco di reattività?Potrebbe essere a destinazione per altri ambienti in futuro?)

Il futuro...

Jeff Walker ha scritto un pensiero stimolante serie di post di blog su "il Javascript problema", compreso il motivo per cui egli non pensa Dattiloscritto, né DartCoffeescript offrire soluzioni adeguate.Egli suggerisce alcune caratteristiche desiderabili per un miglioramento del linguaggio la conclusione.

  

dovrebbe essere JavaScript l'unica lingua supportata sulla piattaforma browser?

Sì e no. C'è un'alternativa là fuori chiamato Dart da Google che non compilare a JavaScript e, proprio come jQuery si cerca di fare manipolazione del DOM un po 'più facile. Può essere divertente per sperimentare, check it out.

Si veda anche

E 'vero che Javascript era ad un punto notoriamente difficile da affrontare, ma la comunità di sviluppo web ha percorso una lunga strada da allora. Invece, vi incoraggio a dare un'occhiata al jQuery . E 'facile e astrae tutti i vari problemi.

E non ci sono davvero alternative che lavorano su tutta la linea. Flash viene in mente, ma anche questo è lo script ECMA ed è probabilmente più uccidere per la maggior parte delle cose.

A breve termine, mi piacerebbe usare cose come jQuery per nascondere le incompatibilità del browser. A lungo termine, le tecnologie come Silverlight o Adobe AIR possono rendere questo un campo minato molto diverso (ma pur sempre un campo minato) in futuro.

ha tenuto una conferenza a Google dettaglio la parti buone e cattive di JavaScript e il suo futuro. In realtà non è cambiato molto a tutti a partire dal 1999 - che si può dire di essere una buona cosa (praticamente tutti i browser possono eseguire lo stesso codice finché siete consapevoli dei loro limiti) e Doug mostra dove le parti buone erano per lo più le incomprensioni che si rivelano essere molto potente.

Per DOM manipuluation, guarda JQuery come una libreria lato client che sostituisce la maggior parte delle API DOM terribile con operazioni che sono un dolore a scrivere bit per abbastanza eleganti di codice che sono più facili da scrivere.

Se stai pensando che JavaScript ha problemi profondi, vi consiglio il libro di Doug Crockford, JavaScript : le parti buone . (O Google per "Crockford JavaScript" per trovare diverse presentazioni video che ha fatto.) Crockford delinea un sottoinsieme di sicurezza e un insieme di pratiche, e in particolare elenca alcune parti della lingua per evitare.

Sono a conoscenza di piani per sostituire JavaScript come de facto significa di manipolare il DOM. Quindi meglio imparare ad usarlo in modo sicuro e bene.

In termini di lato client JavaScript è l'unico modo per manipolare il DOM. In termini di lato server ci sono una moltitudine di modi.

Internet Explorer supporta linguaggi di scripting innesto, anche se l'unico modo affidabile fornito con IE oltre JScript è VBScript.

Per quanto ho visto, sembra che ci sia una sorta di generale preferenza verso linguaggi dinamici nel browser, e JavaScript sembra soddisfare questa esigenza in maniera sufficientemente adeguata che gli effetti di rete rendono qualsiasi altro linguaggio un non-starter. La lingua è in realtà molto potente, anche se la sua implementazione nei browser lascia molto a desiderare.

Se siete disposti a limitare le clienti / visitatori a browser specifici, ed eventualmente disposti a chiedere loro di installare un plug-in, si poteva guardare MS Silverlight - una panoramica leggibile è il wikipedia . Con Silverlight 2, è possibile eseguire, sul lato client, il codice che hai scritto in C #, IronPython, IronRuby, VB.NET, ecc; Moonlight clone di Silverlight, dal progetto Mono, promette di portare la stessa funzionalità per Linux .

In pratica, la maggior parte degli sviluppatori di applicazioni web e siti preferiscono per raggiungere un pubblico più ampio di Silverlight (ed eventualmente Moonlight) attualmente può fornire - il che significa attaccare con JavaScript, o forse Flash (che usa un linguaggio di programmazione simile, Actionscript).

Quindi, guadagnando sostanziale Mindshare, l'adozione e la trazione per tutto il resto sta dimostrando di essere una lotta in salita anche per Microsoft, con i suoi grandi gruppi di ingegneri e budget di marketing e di un progetto software libero sul lato (possibilmente facilitare preoccupazioni per lock-in proprietario) - che può aiutare a spiegare il motivo per cui c'è ben poco interesse, ad esempio, da parte della Mozilla Foundation, nello spingere verso tale obiettivo. "A parte l'interoperabilità", tu dici: ma è chiaro che la questione dell'interoperabilità è il disperatevi qui, dato ciò che osserviamo WRT progressi di Silverlight ...

Come già detto, si dispone di Flash (ActionScript, che è una lingua derivata dal Javascript) e Silverlight / Moonlight (IronPython, IronRuby, JScript, VBScript, C #) che può essere eseguito nel browser attraverso i plugin (il primo è molto più più onnipresenti).

C'è anche un'altra alternativa se si come Ruby: HotRuby , si tratta di un'implementazione rubino in JavaScript che eseguito nel browser. Non è ancora molto maturo, ma si può dare un'occhiata a questo.

Una cosa che non ho visto citato (oh, vedo Alcides menzionato HotRuby mentre io stavo scrivendo e Nosredna menzionato GWT e Script#) e vorrei buttare là fuori è che ci sono un certo numero di implementazioni di [indicare la lingua]-sul-JavaScript (es.i traduttori che consentono di convertire i Ruby, Python, C#, Java, Obj-J/Cappuccino [simile a Obj-C/Cocoa] o Elaborazione [per Tela] di JavaScript sul client o prima della distribuzione [e alcune delle quali dispongono anche di vari astrazione biblioteche]).Naturalmente c'è un sovraccarico a livello di prestazioni se si è tradotta sul client, ma se siete più confortevole con un'altra lingua vi permetterà una certa flessibilità.

Personalmente, però, io consiglio di imparare ad amare JavaScript.Si tratta di un eccellente linguaggio potente e bella, elegante, una volta che si sappia.Io sto affrontando il dilemma opposto, chomping al bit per avere una capace server-side JavaScript/DOM soluzione che soddisfi tutte le mie esigenze./parere non richiesto

No. JavaScript è, ma si evolverà. La prossima versione è "Armonia JavaScript", e si può imparare di più se Google che.

Di tanto in tanto qualcuno suggerisce di mettere un interprete bytecode nei browser fianco JavaScript. Probabilmente non accadrà, almeno per un po '.

mi capita di amare JavaScript. Ma ci sono altre soluzioni, tra cui GWT, che compila Java a JavaScript e script #, che compila C # per JavaScript.

Jquery (ancora javascript ma) sarà davvero aiutare che hanno il supporto per quasi tutti i browser e non è poi così difficile da imparare:)

JavaScript è la lingua inglese del web. Inglese storicamente diffuso perché aveva un forte flotta conquistando vari paesi. Questo è paragonabile a grandi aziende che ha conquistato il web con JavaScript. E 'un linguaggio colpita insieme da più fonti europee (greco, latino, lingue germaniche, anche alcune parole cinesi e indiani francesi). JavaScript preso in prestito un sacco di concetti nel corso degli anni da altre lingue (strutturale, OO, funzionale). Inglese è parlato in luoghi diversi con lievi variazioni dialettali e accento, che possono rendere difficile comprensione. Proprio come JavaScript ha diversi browser che interpretano un po 'diverso.

Anche se l'inglese è facile da imparare inizialmente, ha pronuncia molto incoerente e più eccezioni che regole. Proprio come JavaScript è sempre lì per offrire una sorpresa.

Nonostante i diversi accenti, JavaScript è la lingua franca del web. Proprio come si potrebbe non essere inglese e scrivere qui in inglese, tutti i browser web ha un certo grado di comprensione inglese. IE6 è come il ragazzo che dice sul suo curriculum che è fluente, ma solo è andato a un corso di due settimana su inglese come lingua straniera.

Ci sono stati tentativi di soppiantare l'inglese come lingua principale del mondo, per esempio Esperanto. Ma tutti falliti, perché la maggior parte persone sulla terra parlano un pò di inglese. Allo stesso modo sarà difficile introdurre migliori alternative a JavaScript.

Non credo che Javascript verrà sostituito in qualunque momento presto. Per un approccio completamente diverso per clienti ricchi, si potrebbe desiderare di indagare su Flex, che è una tecnologia basata su Flash.

Forse qualcosa di simile haxe (vedi haxe.org) potrebbe aiutare. Si tratta di un linguaggio che sembra più pulita rispetto a JavaScript e può essere compilato fino a JavaScript, in modo che possa essere eseguito all'interno di un browser.

So che questa non è una risposta diretta alla tua domanda, ma ho pensato che potrebbe essere interessante per voi, comunque.

Molte persone a capire che Javascript non è migliore e la lingua più bella mai. Tuttavia, è attualmente supportato dai browser, e quindi sarà estremamente difficile introdurre una lingua diversa. Noi semplicemente non abbiamo bisogno di un'altra guerra del browser.

Questo spiega il motivo per cui non conosco alcuna intenzione di passare a un diverso linguaggio lato client.

Ma penso Javascript non è così male se si inizia a pensare modello DOM e come si potrebbe lavorare con esso. Molte cose che sono disordinato con JS sono il risultato del modo in cui il modello DOM funziona.

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