纯Java网络浏览器,实用吗?[关闭]


29

我知道可以使用Java Web浏览器,但是实用吗?我看过Lobo项目,必须承认我印象深刻,但是从我看来,该开发在2009年停止了。使用纯Java编码的浏览器(没有任何类型的WebKit Java绑定)能够与之抗衡吗?那些在Chrome或Firefox中名列前茅的产品,还是会固有地变慢,从而阻碍用户?


5
有趣的问题,因为称为HotJava的Web浏览器是早期的Java演示应用程序。
user16764

3
它不仅是一个演示应用程序,还是90年代末/ 2000年初商业Sun Java策略的关键部分,他们非常努力地将其推向合作伙伴。添加到同一时代的Sun的Java怪异列表中:JavaOS / JavaStation。
JustinC

3
从技术上来讲,难道不是用Java编写Android版本的Opera,Chrome和FF吗?还没有尝试过FF,但是考虑到设备不错,Chrome&Opera可以很好地工作。
TC1

2
@ TC1我认为它们是使用Android Native Development Kit用C \ C ++编写的。
韦斯利·怀瑟

由于不合逻辑的原因再次关闭。因此,您(SE)期望只有“专家”来回答?既然您已经关闭它,专家将如何回答?难道有人不应该回答社区论坛吗?难道不是网站要首先显示被投票赞成的答案?错误和否决的答案可以隐藏或存档。您不应该如此自以为是和权威。
killjoy17年

Answers:


44

编程语言很可能不会成为绊脚石。JVM的强制性内存管理在某些对性能至关重要的部分中可能是不利的(例如,内存饥饿;但是,Java的GC实际上在防止内存泄漏方面可能比您可以滚动使用的任何工具都要好),并且还有一些额外的安全问题,但除此之外,我看不到任何明显的表演障碍。

然而。

在Firefox或铬的规模网络浏览器是一个庞大的事业,这两个项目有他们背后的经历巨大的身躯- Mozilla的建立在几十年的浏览器大楼(和一些著名的失败),和铬/铬具有谷歌和苹果(WebKit开发的主要力量)的背后,并吸收了来自KDE和其他大型坚如磐石的开源项目的大量知识和经验。两者都利用数十个经过战斗验证的库,不仅提供渲染引擎,而且还提供各种各样的东西。矢量图形,字体渲染,解析,XML DOM树操作,网络,缓存,密码学,清单不胜枚举,而且您不想自己重新发明所有这些轮子,因为它们很难做到且容易出错。

总之,建立一个工业强度的Web浏览器真的是太辛苦了,这是只有在这个舞台上的成功案例屈指可数的原因。尽管C和C ++在技术上和社会上都处于优势地位,但编程语言与之无关。


11

从理论上讲,这无疑是可以做到的。但是,从实际的角度来看,这似乎有点问题。lobo甚至还没有接近第一次尝试。实际上,Java优越性的早期展示之一应该是HotJava浏览器-它将改变世界,并使“马赛克一代”浏览器过时

当然,我们都知道事实恰恰相反:HotJava已经死了,而且从来不是浏览器大战中的真正竞争对手(实际上,如果您搜索“ HotJava浏览器”,则一些热门文章是错误报告) (即使对于Sun自己的Web应用程序也是如此)。

就我个人而言,我想知道是否可行或可行(主要是)朝错误的方向看和思考。问题不是 Java是否会对这样的项目施加如此大的惩罚是不切实际的。问题是Java是否具有足够的优势来证明此类项目的合理性。

一个简单的事实是,webkit(使用您的示例)是一个很大的,复杂的代码段。即使我们假定Java如此出色,以至于我们可以用一半的大小和复杂度来做同样的事情,但是结果仍然是相当庞大,复杂的代码段(同样是V8等)。

我认为,在重复进行如此多的工作之前,大多数人希望获得的保证比:“我们认为我们的产品可能具有相当的竞争力”。

如果您从浏览器的一组用户可见功能开始,然后尝试确定生产具有这些功能的浏览器的最有效方法,则“ Java”可能不会成为该答案的一部分,除非是“ Javascript”。如果历史有不同制定出来的,有可能是没有理由也不可能(至少在理论上)是答案的一部分,但鉴于目前的情况,事实并非如此。

