JavaScript的替代品

时间:2009-05-30 22:06:10

标签: javascript browser

目前,唯一完全支持的语言,以及浏览器中DOM树操作的事实标准是JavaScript。看起来它有深层的设计问题,使它成为新手的漏洞和安全漏洞的雷区。

您是否知道在下一代浏览器中为DOM树操作和HTTP请求引入任何类型(不仅是javascript)的更好(重新设计)语言的任何现有或计划的主动性?如果是,那么将它集成到Firefox中的路线图是什么?如果不是,那么由于什么原因(互操作性除外)应该是JavaScript浏览器平台上唯一支持的语言?

我已经使用过jQuery,而且我还阅读了“javascript:好的部分”。确实这些建议很好,但我无法理解的是:为什么只有javascript?在服务器端(你最喜欢的os平台),我们可以使用每种语言操作DOM树,甚至是fortran。为什么客户端(浏览器平台)仅支持javascript?

18 个答案:

答案 0 :(得分:37)

javascript的问题不是语言本身 - 它是一个非常好的原型和动态语言。如果你来自OO背景,那里有一点学习曲线,但这不是语言的错误。

大多数人都认为Javascript就像Java,因为它有类似的语法和类似的名称,但实际上它更像是lisp。它实际上非常适合DOM操作。

真正的问题是它是由浏览器编译的,这意味着它可以根据客户端以不同的方式工作。

实际DOM不仅取决于浏览器,而且性能和布局也存在巨大差异。


编辑以下澄清问题

假设支持多种解释语言 - 您仍然遇到同样的问题。各种浏览器仍然是错误的并且具有不同的DOM。

此外,您必须在浏览器中内置解释器,或以某种方式安装为插件(您可以在提供页面之前检查)以获得每种语言。需要很长时间才能使Javascript保持一致。

您不能以相同的方式使用编译语言 - 然后您将引入一个无法轻易审查它的功能的可执行文件。许多用户会选择不让它运行。

好的,那么编译代码的某种沙盒呢?对我来说听起来像Java Applets。或Flash中的ActionScript。或者Silverlight中的C#。

某种IL标准怎么样?这有更大的潜力。用您想要的任何语言进行开发,然后将其编译为IL,浏览器然后JITs。

除了,Javascript已经是那种IL了 - 只看GWT。它允许您使用Java编写程序,但将它们分发为HTML和JS。


编辑后进一步澄清问题

Javascript不是,或者说不是,是浏览器支持的唯一语言:回到Internet Explorer黑暗时代,您可以选择Javascript或VBScript在IE中运行。技术上IE甚至没有运行Javascript - 它运行JScript(主要是为了避免向Sun支付 java 这个词,Oracle仍然拥有名称​​ Javascript ) 。

问题在于VBScript是微软专有的,但它也不是很好。虽然Javascript在其他浏览器中添加功能并获得最高速率的调试工具(如FireBug),但VBScript仍然只支持IE,而且几乎无法调试(IE4 / 5/6中的dev工具不存在)。与此同时,VBScript也扩展为在操作系统中成为一个非常强大的脚本工具,但浏览器中没有这些功能(当它们成为大规模的安全漏洞时)。

还有一些企业内部应用程序使用VBScript(有些依赖于那些安全漏洞),而且它们仍在运行IE7(它们只停止了IE6,因为MS最终将其杀掉)。

让Javascript进入它的当前状态是一场噩梦,已经用了20年。它仍然没有一致的支持,某些浏览器仍然缺少语言功能(在1999年指定),并且需要大量的垫片。

在浏览器中添加替代语言进行解释会遇到两个主要问题:

  • 让所有浏览器供应商实施新的语言标准 - 他们在20年内仍然没有为Javascript管理这些标准。

  • 第二种语言可能会稀释您已经拥有的支持,允许(例如)IE获得二级Javascript支持但是VBScript(再次)。我真的不想为不同的浏览器用不同的语言编写代码。

应该注意的是,Javascript并没有“完成” - 它仍在不断发展,以便在新浏览器中变得更好。 latest version比浏览器的实现要早几年,他们正在开发下一个。

答案 1 :(得分:25)

编译为Javascript

目前,使用编译为Javascript的语言似乎是在编写更智能的代码时到达所有平台的唯一现实方法,这很可能会持续很长时间。对于任何新产品,总有一些原因会导致一个或多个供应商不急于发货。

(但我真的不认为这是一个问题.Javascript现在已经很好地优化了。如果手工编写,机器代码也不安全,但作为编译目标和执行语言可以正常工作。)

这么多选项

有越来越多的语言库可以编译为Javascript。可以在这里找到一个相当全面的列表:

值得注意的

