Reiner Java-Webbrowser, ist das praktisch? [geschlossen]

29

Ich weiß, dass ein Java-Webbrowser möglich ist, aber ist er praktisch? Ich habe das Lobo-Projekt gesehen und muss zugeben, dass ich beeindruckt bin, aber nach dem, was ich zusammengetragen habe, scheint die Entwicklung im Jahr 2009 gestoppt zu sein. Wäre ein in reinem Java codierter Browser (keine WebKit-Java-Bindungen jeglicher Art) in der Lage, mitzuhalten die in den Reihen von Chrome oder Firefox, oder würde es von Natur aus langsamer sein und den Benutzer behindern?

Rätselhaftigkeit
quelle
5
Interessante Frage, da ein Webbrowser namens HotJava eine frühe Java-Demo-App war.
user16764
3
Es war nicht nur eine Demo-App, sondern ein wichtiger Bestandteil der kommerziellen Sun Java-Strategie der späten 90er / frühen 2000er Jahre. Fügen Sie der Liste der Java-Kuriositäten von Sun aus der gleichen Zeit hinzu: JavaOS / JavaStation.
JustinC
3
Technisch gesehen, wären die Android-Versionen von Opera, Chrome & FF nicht in Java geschrieben? Ich habe FF noch nicht ausprobiert, aber mit einem anständigen Gerät funktioniert Chrome & Opera ziemlich gut.
TC1
2
@ TC1 Ich denke, sie wurden mit dem Android Native Development Kit in C \ C ++ geschrieben.
Wesley Wiser
Aus logischen Gründen wieder geschlossen. Sie (SE) erwarten also, dass nur "Experten" antworten? Und wie würden Experten jetzt antworten, nachdem Sie es geschlossen haben? Soll ein Community-Forum nicht von irgendjemandem beantwortet werden? Ist es nicht Aufgabe der Site, Antworten zu zeigen, die als erstes mit "up" bewertet wurden? Schlechte und heruntergestimmte Antworten können ausgeblendet oder archiviert werden. Sie sollten nicht so eigensinnig und autoritär sein.
Killjoy

Antworten:

44

Die Programmiersprache wird höchstwahrscheinlich nicht der Stolperstein sein. Die obligatorische Speicherverwaltung der JVM kann in einigen leistungskritischen Bereichen von Nachteil sein (z. B. Speicherhunger; Javas GC kann jedoch Speicherlecks besser verhindern als alles, was Sie selbst verursachen könnten), und es gibt ein paar zusätzliche Sicherheitsbedenken. aber sonst sehe ich keine offensichtlichen Show-Stopper.

Jedoch.

Ein Webbrowser in der Größenordnung von Firefox oder Chromium ist ein gewaltiges Unterfangen, und beide Projekte verfügen über eine enorme Erfahrung - Mozilla baut auf jahrzehntelanger Browsererstellung (und einigen bekannten Fehlern) auf, und Chrome / Chromium verfügt sowohl über Google als auch über Apple (eine der Hauptkräfte bei der Entwicklung von WebKit) und hat viel Wissen und Erfahrung aus KDE und anderen großen Open-Source-Projekten aufgegriffen. Beide nutzen zusätzlich Dutzende von kampferprobten Bibliotheken, rendern nicht nur Engines, sondern alles Mögliche. Vektorgrafiken, Zeichensatzwiedergabe, Syntaxanalyse, XML-DOM-Baum-Manipulation, Vernetzung, Caching, Kryptografie, die Liste geht weiter und weiter, und Sie möchten nicht alle diese Räder selbst neu erfinden, weil sie schwer zu tun und leicht zu verwechseln sind .

Kurz gesagt, es ist verdammt schwierig, einen branchenführenden Webbrowser zu entwickeln, und das ist der Grund, warum es in dieser Arena nur eine Handvoll Erfolgsgeschichten gibt. Die Programmiersprache hat relativ wenig damit zu tun, obwohl C und C ++ technisch und sozial im Vorteil sind.

