我知道可以使用Java Web浏览器,但是实用吗?我看过Lobo项目,必须承认我印象深刻,但是从我看来,该开发在2009年停止了。使用纯Java编码的浏览器(没有任何类型的WebKit Java绑定)能够与之抗衡吗?那些在Chrome或Firefox中名列前茅的产品,还是会固有地变慢,从而阻碍用户?
我知道可以使用Java Web浏览器,但是实用吗?我看过Lobo项目,必须承认我印象深刻,但是从我看来,该开发在2009年停止了。使用纯Java编码的浏览器(没有任何类型的WebKit Java绑定)能够与之抗衡吗?那些在Chrome或Firefox中名列前茅的产品,还是会固有地变慢,从而阻碍用户?
Answers:
编程语言很可能不会成为绊脚石。JVM的强制性内存管理在某些对性能至关重要的部分中可能是不利的(例如,内存饥饿;但是,Java的GC实际上在防止内存泄漏方面可能比您可以滚动使用的任何工具都要好),并且还有一些额外的安全问题,但除此之外,我看不到任何明显的表演障碍。
然而。
在Firefox或铬的规模网络浏览器是一个庞大的事业,这两个项目有他们背后的经历巨大的身躯- Mozilla的建立在几十年的浏览器大楼(和一些著名的失败),和铬/铬具有谷歌和苹果(WebKit开发的主要力量)的背后,并吸收了来自KDE和其他大型坚如磐石的开源项目的大量知识和经验。两者都利用数十个经过战斗验证的库,不仅提供渲染引擎,而且还提供各种各样的东西。矢量图形,字体渲染,解析,XML DOM树操作,网络,缓存,密码学,清单不胜枚举,而且您不想自己重新发明所有这些轮子,因为它们很难做到且容易出错。
总之,建立一个工业强度的Web浏览器真的是太辛苦了,这是只有在这个舞台上的成功案例屈指可数的原因。尽管C和C ++在技术上和社会上都处于优势地位,但编程语言与之无关。
从理论上讲,这无疑是可以做到的。但是,从实际的角度来看,这似乎有点问题。lobo
甚至还没有接近第一次尝试。实际上,Java优越性的早期展示之一应该是HotJava浏览器-它将改变世界,并使“马赛克一代”浏览器过时。
当然,我们都知道事实恰恰相反:HotJava已经死了,而且从来不是浏览器大战中的真正竞争对手(实际上,如果您搜索“ HotJava浏览器”,则一些热门文章是错误报告) (即使对于Sun自己的Web应用程序也是如此)。
就我个人而言,我想知道是否可行或可行(主要是)朝错误的方向看和思考。问题不是 Java是否会对这样的项目施加如此大的惩罚是不切实际的。问题是Java是否具有足够的优势来证明此类项目的合理性。
一个简单的事实是,webkit(使用您的示例)是一个很大的,复杂的代码段。即使我们假定Java如此出色,以至于我们可以用一半的大小和复杂度来做同样的事情,但是结果仍然是相当庞大,复杂的代码段(同样是V8等)。
我认为,在重复进行如此多的工作之前,大多数人希望获得的保证比:“我们认为我们的产品可能具有相当的竞争力”。
如果您从浏览器的一组用户可见功能开始,然后尝试确定生产具有这些功能的浏览器的最有效方法,则“ Java”可能不会成为该答案的一部分,除非是“ Javascript”。如果历史有不同制定出来的,有可能是没有理由也不可能(至少在理论上)是答案的一部分,但鉴于目前的情况,事实并非如此。
此外,我认为这种变化的可能性很小。如果甲骨文(或可能是IBM)认为保持Java的竞争立场(与一个明显的例子)相对于Microsoft .NET很有用,那我几乎看不到,但是,除非.NET开始威胁Java的核心市场,否则这似乎值得怀疑。
除此以外,几乎可以肯定,通过其他方式可以比通过完全用Java编写浏览器来实现您可以想象的任何功能集(除了“用纯Java编写”本身就是一项功能)。
老实说,我相信一支专业的,知识渊博的团队可以用Java创建高性能的Web浏览器。真正的问题是,为什么?用特定语言编写的浏览器并不是真正的功能。人们会因为速度快而使用Chrome,或者因为它具有可扩展性而使用Firefox,但他们不会仅仅因为JBrowser恰好是用Java编写而使用JBrowser。因此,真正的问题变成了,您要解决什么问题?
假设您有写JBrowser的理由,下一个问题是:“使用Java是否会使任务更容易或更难?” Google在制作Chrome时主要使用C / C ++编写它,尽管它们是一家非常专业的Java商店。他们似乎很有可能认为Java的好处不会按时带来净收益。
随着Nashorn(JVM上的Javascript代替Rhino)作为Java 8的一部分进入JVM,这是可以实现的。但是,正如其他人所指出的那样,现代Web浏览器有很多功能,如果您需要在Java应用程序中托管浏览功能,则嵌入WebKit似乎更容易:-)。
当前的最佳答案是极好的。不过,我要补充一点,不需要完全将某些内容重新编码为Java。有一些工具可以将本机源代码转换为具有不同程度的互操作性的Java字节码。他们经常创建各种解释器,或者使用类似于JVM的表示形式(例如MIPS)作为垫脚石。通过将关键的本机库转换为Java字节码,将它们与纯Java浏览器源集成,然后逐步将更多的库代码实现为纯Java源,可以将Java浏览器的开发分为许多步骤。
这使您可以将所有内容包含在更安全的JVM中。但是,这将在确保效率的过程中带来痛苦。在逐步重构大型,敏捷/ OOP之前的遗留应用程序方面有一些先例。另外,某些组件已经具有良好的Java实现,并且也可以用于减少劳动力。
我必须说,我在这里有些偏颇,但是我在这里。我不喜欢C / C ++传教士,我知道那里有一些令人难以置信的优秀工程应用程序,但它只是一个工具,常常给我留下深刻的印象,很多人只提到C / C ++作为解决方案,却错过了A点( http://www.paulgraham.com/avg.html参见灯泡悖论)。我尝试看一下事实:Java速度与C / C ++一样快,但是需要更多的内存。或者让我改一下,您可以编写与C / C ++一样快的Java代码,但是该程序将占用更多内存。我希望我们可以就此达成共识。
如果您关注生产力,那么与C ++解决方案相比,可以相对轻松地为某些问题(例如企业级Java)创建Java解决方案。Web浏览器是完全不同的东西。我看到两个/三个市长的要求:
综上所述:是的,您可以用几乎任何编程语言创建浏览器,其结果与当今的C ++蒸汽船相比几乎相同。但是要这样做,您将需要付出非常大的努力。我不知道有多少(以百万计),我什至不想猜测。也许我们可以得到这个底线:人们不喜欢在高级语言中进行优化,或者它可能更便宜,因为它吸引了很多喜欢在C / C ++中进行优化的人们,因为与其他可以在其中进行优化的语言专家相比相似的水平)。
关于用Java编写的Java Web浏览器的可行性,也许有人提出了错误的问题。
我认为当大多数现有浏览器都是免费的并且功能丰富时,无需重新发明轮子并编写功能完善的浏览器。
就是说,我(我们?)应该寻找的是“某种东西”,足以阅读网页,而无需堆积所有的垃圾(广告,视频,GIF)。
Google是所有此类广告的主要违法者。
为了解决这个问题,我编写了一个Java浏览器,该浏览器使用Java HTMLEditorKit及其HTML 3.2实现,并以文本形式读取网页,剥离了所有javascript代码,样式代码,链接,元数据(使用其自动生成的另一种刺激源重新加载),并尝试修复一些通过javascript设置的特殊字符和图像链接。超链接和导航工作。对于阅读诸如《洛杉矶时报》,《纽约时报》,Il Corriere.it,ElPais.es和LeMonde.fr之类的内容,它可以提供。甚至Bing和Google搜索都可以实现。最终或在被询问时,我将免费提供它。虽然不多,但这只是一个开始。
当然可以。这也很有意义。出于不清楚的原因,没有浏览器支持完整的w3c标准。在css3支持方面,浏览器公司也不支持标准。-moz- *和-webkit- *永远不会成为标准的一部分。因此,完全符合标准的浏览器应该忽略它们。w3c的最大错误之一是完全缺乏渲染规范。因此,相同的符合标准的网页在每种浏览器中看起来都不同,这是图形设计的噩梦。w3c的另一个失败是缺乏速度。5年的讨论,仍然只是html5的标准草案?这样,您的组织就会阻止任何严肃的创新。
我认为我们应该忽略w3c,忽略其规范,并在半年之内为Web应用程序标记语言制定社区标准,同时牢记呈现规范和安全性。请记住,HTML从来都不是为Web应用程序设计的,因为在将sgml用作HTML的基础时还没有Web应用程序。