据我所知,JavaScript是从服务器检索HTML文件后将在客户端执行的唯一语言.据我所知,JavaScript绝不是以任何方式编译的,因此它是一种解释性语言.

随着Web变得越来越流行,有些人说移动和桌面应用程序很快就会不复存在.

我们看到像WebGL这样的新技术,它们使用了JS.

当我为WebGL开发时,我必须进行更多优化以获得合理的性能基准,然后我需要为PC或控制台做些什么.

那么为什么我们仍然使用解释的客户端语言呢?这是一个安全问题,硬件(跨平台)问题还是因为很难在Web架构中引入如此大的变化?我知道Web开发人员对即使是最小和最简单的更改也很头疼,比如使用CSS 3,因为不是每个人都有他们的浏览器是最新的.

我是否认为混合语言比编译语言慢?我有意义还是我的假设完全错误?我绝不是JS /网络专家,请教育我.

解决方法

To my kNowledge JavaScript is the only language that will execute on the client side after the HTML file has been retrieved from the server.

这是错的.至少在HTML 4.01中,< script> element有一个type属性,允许您指定所需的任何语言. HTML 4.01规范本身在VBScript和Tcl中有示例.

例如,旧版本的Internet Explorer支持VBScript作为ECMAScript的替代脚本语言.有些版本的Chrome支持Dart作为替代脚本语言.有一个项目在Firefox中添加了对PHP,Perl,Python,Ruby,Tcl等的支持.

您还可以使用具有输出ECMAScript的编译器的任何语言,并且现在几乎所有语言都具有该语言,例如,有些编译器可以编译C,C,Java,Scala,C♯,F♯和许多其他的ECMAScript编译器.还有一些语言被明确设计为ECMAScript的超集(例如TypeScript),语义上接近ECMAScript(例如CoffeeScript),或者易于编译为ECMAScript(例如Dart).

As far as I kNow JavaScript is by no means compiled in anyway and thus it is an interpreted language.

这是错的.所有当前存在的浏览器内ECMAScript执行引擎至少有一个编译器.许多人有几个编译器.至少有一个人没有翻译:

> V8是纯编译的,从来没有任何解释,它总是将ECMAScript源代码编译为二进制本机代码.原始版本有一个编译器,当前版本有两个.
> SpiderMonkey总是将ECMAScript编译为SpiderMonkey字节码.然后,首先将此字节码解释几次以收集统计信息,然后通过几个编译器之一将“热”部分编译为二进制本机代码.
> Nitro总是将ECMAScript编译为Nitro字节码.然后,然后由另一个编译器将“热”部分编译为二进制本机代码.
> Chakra总是将ECMAScript编译为Chakra字节码.然后,然后由另一个编译器将“热”部分编译为二进制本机代码.

事实上,术语“解释语言”和“编译语言”甚至都没有意义.不解释或编译语言.语言就是这样.编译和解释不是语言的特征,它们是编译器或解释器的特征(呃!)语言是一组数学规则和限制.而已. “语言”的概念和“解释”的概念生活在两个完全不同的抽象层次上.如果英语是键入语言,则术语“解释语言”将是类型错误.

每种语言都可以由解释器实现,每种语言都可以由编译器实现.有C和C的解释器,有ECMAScript,PHP,Python和Ruby的编译器.

Am I correct in thinking that interperated languages are slower then compiled ones?

不,首先,就像我上面解释的那样,根本就没有解释或编译语言.只有语言的解释或编译实现.其次,说一种语言比另一种语言慢,没有意义.你可以说的是,某个特定程序在特定机器上的特定环境中由特定版本的特定实现执行时运行得比不同环境中不同实现的不同版本执行的不同程序运行得更快机.

一般而言,典型程序在特定实现中的表现主要取决于花费多少钱,资源,努力,智力,研究,工程和人力,而不是语言的任何特定特征. Oracle HotSpot JVM很快就不是因为它是一个已编译的实现,而不是因为Java是静态类型的(事实上,这完全不相关,因为HotSpot JVM执行JVM字节码,它甚至不知道任何关于Java的东西!),但是因为Oracle而太阳已经投入了大量的资源.具有讽刺意味的是,在Sun收购Smalltalk(!!!)公司及其VM技术之前,Java实际上相当缓慢.是的,这是正确的:HotSpot JVM实际上只是一个稍微修改过的Smalltalk VM,即用于动态语言的VM.

事实上,VM HotSpot是基于开源的,也是VM V8的基础(这也就不足为奇了,因为V8是由开发HotSpot JVM和基于它的Smalltalk VM的一些人开发的.在).

请注意,有两次尝试获取浏览器供应商接受的新语言:

asm.js是一种语言,是ECMAScript的语法和语义子集(意思是任何asm.js程序也是一个语义相同的ECMAScript程序,而且对asm.js一无所知的浏览器只会认为它是ECMAScript和执行它作为ECMAScript并且它将工作)具有某些限制,使其成为编译器的良好目标(例如,创建将C编译为asm.js的编译器相对容易)并且同时是本机代码的良好源代码生成(即它的语义与现代主流通用cpu的语义相对接近).

同样,WebAssembly是一种(二进制)语言,与asm.js具有基本相同的目标,除了不要求它是ECMAScript的适当子集.它是自己独立的语言,受asm.js,LLVM bitcode,ANDF,CIL,JVM字节码,Pascal P-Code等的启发.

Asm.js已经拥有一些浏览器支持,并且由于它只是ECMAScript的一个子集甚至可以在没有支持的浏览器中工作……只是速度较慢. WebAssembly正在获得牵引力,尽管它仍处于实验和原型设计阶段.

javascript – 为什么客户端网络仍然使用解释语言?的更多相关文章

  1. ios – 伞框架

    错误.应用程序,通常位于…错误仍然存在你也可以在这里添加(子)框架的路径.

  2. 如何在xcode 6中构建32位和64位的单二进制文件

    我已经遵循this堆栈溢出解决方案,但即使我得到低于警告.我已经选择虽然我得到了警告.请帮帮我.谢谢.解决方法有同样的问题.看起来将’arm64’添加到ValidArchitectures解决了它.

  3. ios – Swift编译器是否忽略未使用的函数?

    Swift编译器是编译未使用的函数还是忽略它们?

  4. ios – 将二进制文件上传到Apple的iTunesConnect时会发生什么?

    我问,因为:它可能指向我们可以做的事情来加快这个过程.大约一年前,这个过程从“缓慢,因为苹果的服务器功率不足”变得“非常缓慢,因为苹果公司使用的带宽是发送二进制文件所需带宽的3倍”.例如我最近提交了一个90Mb应用程序,Xcode4将超过350Mb的数据上传到Apple.例如刚才我提交了一个8Mb的二进制文件,Xcode4将超过40Mb的数据上传到Apple.最近上传者有了很大的改进.但我想知道:苹果在上传期间实际上做了什么?

  5. ios – Xamarin Ahead-of-Time(AOT)编译器与普通编译器

    我的理解是Xamarin的Ahead-of-Time编译器直接将Xamarin.iOS应用程序编译为本机ARM汇编代码.然而,我没有得到的是为什么它需要被称为“Ahead-of-Time”而不仅仅是一个普通的编译器.Xamarin的AOT编译器和传统编译器之间有什么区别,还是仅仅是一个营销术语?没有.Xamarin在该段中传达的信息是,他们的代码比简单的基于字节码的语言执行得更快.对于iOS和Android,他们都能够在热代码路径上执行本机代码以提高性能.AOT和JIT这两个术语是关于他们如何做到这一点的

  6. ios – iTunes Connect警告:“您的二进制文件不支持iPad”

    我刚刚将一个新的二进制文件上传到iTunesConnect,并将其添加到iOS版本的新版本.添加二进制文件并保存更改后,iTunesConnect会显示警告消息:“您的二进制文件不支持iPad,iPad的屏幕截图或应用视频预览将不会显示在AppStore上.”Xcode项目是使用Cordova3CLI生成的;自从应用从Cordova2迁移以来,上传的二进制文件是第一个Cordova3版本.该应用程

  7. ios – LLVM,GCC 4.2和Apple LLVM编译器之间的区别3.1

    LLVMGCC4.2和AppleLLVM编译器3.1之间的主要区别是什么?

  8. ios – 二进制无效,二进制文件缺少体系结构[arm64]

    没有足够的信誉发布图像,请搜索“TimT”作为他的回复.更新:已经修复“是的,最近有一个修复程序应用于服务器,每个人都应该能够再次提交32位应用程序.–由TimT在同一个线程.我再次尝试,一切都很好.

  9. ios – 不能检查CGPoint是否不等于CGPointZero

    我有一个CGPoint在UIView类中声明,在我的viewController中,我尝试检查CGPoint是否不等于CGPointZero,但是我收到这个错误:二进制表达式(‘CGPoint'(又名’structCGPoint’)’和’CGPoint“)这是if语句:错误指向!=和我不知道为什么它给我一个错误.操纵杆是UIView类,CGPoint速度是这样声明的:@property(非原子)C

  10. 通用定制iOS框架使用Xcode 6.4

    我已经使用Xcode6创建了一个自定义的iOS框架.我尝试了许多脚本来使框架通用(用于模拟器和设备).但是它们都不适用于我.请告诉我一种方法来为iOS创建一个自定义的通用框架Xcode6.解决方法要通过终端将两个二进制文件合并成通用二进制文件:首先编译器件二进制,然后分别编译模拟器二进制.找到这两个二进制文件.如果你想检查哪些架构被编译成每个,你可以在终端中运行这个命令:lipo-info/pat

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部