此外,我认为这种变化的可能性很小。如果甲骨文(或可能是IBM)认为保持Java的竞争立场(与一个明显的例子)相对于Microsoft .NET很有用,那我几乎看不到,但是,除非.NET开始威胁Java的核心市场,否则这似乎值得怀疑。

除此以外,几乎可以肯定,通过其他方式可以比通过完全用Java编写浏览器来实现您可以想象的任何功能集(除了“用纯Java编写”本身就是一项功能)。


1
通过该HotJava链接阅读时,我闻到了旧书的味道
MarioDS

2
我们还要记住,在HotJava时代,Java在可用库,开发人员经验和速度(有时会降低10-15倍)方面一直很薄弱。如今,在每个领域都截然相反。甚至还有的Java处理器现在(你可以说Java的处理器的Java浏览器瘦客户机?眨眼)我想的HotJava失败只是B / C Java平台是不够好,然后
Nick P

5

老实说,我相信一支专业的,知识渊博的团队可以用Java创建高性能的Web浏览器。真正的问题是,为什么?用特定语言编写的浏览器并不是真正的功能。人们会因为速度快而使用Chrome,或者因为它具有可扩展性而使用Firefox,但他们不会仅仅因为JBrowser恰好是用Java编写而使用JBrowser。因此,真正的问题变成了,您要解决什么问题?

假设您有写JBrowser的理由,下一个问题是:“使用Java是否会使任务更容易或更难?” Google在制作Chrome时主要使用C / C ++编写它,尽管它们是一家非常专业的Java商店。他们似乎很有可能认为Java的好处不会按时带来净收益。


2

随着Nashorn(JVM上的Javascript代替Rhino)作为Java 8的一部分进入JVM,这是可以实现的。但是,正如其他人所指出的那样,现代Web浏览器有很多功能,如果您需要在Java应用程序中托管浏览功能,则嵌入WebKit似乎更容易:-)。


1

当前的最佳答案是极好的。不过,我要补充一点,不需要完全将某些内容重新编码为Java。有一些工具可以将本机源代码转换为具有不同程度的互操作性的Java字节码。他们经常创建各种解释器,或者使用类似于JVM的表示形式(例如MIPS)作为垫脚石。通过将关键的本机库转换为Java字节码,将它们与纯Java浏览器源集成,然后逐步将更多的库代码实现为纯Java源,可以将Java浏览器的开发分为许多步骤。

这使您可以将所有内容包含在更安全的JVM中。但是,这将在确保效率的过程中带来痛苦。在逐步重构大型,敏捷/ OOP之前的遗留应用程序方面有一些先例。另外,某些组件已经具有良好的Java实现,并且也可以用于减少劳动力。


0