tdammers
quelle
11

In der Theorie könnte es zweifellos getan werden. Aus praktischer Sicht erscheint es jedoch etwas fragwürdiger. loboist nicht einmal in der Nähe des ersten Mal, wenn es ausprobiert wurde. Tatsächlich sollte eines der ersten Beispiele für die Überlegenheit von Java der HotJava-Browser sein, der die Welt verändern und die Browser der "Mosaik-Generation" obsolet machen würde .

Natürlich wissen wir alle, dass das Gegenteil der Fall ist: HotJava ist tot und war in den Browserkriegen nie wirklich ein ernstzunehmender Konkurrent darüber, wie es nicht ganz richtig funktioniert hat (auch für Suns eigene Web-Apps).

Persönlich denke ich, sich zu fragen, ob es möglich oder praktisch ist, ist (meistens) in die falsche Richtung zu schauen und zu denken. Die Frage ist nicht, ob Java solch massive Strafen mit sich bringt, wenn ein solches Projekt unpraktisch ist. Die Frage ist, ob Java genügend Vorteile hat, um ein solches Projekt zu rechtfertigen.

Die einfache Tatsache ist, dass das Webkit (um Ihr Beispiel zu verwenden) ein großes, komplexes Stück Code ist. Auch wenn wir davon ausgehen, dass Java so viel wundervoller ist, dass wir dasselbe mit beispielsweise der Hälfte der Größe und Komplexität tun könnten, ist das Ergebnis immer noch ein ziemlich großes, komplexes Stück Code (ebenfalls V8 usw.).

Ich denke, bevor diese Menge an Arbeit vervielfältigt wird, möchten die meisten Menschen ein wenig mehr Sicherheit als: "Wir glauben, dass unser Produkt wahrscheinlich ziemlich wettbewerbsfähig ist."

Wenn Sie mit einer Reihe von vom Benutzer sichtbaren Funktionen für einen Browser beginnen und dann versuchen, die effizienteste Methode zum Erstellen eines Browsers mit diesen Funktionen zu ermitteln, wird "Java" wahrscheinlich nicht Teil dieser Antwort sein, außer als Teil von " Javascript ". Wenn die Geschichte war anders ausgearbeitet, gibt es wahrscheinlich keinen Grund , es könnte nicht (zumindest theoretisch) ein Teil der Antwort sein, aber angesichts gegenwärtigen Umständen ist es nicht.

Darüber hinaus sehe ich nur eine sehr geringe Wahrscheinlichkeit, dass sich dies ändert. Ich kann es kaum sehen, wenn Oracle (oder möglicherweise IBM) entschieden hat, dass es nützlich ist, Javas Wettbewerbsposition gegenüber (als offensichtliches Beispiel) Microsoft .NET beizubehalten, aber das scheint zweifelhaft, es sei denn, .NET beginnt, Javas Kernmarkt zu bedrohen.

Abgesehen davon können alle Funktionen, die Sie sich vorstellen können (außerhalb von "In Pure Java geschrieben" als eine Funktion für sich), mit ziemlicher Sicherheit schneller und einfacher ausgeführt werden, als wenn Sie einen Browser vollständig in Java schreiben.

Jerry Sarg
quelle
1
Ich habe den Geruch von alten Büchern in der Nase, als ich diesen HotJava-Link
durchgelesen habe
2
Denken wir auch daran, dass Java in den HotJava-Tagen hinsichtlich der verfügbaren Bibliotheken, der Entwicklererfahrung und der Geschwindigkeit schwach war (manchmal 10-15-fache Verlangsamung). Heute ist es in jedem Bereich ganz anders. Es gibt sogar Java - Prozessoren jetzt (Sie können Java - Browser - Thin - Client auf Java - Prozessor? Zwinkern sagen) Ich denke , HotJava gescheitert einfach b / c Java - Plattform nicht gut genug war , dann .
Nick P
5