我会提到一些我认为值得注意的事情(毫无疑问会忽略一些我不知道的宝石):

  • Spider出现在2016年。它声称采用了Go,Swift,Python,C#和CoffeeScript的最佳创意。它不是类型安全的,但确实有一些小的safety features

  • Elm:Haskell可能是其中所有的最聪明的语言,而Elm是Haskell for Javascript的变体。它具有高度的类型感和简洁性,并提供功能反应编程作为反应模板或MVC意大利面的简洁替代品。但对于程序员来说,这可能是一个非常强烈的冲击。

  • Google的Go旨在简洁,简洁,安全。 Go代码可以通过GopherJS编译成Javascript。

  • Dart是谷歌后来试图取代Javascript的。它通过类似C / Java的语法提供接口和抽象类,并可选择输入。

  • Haxe与Flash的ActionScript类似,但它可以定位多种语言,因此您的代码可以在Java,C,Flash,PHP和Javascript程序中重复使用。它提供了类型安全和动态的对象。

  • Opalang为Javascript添加了语法糖,以提供直接数据库访问,智能延续,类型检查以及协助客户端/服务器分离。 (与NodeJS和MongoDB联系。)

  • GorillaScript“一种编译到JavaScript的语言,旨在帮助用户在尝试防止一些常见错误时使用。”类似于Coffeescript但更全面,提供一系列额外的功能,以提高安全性并减少重复的样板模式。

  • LiteScript介于Coffeescript和GorillaScript之间。它为“内联”回调提供了异步/良率语法,并检查了变量拼写错误。

  • Microsoft的TypeScript是Javascript的一个小超集,允许您对函数参数设置类型限制,这可能会捕获一些错误。类似地,BetterJS允许您应用限制,但在纯Javascript中,可以通过添加额外调用或通过在JSDoc注释中指定类型来实现。现在Facebook已经提供了Flow,它还进行了类型推断。

  • LiveScript是Coffeescript的副产品,因其简洁而受欢迎,但对我来说看起来并不可读。可能不是团队中最好的。

如何选择?

选择替代语言时,需要考虑一些因素

  • 如果其他开发者将来加入您的项目,他们需要多长时间才能加快学习这门语言的速度,或者他们已经知道的机会有多大?

  • 语言功能太少(代码仍然充满样板)或功能太多(需要很长时间才能掌握,在此之前一些有效的代码可能无法解读)?

  • 它是否具有项目所需的功能? (你的项目是否需要类型检查和接口?是否需要智能延续以避免嵌套回调地狱?是否有很多反应?未来可能需要针对其他环境吗?)

未来......

杰夫沃克撰写了a thought-provoking series篇关于“Javascript问题”的博客文章,其中包括他认为TypeScriptDartCoffeescript都没有提供足够解决方案的原因。他为the conclusion中的改进语言提出了一些可取的功能。

答案 2 :(得分:21)

  

应该是JavaScript浏览器平台上唯一支持的语言吗?

是和否。有一个替代品叫做Dart by Google,它可以编译成JavaScript,就像jQuery一样,它试图让DOM操作更容易一些。实验可能很有趣,请查看。

另见

答案 3 :(得分:14)

Javascript确实在某种程度上难以应对,但Web开发社区已经走了很长一段路。相反,我建议你看看jQuery。它很容易并且抽象出所有各种问题。

并且确实没有其他方案可以全面运作。 Flash浮现在脑海中,但这也是ECMA脚本,对于大多数事情而言它可能过度杀戮。

答案 4 :(得分:6)

短期内,我会使用像jQuery这样的东西来隐藏浏览器的不兼容性。从长远来看,像Silverlight或Adobe AIR这样的技术可能会使它成为一个非常不同的雷区(但仍然是一个雷区)。

答案 5 :(得分:6)

Doug Crockford gave a talk to Google详细介绍了JavaScript及其未来的重要部分。它实际上自1999年以来没有太大的改变 - 这可以说是一件好事(几乎所有的浏览器都可以运行相同的代码,只要你知道它们的局限性)并且道格显示好的部分在哪里大多数误解都是非常强大的。

对于DOM操作,请将JQuery看作是一个客户端库,它将大部分糟糕的DOM API替换为操作,这些操作很难写入更易于编写的优雅代码。

答案 6 :(得分:5)

如果您认为JavaScript存在严重问题,我建议使用Doug Crockford的书JavaScript: The Good Parts。 (或Google为“Crockford JavaScript”找到他所做的几个视频演示。)Crockford草拟了一个安全的子集和一组实践,并特别列出了要避免的语言的某些部分。

我不知道计划将JavaScript替换为事实上的操纵DOM的方法。所以最好学会安全地使用它。

答案 7 :(得分:4)

就客户端而言,Javascript是操纵DOM的唯一方法。就服务器端而言,有多种方式。

答案 8 :(得分:4)

Internet Explorer支持可插入的脚本语言,尽管除了JScript之外,IE中唯一可靠的脚本语言是VBScript。

据我所知,浏览器中似乎存在对动态语言的一般偏见,而JavaScript似乎充分满足了这种需求,网络效应使得任何其他语言都不具备启动性。这种语言实际上非常强大,尽管它在浏览器中的实现还有很多不足之处。

答案 9 :(得分:4)

