JavaScript很牛

jonh.felix 9年前

几年前,我从来没有想过现在的JavaScript竟然会变得几乎无处不在。下面是几个要关注JavaScript的原因。

首先,我认为JavaScript能够得到普及的主要原因之一是,JavaScript非常易于接近。学习JavaScript,对于初学者而言,相对比较容易,对于高级用户而言,又非常强大,可以用它来构建复杂又可靠的系统。

其次,之所以要关注JavaScript是因为现今的JavaScript已经无处不在。

你可以使用JavaScript在几乎所有平台上开发:客户端应用程序,服务器端业务逻辑,嵌入式芯片/物联网设备,管理构建脚本和依赖关系,等等。

不过,这并不意味着你可以在任意情况下使用完全相同的代码,但你可以使用相同的技能——JavaScript开发——提供跨越多个范式的解决方案。

客户端

JavaScript可被用于支持客户端应用程序/用户界面,以及众多平台和设备的用户交互。

web

当然,JavaScript支持web,这是肯定的。 JavaScript是所有web浏览器基本的脚本语言。

移动

JavaScript也可用于支持安装到本地设备上的移动应用程序。

  • Apache CordovnPhoneGap——你可以使用PhoneGap或Cordovn建立本地安装的web技术app。 PhoneGap是Adobe的Cordovn品牌分支,但是从开发者的角度来看,它们基本上是相同的。运行在移动设备上的应用程序会带有一个web视图,用构建动态web应用程序相同的方式建立用户界面。用户界面虽然是用HTML以及CSS样式实现的,但是所有的交互都是用JavaScript创建的。
  • DeviceOne ——得到JavaScript支持的web应用程序不仅可以内置web视图。DeviceOne框架是开发人员使用JavaScript直接编写他们的本地应用程序,并生成一个可以在移动设备上运行的本地应用程序。在运行时,逻辑被解释为JavaScript,但是所有(所有UI元素)与用户交互的东西,100%是本地的,这就提供了一个非常高品质的用户体验,而且现在还可用于iOS和Android、windows的应用程序。
  • Unity 3D——使用Unity 3D引擎,哪怕全部由JavaScript支持,你也可以开发出丰富多彩又身临其境的移动3D模拟或游戏体验。

桌面

桌面应用程序也没有被JavaScript排除在外。大多数桌面解决方案陷入了类似于Apache Cordovn的分类中,最终导致的结果是,web视图拥有的API层次较低,其内容开发基于web技术。

  • Electron——来自于GitHub的Node.js+Chromium桌面应用程序容器
  • app.js——Node+Chromium桌面应用程序容器
  • nw.js——另一个Node+Chromium桌面应用程序容器的框架
  • CEF——The Chromium Embedded Framework——嵌入Chrome浏览器内置于桌面应用程序的框架。

…等等。对了,我记得,微软对于如何纯粹地用HTML / JS构建Windows应用程序,已经有了一个解决方案,而且还有更多的解决方案,但现在我一下子记不起来了。

事实上,一些我最喜欢的桌面工具,如SlackAtom和 VS Code实际上就是在web技术和HTML / JS的基础上实现的。

服务器端

最明显的是Node.js——封装了Chrome的V8 JavaScript引擎的JavaScript运行时——在服务器端开发和企业上已经取得了巨大的进步。 Node.js,受到express.js和loopback.io等框架的支持,使得用JavaScript开发服务器端和复杂的企业应用程序中变得可能。

物联网

你可以完全使用JavaScript来开发可运行在Arduino、树莓派或其它小平板上的无头app,你可以使用JavaScript管理基础设施和物联网传感器信息流,你也可以使用JavaScript为嵌入式系统编写芯片程序,可以用它控制机器人,你甚至还可以使用JavaScript支持媒体中心连接电视体验。

就像我说的……JavaScript无处不在。

生态系统

你不仅可以到处构建和运行JavaScript应用程序。 JavaScript还有一个庞大而繁荣的开发者生态系统。

JavaScript是GitHub上最活跃的语言,它不仅是所有代码仓库中最活跃的,也是所有push/commit中最活跃的。

但是,种种这一切这并不意味着JavaScript就是适用于一切的最好语言。也不意味着你取出一段源代码就能照你想的那样运行在每一种设备和上下文中。

但是,你可以使用JavaScript技术,去开发几乎任意类型的设备/下上文。你可以编写一次,就可以到处运行,用DeviceOne团队的话就是: write once, run anyway。