Ich bin der festen Überzeugung, dass ein engagiertes, sachkundiges Team einen leistungsstarken Webbrowser in Java erstellen kann. Die eigentliche Frage ist, warum? Den Browser in einer bestimmten Sprache schreiben zu lassen, ist eigentlich keine Funktion. Die Leute werden Chrome verwenden, weil es schnell ist, oder Firefox, weil es erweiterbar ist, aber sie werden JBrowser nicht verwenden, nur weil es zufällig in Java geschrieben ist. Die eigentliche Frage lautet also: Welches Problem versuchen Sie zu lösen?

Die nächste Frage, vorausgesetzt, Sie haben einen Grund, JBrowser zu schreiben, lautet: "Macht die Verwendung von Java die Aufgabe einfacher oder schwieriger?" Google hat Chrome in erster Linie in C / C ++ geschrieben, obwohl es sich um einen sehr Java-freundlichen Shop handelt. Es ist sehr wahrscheinlich, dass sie der Meinung waren, dass die Vorteile von Java nicht rechtzeitig einen Nettogewinn bringen würden.

Michael
quelle
2

Wenn Nashorn (das Javascript auf der JVM, das Rhino ersetzt) ​​als Teil von Java 8 zur JVM kommt, ist dies in höchstem Maße möglich. Wie andere angemerkt haben, gehört zu einem modernen Webbrowser eine Menge dazu, und es scheint einfacher zu sein, WebKit einzubetten, wenn Sie Browsing-Funktionen in einer Java-App hosten müssen :-).

Martijn Verburg
quelle
1

Die aktuelle Top-Antwort ist hervorragend. Ich werde jedoch hinzufügen, dass man etwas in Java nicht vollständig neu codieren muss. Es gibt Tools, die native Quellcodes in Java-Bytecodes mit unterschiedlichem Interoperabilitätsgrad konvertieren. Sie erstellen häufig eine Art Interpreter oder verwenden eine JVM-ähnliche Darstellung wie MIPS als Sprungbrett. Eine Java-Browser-Entwicklung kann in viele Schritte unterteilt werden, indem wichtige native Bibliotheken in Java-Bytecode konvertiert, in eine reine Java-Browser-Quelle integriert und nach und nach mehr Bibliothekscode als reine Java-Quelle implementiert werden.

Auf diese Weise können Sie alles in die sicherere JVM aufnehmen. Es wird jedoch ein Ärgernis für die Gewährleistung der Effizienz sein. Es gibt einige Präzedenzfälle bei der schrittweisen Überarbeitung großer älterer Agile / OOP-Anwendungen. Einige der Komponenten haben bereits gute Java-Implementierungen und diese könnten auch zur Reduzierung des Arbeitsaufwands verwendet werden.

Nick P
quelle
0

Ich muss sagen, dass ich hier ein bisschen voreingenommen bin, aber hier bin ich. Ich mag die C / C ++ Prediger nicht, ich weiß, dass es einige unglaublich gut entwickelte Anwendungen gibt, aber es ist nur ein A-Tool. Oft hatte ich den Eindruck, dass viele Leute nur C / C ++ erwähnen, um eine Lösung zu finden. http://www.paulgraham.com/avg.html siehe Zwiebelparadoxon). Ich versuche mir die Fakten anzuschauen: Java ist so schnell wie C / C ++, benötigt aber dafür mehr Speicher. Oder lassen Sie mich umformulieren, Sie können Java-Code schreiben, der so schnell wie C / C ++ ist, aber dieses Programm wird mehr Speicher verbrauchen. Ich hoffe, wir können uns darauf einigen.