我必须说,我在这里有些偏颇,但是我在这里。我不喜欢C / C ++传教士,我知道那里有一些令人难以置信的优秀工程应用程序,但它只是一个工具,常常给我留下深刻的印象,很多人只提到C / C ++作为解决方案,却错过了A点( http://www.paulgraham.com/avg.html参见灯泡悖论)。我尝试看一下事实:Java速度与C / C ++一样快,但是需要更多的内存。或者让我改一下,您可以编写与C / C ++一样快的Java代码,但是该程序将占用更多内存。我希望我们可以就此达成共识。

如果您关注生产力,那么与C ++解决方案相比,可以相对轻松地为某些问题(例如企业级Java)创建Java解决方案。Web浏览器是完全不同的东西。我看到两个/三个市长的要求:

  • 它必须符合庞大的规范,HTML,JavaScript等。这涉及到2D绘图API之类的问题。或者如何从OS系统调用(作为图形基元)转换为文本或字体表示(“渲染”)。看看图书馆像开罗(C)以及其他类似的尝试杰济拉(www.youtube.com/watch?v=P97O8osukZ0,https://github.com/damelang/gezira
  • 它必须“感觉”到流利,这意味着某些操作只需要执行ms。
  • 它必须形成一个UI概念,形成独特的体验,才能在当今充满挑战的“浏览器战争”中竞争。

综上所述:是的,您可以用几乎任何编程语言创建浏览器,其结果与当今的C ++蒸汽船相比几乎相同。但是要这样做,您将需要付出非常大的努力。我不知道有多少(以百万计),我什至不想猜测。也许我们可以得到这个底线:人们不喜欢在高级语言中进行优化,或者它可能更便宜,因为它吸引了很多喜欢在C / C ++中进行优化的人们,因为与其他可以在其中进行优化的语言专家相比相似的水平)。


2
我很想投反对票,因为您没有将答案分成多个段落。请用一些空白将文本墙打碎。
吉尔伯特·勒布朗克

2
好吧,我是用手机写的,这是我能用手机界面做的最好的事,对不起
AndreasScheinert 2012年

1
去一台笔记本电脑并修复它。
AndreasScheinert

2
“或者让我改写一下,您可以编写与C / C ++一样快的Java代码,但是该程序将消耗更多的内存。我希望我们能够达成共识。” 不,我们不能,至少在所有情况下都不能。Java不允许您为不同的内存分配模式实现多个自定义内存管理器。当您确定不必要时,您不能关闭数组边界检查,您只希望希望JIT在不需要时能够识别它。这些问题在大多数程序中都不会出现,但是在需要性能达到每纳秒的应用程序中,这些问题可能至关重要。
查尔斯·格兰特

1
您在这里重复的论点是垃圾回收会影响性能。我同意这一点。但这只是一方面。
AndreasScheinert

0

这与Windows 9x运行软件OpenGL与硬件加速OpenGL的概念相当。将Java用于诸如Web浏览器之类的问题在于,您可能会使用许多额外的时钟周期来完成某些事情,而这些事情可能以更少的本机语言实现。这也是OpenGL的概念-您可以完成任务,但是需要更多的处理工作。

那么,有可能吗?潜在地。有竞争力吗?不太可能-高度优化的,依赖于平台的代码中的某些内容可能会具有明显的速度优势。

不过,这仅仅是猜测。


-1

关于用Java编写的Java Web浏览器的可行性,也许有人提出了错误的问题。

我认为当大多数现有浏览器都是免费的并且功能丰富时,无需重新发明轮子并编写功能完善的浏览器。

就是说,我(我们?)应该寻找的是“某种东西”,足以阅读网页,而无需堆积所有的垃圾(广告,视频,GIF)。

Google是所有此类广告的主要违法者。

为了解决这个问题,我编写了一个Java浏览器,该浏览器使用Java HTMLEditorKit及其HTML 3.2实现,并以文本形式读取网页,剥离了所有javascript代码,样式代码,链接,元数据(使用其自动生成的另一种刺激源重新加载),并尝试修复一些通过javascript设置的特殊字符和图像链接。超链接和导航工作。对于阅读诸如《洛杉矶时报》,《纽约时报》,Il Corriere.it,ElPais.es和LeMonde.fr之类的内容,它可以提供。甚至Bing和Google搜索都可以实现。最终或在被询问时,我将免费提供它。虽然不多,但这只是一个开始。


-4

当然可以。这也很有意义。出于不清楚的原因,没有浏览器支持完整的w3c标准。在css3支持方面,浏览器公司也不支持标准。-moz- *和-webkit- *永远不会成为标准的一部分。因此,完全符合标准的浏览器应该忽略它们。w3c的最大错误之一是完全缺乏渲染规范。因此,相同的符合标准的网页在每种浏览器中看起来都不同,这是图形设计的噩梦。w3c的另一个失败是缺乏速度。5年的讨论,仍然只是html5的标准草案?这样,您的组织就会阻止任何严肃的创新。

我认为我们应该忽略w3c,忽略其规范,并在半年之内为Web应用程序标记语言制定社区标准,同时牢记呈现规范和安全性。请记住,HTML从来都不是为Web应用程序设计的,因为在将sgml用作HTML的基础时还没有Web应用程序。


1
如果这很讽刺,那么它的含义还不够清楚。您也没有指出您所建议的不可避免的陷阱。如果这不是讽刺,那么我强烈建议您研究如何创建标准。

是的,这很讽刺,但英语不是我的母语,也不是,因为它需要5年以上的时间才能完成仅草稿的标准,因此在实践中永远无法完全使用。
Vicky Ronnen 2013年

不属于这里,也没有解决这个问题。甚至没有讽刺。
scravy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.