Derzeit ist JavaScript die einzige vollständig unterstützte Sprache und der De-facto-Standard für die DOM-Baummanipulation im Browser. Es sieht so aus, als hätte es tiefgreifende Designprobleme, die es zu einem Minenfeld von Fehlern und Sicherheitslücken für Anfänger machen.
Kennen Sie eine bestehende oder geplante Initiative zur Einführung einer besseren (neu gestalteten) Sprache jeglicher Art (nicht nur Javascript) für die Manipulation von DOM-Bäumen und HTTP-Anforderungen in Browsern der nächsten Generation? Wenn ja, wie sieht die Roadmap für die Integration in beispielsweise Firefox aus, und wenn nein, aus welchen Gründen (abgesehen von der Interoperabilität) sollte JavaScript die einzige unterstützte Sprache auf der Browserplattform sein?
Ich habe bereits jQuery verwendet und auch "Javascript: die guten Teile" gelesen. Die Vorschläge sind zwar gut, aber was ich nicht verstehen kann, ist: Warum nur Javascript? Auf der Serverseite (Ihre Lieblings-Betriebssystemplattform) können wir einen DOM-Baum mit jeder Sprache bearbeiten, auch mit fortran. Warum unterstützt die Client-Seite (die Browser-Plattform) nur Javascript?
quelle
Antworten:
Das Problem mit Javascript ist nicht die Sprache selbst - es ist eine perfekt prototypisierte und dynamische Sprache. Wenn Sie aus einem OO-Hintergrund kommen, gibt es eine gewisse Lernkurve, aber es ist nicht die Schuld der Sprache.
Die meisten Leute nehmen an, dass Javascript wie Java ist, weil es eine ähnliche Syntax und einen ähnlichen Namen hat, aber eigentlich ist es viel mehr wie Lisp. Es ist eigentlich ziemlich gut für die DOM-Manipulation geeignet.
Das eigentliche Problem ist, dass es vom Browser kompiliert wird und das bedeutet, dass es je nach Client sehr unterschiedlich funktioniert.
Das tatsächliche DOM unterscheidet sich nicht nur je nach Browser, sondern es gibt auch einen massiven Unterschied in Leistung und Layout.
Bearbeiten Sie nach Klarstellung in Frage
Angenommen, mehrere interpretierte Sprachen wurden unterstützt - Sie haben immer noch dieselben Probleme. Die verschiedenen Browser wären immer noch fehlerhaft und hätten unterschiedliche DOMs.
Außerdem müsste für jede Sprache ein Interpreter in den Browser integriert oder als Plug-In installiert sein (nach dem Sie suchen könnten, bevor Sie die Seite bereitstellen). Es hat ewig gedauert, bis Javascript konsistent war.
Sie können kompilierte Sprachen nicht auf die gleiche Weise verwenden - dann führen Sie eine ausführbare Datei ein, die nicht einfach auf ihre Funktionsweise überprüft werden kann. Viele Benutzer würden sich dafür entscheiden, es nicht laufen zu lassen.
OK, was ist mit einer Art Sandbox für den kompilierten Code? Klingt für mich nach Java Applets. Oder ActionScript in Flash. Oder C # in Silverlight.
Was ist mit einer Art IL-Standard? Das hat mehr Potenzial. Entwickeln Sie in einer beliebigen Sprache und kompilieren Sie sie dann zu IL, die der Browser dann JITs.
Außer, dass Javascript schon so etwas wie IL ist - schauen Sie sich nur GWT an . Sie können damit Programme in Java schreiben, diese jedoch als HTML und JS verteilen.
Bearbeiten Sie nach weiterer Klarstellung in Frage
Javascript ist nicht oder nicht die einzige Sprache, die von Browsern unterstützt wird: In dunklen Zeiten des Internet Explorers konnten Sie zwischen Javascript und VBScript wählen, um es im IE auszuführen. Technisch gesehen hat IE nicht einmal Javascript ausgeführt - es wurde JScript ausgeführt (hauptsächlich, um Sun nicht für das Wort Java bezahlen zu müssen , besitzt Oracle immer noch den Namen Javascript ).
Das Problem war, dass VBScript Eigentum von Microsoft war, aber auch, dass es einfach nicht sehr gut war. Während Javascript Funktionen hinzufügte und erstklassige Debugging-Tools in anderen Browsern (wie FireBug) erhielt, blieb VBScript nur für den Internet Explorer und praktisch nicht debuggbar (Entwickler-Tools in IE4 / 5/6 waren nicht vorhanden). In der Zwischenzeit wurde VBScript auch zu einem ziemlich leistungsfähigen Skriptwerkzeug im Betriebssystem ausgebaut, aber keine dieser Funktionen war im Browser verfügbar (und als sie es waren, wurden sie zu massiven Sicherheitslücken).
Es gibt immer noch einige unternehmensinterne Anwendungen, die VBScript verwenden (und einige stützen sich auf diese Sicherheitslücken), und sie führen immer noch IE7 aus (sie haben IE6 nur gestoppt, weil MS es endgültig beendet hat).
Javascript auf den aktuellen Stand zu bringen war ein Albtraum und hat 20 Jahre gedauert. Es gibt immer noch keine konsistente Unterstützung, da in einigen Browsern immer noch Sprachfunktionen (angegeben 1999) fehlen und viele Shims erforderlich sind.
Das Hinzufügen einer alternativen Sprache für das Dolmetschen in Browsern ist mit zwei Hauptproblemen verbunden:
Alle Browser-Anbieter dazu bringen, den neuen Sprachstandard zu implementieren - etwas, das sie seit 20 Jahren für Javascript noch nicht geschafft haben.
Eine zweite Sprache verwässert möglicherweise die Unterstützung, die Sie bereits haben, und ermöglicht (zum Beispiel) dem IE eine zweitklassige Javascript-Unterstützung, aber (wieder) großartiges VBScript. Ich möchte wirklich keinen Code in verschiedenen Sprachen für verschiedene Browser schreiben.
Es sollte beachtet werden, dass Javascript nicht "fertig" ist - es entwickelt sich immer weiter, um in neuen Browsern besser zu werden. Die neueste Version ist den Implementierungen der Browser um Jahre voraus und sie arbeiten an der nächsten.
quelle
Kompilieren Sie mit Javascript
Derzeit scheint die Verwendung einer Sprache, die mit Javascript kompiliert wird, der einzig realistische Weg zu sein, um alle Plattformen zu erreichen, während intelligenterer Code geschrieben wird, und dies wird wahrscheinlich noch lange so bleiben. Bei jedem neuen Angebot wird es immer einen Grund geben, warum ein oder mehrere Anbieter sich nicht beeilen, es zu versenden.
(Aber ich denke nicht wirklich, dass dies ein Problem ist. Javascript wurde inzwischen gut optimiert. Maschinencode ist auch unsicher, wenn er von Hand geschrieben wird, funktioniert aber gut als Kompilierungsziel und Ausführungssprache.)
So viele Möglichkeiten
Es gibt einen ständig wachsenden Pool von Sprachen, die zu Javascript kompiliert werden. Eine ziemlich umfassende Liste finden Sie hier:
Bemerkenswert
Ich werde einige erwähnen, die ich für bemerkenswert halte (ohne Zweifel einige Edelsteine zu vernachlässigen, die mir nicht bekannt sind):
Spider erschien im Jahr 2016. Es behauptet, die besten Ideen von Go, Swift, Python, C # und CoffeeScript zu übernehmen. Es ist nicht typsicher, hat aber einige kleinere Sicherheitsmerkmale .
Elm : Haskell ist vielleicht die klügste Sprache von allen, und Elm ist eine Variante von Haskell für Javascript. Es ist sehr typbewusst und prägnant und bietet funktionale reaktive Programmierung als saubere Alternative zu reaktiven Vorlagen oder MVC-Spaghetti. Für prozedurale Programmierer kann dies jedoch ein ziemlicher Schock sein .
Googles Go zielt auf Prägnanz, Einfachheit und Sicherheit ab. Go-Code kann von GopherJS in Javascript kompiliert werden .
Dart war Googles späterer Versuch, Javascript zu ersetzen. Es bietet Schnittstellen und abstrakte Klassen über eine C / Java-ähnliche Syntax mit optionaler Eingabe.
Haxe ähnelt Flashs ActionScript, kann jedoch mehrere Sprachen ansprechen, sodass Ihr Code in Java-, C-, Flash-, PHP- und Javascript-Programmen wiederverwendet werden kann. Es bietet typsichere und dynamische Objekte.
Opalang fügt Javascript syntaktischen Zucker hinzu, um direkten Datenbankzugriff , intelligente Fortsetzungen, Typprüfung und Unterstützung bei der Trennung von Client und Server zu ermöglichen. (Mit NodeJS und MongoDB verbunden.)
GorillaScript , "eine Compile-to-JavaScript-Sprache, die den Benutzer befähigt, einige häufige Fehler zu vermeiden." ähnelt Coffeescript, ist jedoch umfassender und bietet eine Reihe zusätzlicher Funktionen, um die Sicherheit zu erhöhen und sich wiederholende Muster der Kesselplatten zu reduzieren.
LiteScript liegt irgendwo zwischen Coffeescript und GorillaScript. Es bietet Async / Yield-Syntax für "Inline" -Rückrufe und die Suche nach variablen Tippfehlern.
Microsoft TypeScript ist eine kleine Obermenge von Javascript, mit der Sie Funktionsargumente typbeschränken können, wodurch einige Fehler auftreten können. In ähnlicher Weise können Sie mit BetterJS Einschränkungen anwenden, jedoch in reinem Javascript, indem Sie entweder zusätzliche Aufrufe hinzufügen oder Typen in JSDoc-Kommentaren angeben. Und jetzt hat Facebook Flow angeboten, das zusätzlich Typinferenzen durchführt.
LiveScript ist ein Spin-off von Coffeescript, das wegen seiner Kürze beliebt war, aber für mich nicht sehr lesbar erscheint. Wahrscheinlich nicht das Beste für Teams.
Wie man wählt?
Bei der Auswahl einer alternativen Sprache sind einige Faktoren zu berücksichtigen :
Wenn andere Entwickler in Zukunft Ihrem Projekt beitreten, wie lange werden sie brauchen, um sich mit dieser Sprache vertraut zu machen, oder wie hoch sind die Chancen, dass sie sie bereits kennen?
Hat die Sprache zu wenige Funktionen (der Code ist immer noch voll mit Boilerplate) oder zu viele Funktionen (die Beherrschung dauert lange, und bis dahin ist möglicherweise ein gültiger Code nicht entschlüsselbar)?
Verfügt es über die Funktionen, die Sie für Ihr Projekt benötigen? (Benötigt Ihr Projekt eine Typprüfung und Schnittstellen? Benötigt es intelligente Fortsetzungen, um verschachtelte Rückrufhölle zu vermeiden? Gibt es viel Reaktivität? Könnte es in Zukunft auf andere Umgebungen abzielen müssen?)
Die Zukunft...
Jeff Walker hat eine zum Nachdenken anregende Reihe von Blog-Posts über "das Javascript-Problem" geschrieben, unter anderem, warum er der Meinung ist , dass weder TypeScript noch Dart oder Coffeescript angemessene Lösungen bieten. Er schlägt zum Schluss einige wünschenswerte Merkmale für eine verbesserte Sprache vor .
quelle
Ja und nein. Es gibt eine Alternative namens Dart von Google, die mit JavaScript kompiliert wird und genau wie jQuery versucht, die DOM-Manipulation ein wenig zu vereinfachen. Es kann Spaß machen zu experimentieren, probieren Sie es aus.
Siehe auch
quelle
Es ist wahr, dass Javascript an einem Punkt notorisch schwer zu handhaben war, aber die Webentwicklungs-Community hat seitdem einen langen Weg zurückgelegt. Stattdessen möchte ich Sie ermutigen, sich jQuery anzuschauen . Es ist einfach und abstrahiert all die verschiedenen Probleme.
Und es gibt wirklich keine Alternativen, die auf der ganzen Linie funktionieren. Flash fällt mir ein, aber auch das ist ein ECMA-Skript und für die meisten Dinge ist es wahrscheinlich zu viel.
quelle
Kurzfristig würde ich Dinge wie jQuery verwenden, um die Inkompatibilitäten des Browsers zu verbergen. Langfristig könnten Technologien wie Silverlight oder Adobe AIR dies in Zukunft zu einem ganz anderen Minenfeld (aber immer noch zu einem Minenfeld) machen.
quelle
Doug Crockford hielt einen Vortrag bei Google über die schlechten und guten Teile von JavaScript und seine Zukunft. Es hat sich seit 1999 nicht viel geändert - was als eine gute Sache bezeichnet werden kann (so gut wie alle Browser können denselben Code ausführen, solange Sie sich ihrer Einschränkungen bewusst sind), und Doug zeigt, wo die guten Teile liegen waren meistens Missverständnisse, die sich als sehr mächtig herausstellten.
Betrachten Sie JQuery für die DOM-Manipulation als clientseitige Bibliothek, die den größten Teil der schrecklichen DOM-API durch Vorgänge ersetzt, bei denen es schwierig ist, in ziemlich elegante Code-Teile zu schreiben, die einfacher zu schreiben sind.
quelle
Wenn Sie denken, dass JavaScript tiefgreifende Probleme hat, empfehle ich Doug Crockfords Buch JavaScript: The Good Parts . (Oder Google für "Crockford JavaScript", um mehrere Videopräsentationen zu finden, die er erstellt hat.) Crockford skizziert eine sichere Teilmenge und eine Reihe von Vorgehensweisen und listet speziell einige Teile der Sprache auf, die vermieden werden sollen.
Mir sind keine Pläne bekannt, JavaScript als De-facto- Mittel zur Manipulation des DOM zu ersetzen . Lernen Sie also am besten, es sicher und gut zu verwenden.
quelle
In Bezug auf die Clientseite ist Javascript die einzige Möglichkeit, das DOM zu manipulieren. In Bezug auf die Serverseite gibt es eine Vielzahl von Möglichkeiten.
quelle
Internet Explorer unterstützt steckbare Skriptsprachen, obwohl VBScript die einzige ist, die neben JScript zuverlässig im IE enthalten ist.
Soweit ich gesehen habe, scheint es im Browser eine allgemeine Tendenz zu dynamischen Sprachen zu geben, und JavaScript scheint diesen Bedarf ausreichend zu decken, sodass Netzwerkeffekte jede andere Sprache zu einem Nichtstarter machen. Die Sprache ist eigentlich ziemlich mächtig, obwohl ihre Implementierung in Browsern zu wünschen übrig lässt.
quelle
Wenn Sie bereit sind, Ihre Kunden / Besucher auf bestimmte Browser zu beschränken und möglicherweise von ihnen die Installation eines Plug-Ins zu verlangen, können Sie sich MS Silverlight ansehen - eine lesbare Übersicht finden Sie auf Wikipedia . Mit Silverlight 2 können Sie clientseitigen Code ausführen, den Sie in C #, IronPython, IronRuby, VB.NET usw. geschrieben haben. Der kostenlose Moonlight- Klon von Silverlight aus dem Mono-Projekt verspricht, Linux dieselbe Funktionalität zu bieten.
In der Praxis bevorzugen die meisten Entwickler von Web-Apps und Websites ein breiteres Publikum, als Silverlight (und schließlich Moonlight) derzeit bieten kann. Dies bedeutet, dass Sie sich an Javascript oder möglicherweise an Flash halten (das eine ähnliche Programmiersprache, Actionscript, verwendet).
Daher ist es selbst für Microsoft mit seinen großen Gruppen von Ingenieuren und Marketingbudgets und einem Nebenprojekt für freie Software ein harter Kampf, sich für alles andere einiges an Mindshare, Akzeptanz und Traktion zu verschaffen (um möglicherweise die Sorgen über proprietäre Lock-In zu lindern) ) - was erklären kann, warum es sehr wenig Interesse gibt, z. B. seitens der Mozilla Foundation, auf ein solches Ziel hinzuarbeiten. "Abgesehen von der Interoperabilität" sagen Sie: Aber das Problem der Interoperabilität ist hier eindeutig DAS große Problem, wenn man bedenkt, was wir über den Fortschritt von Silverlight beobachten ...
quelle
Wie bereits gesagt, haben Sie Flash (ActionScript, eine von Javascript abgeleitete Sprache) und Silverlight / Moonlight (IronPython, IronRuby, JScript, VBScript, C #), die über Plugins im Browser ausgeführt werden können (die erste ist viel allgegenwärtiger). .
Es gibt auch eine andere Alternative, wenn Sie Ruby mögen: HotRuby , eine Ruby-Implementierung in Javascript, die im Browser ausgeführt wird. Es ist noch nicht sehr ausgereift, aber Sie können es sich ansehen.
quelle
Eine Sache, die ich nicht erwähnt habe (oh, ich sehe, dass Alcides HotRuby während des Schreibens erwähnt hat und Nosredna GWT und Script # erwähnt hat) und die ich gerne wegwerfen möchte, ist, dass es eine Reihe von Implementierungen von [Sprache einfügen] -on- gibt JavaScript (z. B. Übersetzer, mit denen Sie Ruby , Python , C # , Java , Obj-J / Cappuccino [ähnlich wie Obj-C / Cocoa] oder Processing [für Canvas] entweder auf dem Client oder vor der Bereitstellung [und einige] in JavaScript konvertieren können davon auch verschiedene Abstraktionsbibliotheken]). Natürlich entsteht ein Leistungsaufwand, wenn es auf dem Client übersetzt wird, aber wenn Sie mit einer anderen Sprache besser vertraut sind, können Sie flexibel sein.
Persönlich empfehle ich jedoch zu lernen, JavaScript zu lieben. Es ist eine ausgezeichnete, kraftvolle Sprache und ziemlich elegant, wenn Sie sie kennenlernen. Ich stehe vor dem gegenteiligen Dilemma und bin auf der Suche nach einer leistungsfähigen serverseitigen JavaScript / DOM-Lösung, die alle meine Anforderungen erfüllt. / unaufgeforderte Meinung
quelle
Nein, JavaScript ist es, aber es wird sich weiterentwickeln. Die nächste Version ist "JavaScript Harmony", und Sie können mehr erfahren, wenn Sie das googeln.
Hin und wieder schlägt jemand vor, neben JavaScript einen Bytecode-Interpreter in die Browser einzufügen. Wird wahrscheinlich zumindest für eine Weile nicht passieren.
Ich liebe JavaScript. Es gibt jedoch auch andere Lösungen, einschließlich GWT, das Java zu JavaScript kompiliert, und Script #, das C # zu JavaScript kompiliert.
quelle
Jquery (immer noch Javascript, aber) es wird dir wirklich helfen, dass sie Unterstützung für fast alle Browser haben und es ist nicht wirklich schwer zu lernen :)
quelle
JavaScript ist die englische Sprache des Webs. Englisch verbreitete sich historisch, weil es eine starke Marine hatte, die verschiedene Länder eroberte. Dies ist vergleichbar mit großen Unternehmen, die das Web mit JavaScript erobert haben. Es ist eine Sprache, die aus mehreren europäischen Quellen zusammengetragen wurde (Griechisch, Latein, Germanisch, Französisch, sogar einige chinesische und indische Wörter). JavaScript hat im Laufe der Jahre viele Konzepte aus anderen Sprachen (strukturell, OO, funktional) übernommen. Englisch wird an verschiedenen Orten mit geringfügigen Abweichungen in Dialekt und Akzent gesprochen, was das Verständnis erschweren kann. Genauso wie JavaScript verschiedene Browser hat, die es etwas unterschiedlich interpretieren.
Obwohl Englisch anfangs leicht zu lernen ist, hat es eine sehr inkonsistente Aussprache und mehr Ausnahmen als Regeln. Genau wie JavaScript ist es immer da, um eine Überraschung zu bieten.
Trotz der unterschiedlichen Akzente ist JavaScript die Verkehrssprache des Webs. So wie Sie vielleicht nicht Englisch sind und hier auf Englisch schreiben, hat jeder Webbrowser ein gewisses Maß an Englischverständnis. IE6 ist wie der Typ, der in seinem Lebenslauf sagt, dass er fließend ist, aber nur einen zweiwöchigen Kurs über Englisch als Fremdsprache besucht hat.
Es gab Versuche, Englisch als Hauptsprache der Welt zu verdrängen, z. B. Esperanto. Aber alle haben versagt, weil die meisten Menschen auf der Erde etwas Englisch sprechen. Ebenso wird es schwierig sein, bessere Alternativen zu JavaScript einzuführen.
quelle
Ich glaube nicht, dass Javascript bald ersetzt wird. Für einen völlig anderen Ansatz für Rich Clients sollten Sie Flex untersuchen, eine Flash-basierte Technologie.
quelle
Vielleicht könnte Ihnen so etwas wie haxe (siehe haxe.org) helfen. Es ist eine Sprache, die sauberer als JavaScript zu sein scheint und bis zu JavaScript kompiliert werden kann, sodass sie in einem Browser ausgeführt werden kann.
Ich weiß, dass dies keine direkte Antwort auf Ihre Frage ist, aber ich dachte, es könnte trotzdem für Sie interessant sein.
quelle
Viele Menschen verstehen, dass Javascript nicht die beste und schönste Sprache überhaupt ist. Es wird derzeit jedoch von Browsern unterstützt, und daher wird es äußerst schwierig sein, eine andere Sprache einzuführen. Wir brauchen einfach keinen weiteren Browserkrieg.
Dies erklärt, warum ich keine Pläne kenne, auf eine andere clientseitige Sprache umzusteigen.
Aber ich denke, Javascript ist nicht so schlecht, wenn Sie über das DOM-Modell nachdenken und wie man damit arbeiten würde. Viele Dinge, die mit JS chaotisch sind, sind das Ergebnis der Funktionsweise des DOM-Modells.
quelle