Wenn Sie sich die Produktivität ansehen, können Sie Java-Lösungen für bestimmte Probleme (z. B. Enterprise Java) im Vergleich zu C ++ - Lösungen relativ einfach erstellen. Ein Webbrowser ist etwas völlig anderes. Ich sehe zwei / drei Bürgermeisteranforderungen:

  • Es muss großen Spezifikationen, HTML, JavaScript usw. entsprechen. Dies beinhaltet Probleme wie 2D-Zeichnungs-APIs. Oder wie kommt man von einem OS-Systemaufruf (als Zeichnungsprimitiv) zu einer Text- oder Schriftdarstellung („Rendering“)? Schauen Sie sich Bibliotheken wie cairo (C) und andere Versuche wie gezira an (www.youtube.com/watch?v=P97O8osukZ0, https://github.com/damelang/gezira ).
  • Es muss sich fließend anfühlen, was bedeutet, dass bestimmte Operationen nur ms ausgeführt werden müssen.
  • Es muss ein UI-Konzept bilden, das eine einzigartige Erfahrung darstellt, um in den heutigen "Browser-Kriegen" bestehen zu können, die eine große Herausforderung darstellen.

Fazit: Ja, Sie könnten Browser in fast jeder Programmiersprache erstellen, mit nahezu identischen Ergebnissen im Vergleich zu den heutigen C ++ - Dampfschiffen. Aber dazu müssten Sie sich außerordentlich viel Mühe geben. Ich weiß nicht, wie viel (in Millionen) ich nicht einmal erraten möchte. Vielleicht könnten wir dieses Fazit ziehen: Leute, die sich für C / C ++ interessieren, optimieren nicht gerne in Hochsprachen, oder vielleicht ist es billiger, wenn sie sich für C / C ++ interessieren, weil es so viele gibt (im Vergleich zu anderen Sprachexperten, die optimieren können) ein ähnliches Niveau).

AndreasScheinert
quelle
2
Ich bin versucht, abzustimmen, weil Sie Ihre Antwort nicht in mehrere Absätze unterteilt haben. Bitte teilen Sie Ihre Textwand mit Leerzeichen auf.
Gilbert Le Blanc
2
Nun, ich schreibe vom Handy, und das ist das Beste, was ich mit dem Handy-Interface machen kann, sorry
AndreasScheinert
1
Ging zu einem Laptop und reparierte es.
AndreasScheinert
2
"Oder lassen Sie mich umformulieren, Sie können Java-Code schreiben, der so schnell wie C / C ++ ist, aber dieses Programm wird mehr Speicher verbrauchen. Ich hoffe, wir können uns darauf einigen." Nein, können wir nicht, zumindest nicht in allen Fällen. In Java können Sie nicht mehrere benutzerdefinierte Speichermanager für unterschiedliche Muster der Speicherzuweisung implementieren. Sie können die Überprüfung der Array-Grenzen nicht deaktivieren, wenn Sie feststellen, dass sie nicht erforderlich sind. Sie müssen nur hoffen, dass die JIT erkennt, wenn sie nicht benötigt wird. Diese Probleme treten in den meisten Programmen nicht auf, können jedoch in Anwendungen von entscheidender Bedeutung sein, die eine Leistung von bis zu einer Nanosekunde benötigen.
Charles E. Grant
1
Ihre wiederholten Argumente hier, dass die Garbage Collection einige Auswirkungen auf die Leistung hat. Ich stimme dem zu. Aber es ist nur ein Aspekt.
AndreasScheinert
0

Es wäre vergleichbar mit dem Konzept in den Windows 9x-Tagen, in denen Software OpenGL oder hardwarebeschleunigtes OpenGL ausgeführt wurde. Das Problem bei der Verwendung von Java für so etwas wie einen Webbrowser besteht darin, dass Sie möglicherweise viele zusätzliche Taktzyklen verwenden, um etwas zu tun, das in einer Muttersprache in weniger möglich ist. Das war auch das Konzept mit OpenGL - Sie konnten die Aufgabe abschließen, aber es erforderte viel mehr Verarbeitung.

