当前位置:  开发笔记 > 编程语言 > 正文

JavaScript的替代品

如何解决《JavaScript的替代品》经验,为你挑选了7个好方法。

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

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

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



1> Keith..:

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

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

真正的问题是它是由浏览器编译的,这意味着它的工作方式取决于客户端.

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


编辑以下澄清问题

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

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

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

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

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

除了,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并没有"完成" - 它仍在不断发展,以便在新的浏览器中变得更好.在最新的版本是超前于浏览器的实现年,他们的下一个工作.


较新的浏览器在JavaScript上进行JIT编译.
我说这是"解释",而不是浏览器"编译".
我也搜索了jit声明,事实证明,Firefox 3.1将内置支持.请查看http://andreasgal.com/2008/08/22/tracing-the-web/或http:// people.mozilla.com/~schrep/tm-image-adjustment.swf
我非常不同意你的第一个回答"JavaScript的问题不是语言本身".我认为它在语法上是一种非常丑陋的语言,缺乏从大多数其他语言中获得的功能.至少我仍然需要在大型应用程序中使用的功能(加载依赖项,*可读*OO原则).如果我们现在必须这样做(互联网),我认为JavaScript不会成为语言的"最佳"选择.
V8 JavaScript引擎(chrome)直接编译.

2> joeytwiddle..:
编译为Javascript

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

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

这么多选择

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

在Coffeescript Wiki上编译为JS的语言列表

值得注意的

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

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

榆树: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的副产品,因其简洁而受欢迎,但对我来说看起来并不易读.对于球队来说可能不是最好的.

怎么选择?

选择其他语言时,需要考虑以下因素:

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

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

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

未来...

杰夫沃克撰写了一系列发人深省的关于"Javascript问题"的博客文章,其中包括为什么他认为TypeScript,Dart和Coffeescript都没有提供足够的解决方案.他在结论中提出了改进语言的一些理想特征.



3> Alex Nolasco..:

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

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

来自Google,请参阅dart语言

从Microsoft看到TypeScript语言

也可以看看

榆树

卡尔



4> aleemb..:

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

实际上没有其他选择可以全面运作.Flash浮现在脑海中,但这也是ECMA脚本,对于大多数事情来说它可能过度杀戮.



5> Marc Gravell..:

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



6> 小智..:

Doug Crockford 与Google进行了一次谈话,详细介绍了JavaScript及其未来的不良部分.它实际上自1999年以来没有太大的改变 - 这可以说是一件好事(几乎所有的浏览器都可以运行相同的代码,只要你知道它们的局限性)并且道格显示好的部分在哪里主要是误解,结果证明是非常强大的.

对于DOM操作,将JQuery看作是一个客户端库,用一些操作来替换大多数糟糕的DOM API,这些操作很容易写入更易于编写的优雅代码.



7> Dave W. Smit..:

如果你认为JavaScript有很深的问题,我推荐Doug Crockford的书,JavaScript:The Good Parts.(或Google为"Crockford JavaScript"找到他已经完成的几个视频演示.)Crockford草拟了一个安全的子集和一组实践,并特别列出了要避免的语言的某些部分.

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

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有