如果您愿意将您的客户/访问者限制在特定浏览器中,并且可能愿意要求他们安装插件,您可以查看MS Silverlight - 可读的概述在{{3 }}。使用Silverlight 2,您可以运行客户端,使用C#,IronPython,IronRuby,VB.NET等编写的代码;来自Mono项目的Silverlight的免费wikipedia克隆承诺为Linux提供相同的功能。

在实践中,大多数网络应用和网站的开发者更愿意接触比Silverlight(最终是Moonlight)目前可以提供的更广泛的受众 - 这意味着坚持使用Javascript,或者可能使用Flash(使用类似的编程语言,Actionscript)。

因此,即使对于拥有大量工程师和营销预算的自由软件项目的微软来说,获得大量的思想共享,采用和牵引其他任何事情都被证明是一场艰苦的斗争(可能会减轻对专有锁定的担忧) - 这可能有助于解释为什么没有什么兴趣,例如在Mozilla基金会方面,推动实现这一目标。 “除了互操作性”之外,你说:但很明显,互操作性问题在这里很重要,因为我们观察到了Silverlight的进展......

答案 10 :(得分:3)

我还没有看到过的一件事(哦,我看到Alcides在我写作时提到了HotRuby而Nosredna提到了GWT和Script#)并且想要抛弃那里有一些[insert language]的实现-on-JavaScript(例如允许您转换RubyPythonC#JavaObj-J/Cappuccino的翻译器[类似于Obj-C / Cocoa ]或Processing [for Canvas]在客户端或部署之前使用JavaScript [其中一些还具有各种抽象库])。当然,如果在客户端上进行翻译,则会产生性能开销,但如果您对其他语言感觉更舒服,则可以提供一些灵活性。

但就个人而言,我建议学会喜欢JavaScript。它是一种优秀,强大的语言,一旦你了解它就会非常优雅。我正面临着相反的困境,正在努力寻找能够满足我所有需求的服务器端JavaScript / DOM解决方案。 /未经请求的意见

答案 11 :(得分:3)

正如已经说过的,你有Flash(ActionScript,它是Javascript的派生语言)和Silverlight / Moonlight(IronPython,IronRuby,JScript,VBScript,C#),可以通过插件在浏览器中运行(第一个很多更无处不在)。

如果您喜欢Ruby,还有另一种选择:HotRuby,它是javascript中的一个ruby实现,将在浏览器中运行。它还不是很成熟,但你可以看看它。

答案 12 :(得分:2)

JavaScript是网络的英语语言。英国历史悠久,因为它拥有强大的海军征服各个国家。这与用JavaScript征服网络的大公司相当。它是一种语言,从多个欧洲来源(希腊语,拉丁语,日耳曼语,法语甚至一些中文和印度语)汇总起来。 JavaScript多年来从其他语言(结构,OO,功能)中借用了许多概念。在不同的地方讲英语,方言和口音略有不同,这可能使理解变得困难。就像JavaScript有不同的浏览器解释它有点不同。

尽管英语最初很容易学习,但它的发音非常不一致,而且除了规则之外还有更多例外。就像JavaScript一样,它始终存在惊喜。

尽管口音不同,JavaScript仍然是网络的通用语言。就像你可能不是英文并用英文写的一样,每个网页浏览器都有一定程度的英语理解。 IE6就像那个在简历上说他流利的人一样,但只用了两周的英语作为外语课程。

有人试图取代英语作为世界主要语言,例如:世界语。但他们都失败了,因为地球上的大多数人都说英语。同样,很难为JavaScript引入更好的替代方案。

答案 13 :(得分:2)

Jquery(仍然是javascript但是)它会真正帮助你,他们几乎支持所有的浏览器,并不是很难学习:)

答案 14 :(得分:2)

没有。 JavaScript是它,但它会发展。下一个版本是“JavaScript Harmony”,如果你谷歌那么你可以了解更多。

有人建议将一个字节码解释器与JavaScript一起放入浏览器中。可能不会发生,至少有一段时间。

我碰巧喜欢JavaScript。但是还有其他解决方案,包括GWT,它将Java编译为JavaScript和Script#,它将C#编译为JavaScript。

答案 15 :(得分:1)

很多人都明白Javascript并不是最好,最漂亮的语言。但是,目前浏览器支持它,因此引入不同的语言将非常困难。我们根本不需要另外的浏览器战争。

这就解释了为什么我不知道切换到不同的客户端语言的原因。

但是我认为如果你开始考虑DOM模型以及如何使用它,Javascript就不那么糟糕了。许多混乱的东西都是DOM模型工作的结果。

答案 16 :(得分:1)

也许haxe(请参阅haxe.org)可以帮到你。它是一种看似比JavaScript更清晰的语言,可以编译成JavaScript,因此可以在浏览器中运行。

我知道这不是你问题的直接答案,但我认为这对你来说可能很有意思。

答案 17 :(得分:1)

我认为Javascript不会很快被替换。对于富客户端的完全不同的方法,您可能希望研究Flex,这是一种基于Flash的技术。