Also ist es möglich? Möglicherweise. Wäre es wettbewerbsfähig? Unwahrscheinlich - etwas in hochoptimiertem, plattformabhängigem Code wird wahrscheinlich einen signifikanten Geschwindigkeitsvorteil haben.

Dies ist jedoch nur Spekulation.

David Betournay
quelle
-1

Über die Machbarkeit eines in Java geschriebenen Java-Webbrowsers wurde möglicherweise die falsche Frage gestellt.

Ich sehe keine Notwendigkeit, das Rad neu zu erfinden und einen vollwertigen Browser zu schreiben, wenn die meisten der vorhandenen kostenlos und funktionsreich sind.

Das heißt, wonach ich (wir?) Suchen sollte, ist "etwas", das gut genug ist, um Webseiten OHNE all den Mist (Werbung, Videos, Gifs) zu lesen, der aufgeschichtet wird.

Google ist der Haupttäter hier mit all ihren Anzeigen und so.

Um zu beheben, dass ich einen Java-Browser geschrieben habe, der das Java HTMLEditorKit mit seiner HTML 3.2-Implementierung verwendet und eine Webseite als Text liest, werden der gesamte Javascript-Code, der Style-Code, die Links und die Metadaten entfernt (eine weitere Quelle der Irritation) neu laden) und versucht, einige Sonderzeichen und Bildverknüpfungen zu korrigieren, die über Javascripts gesetzt wurden. Hyperlinks und Navigation funktionieren. Zum Lesen von Dingen wie der LA Times, der NY Times, Il Corriere.it, ElPais.es, LeMonde.fr liefert es. Sogar Bing- und Google-Suchen kommen durch. Irgendwann oder wenn ich gefragt werde, werde ich es kostenlos zur Verfügung stellen. Es ist nicht viel, aber es ist ein Anfang.

user100043
quelle
-4

Sicher könnte es getan werden. Und es würde auch Sinn machen. Kein Browser unterstützt aus unklaren Gründen die vollständigen w3c-Standards. Seitens der CSS3-Unterstützung unterstützen die Browser-Unternehmen auch keine Standards. -moz- * und -webkit- * werden niemals Teil des Standards sein. Ein standardkonformer Browser sollte sie daher ignorieren. Einer der größten Fehler von w3c ist das völlige Fehlen von Rendering-Spezifikationen. Dieselbe standardkonforme Webseite würde in jedem Browser anders aussehen, ein Alptraum für grafisches Design. Ein weiterer W3C-Fehler ist die mangelnde Geschwindigkeit. 5 Jahre Diskussion und immer noch nur ein Standardentwurf für HTML5? Dann blockiert Ihre Organisation jede ernsthafte Innovation.

Ich denke, wir sollten w3c ignorieren, ihre Spezifikationen ignorieren und innerhalb eines halben Jahres einen Community-Standard für eine Markup-Sprache für Webanwendungen mit Blick auf Rendering-Spezifikationen und Sicherheit festlegen. Denken Sie daran, HTML wurde nie für Webanwendungen entwickelt, da zu dem Zeitpunkt, als sgml als Basis für HTML verwendet wurde, keine Webanwendungen vorhanden waren.

Vicky Ronnen
quelle
1
Wenn dies Sarkasmus ist, kommt es nicht klar genug rüber. Sie weisen auch nicht auf die unvermeidlichen Fallstricke mit dem hin, was Sie vorschlagen. Wenn dies kein Sarkasmus ist, möchte ich Sie nachdrücklich dazu ermutigen, zu untersuchen, wie Standards geschaffen werden.
Ja, es ist Sarkasmus, aber Englisch ist nicht meine Muttersprache und nein, es ist kein Sarkasmus, da Standards, die mehr als 5 Jahre benötigen, um nur einen Entwurf zu liefern, in der Praxis nie vollständig als Standard verwendbar sind.
Vicky Ronnen
gehört nicht hierher und geht auch nicht auf die Frage ein. nicht einmal sarkastisch.
scravy