前言

提起JavaScript,我们也许经常会想到的是,可以用来写Web页面嘛,又或者,会想起Node.js 这个服务端环境,搞前后端同构。
那么,除此之外, JavaScript还可以做什么?
 
JavaScript可以
  • 通过electron.js建设跨平台电脑桌面应用
  • 通过树莓派和Node.js,沟通硬件
  • 做电视机机顶盒应用,例如借助ntv.js
  • 从Hybird到React-Native,编写跨平台的混合APP,或者原生APP
  • 通过Cocos2d-x 框架或白鹭引擎,JS可以开发流行游戏
  • JS进行三维处理: WebGL和three.js
  • 做浏览器插件开发,例如Chrome插件
  • 做IDE插件开发,例如VScode编辑器的插件
  • 用JS写一个操作系统?:NodeOS
  • 微软开发的Node.js 多线程库 Napa.js,让JS也能拥抱多线程
(本文仅仅只是简单介绍,不会介绍具体用法)
 

S1.通过electron.js建设跨平台电脑桌面应用

如果你可以建一个网站,你就可以建一个桌面应用程序。 Electron 是一个使用 JavaScript, HTML 和 CSS 等 Web 技术创建原生程序的框架,它负责比较难搞的部分,你只需把精力放在你的应用的核心上即可。
  1. electron的实现基于Chromium 和 Node.js,并可以调用
  2. 编码完毕后,可以一键生成Mac,windows,Linux三个不同平台的应用程序
  3. electron可以直接调用Node.js的API,以及沟通桌面应用程序的内置模块
 

S2.可以通过JS调用树莓派接口,控制硬件

这里首先要介绍下树莓派, 树莓派(Raspberry Pi )是一种只有信用卡大小的微型计算机,别看它小,但它“麻雀虽小,五脏俱全”,计算机有的许多基本功能,树莓派也都有
 
学习硬件的同学可能对树莓派有一些了解。
树莓派上有大量的GIPO接口,即输入输出接口,通过GIPO口,用户可以和硬件进行数据交互,或控制硬件。
树莓派允许许多编程语言对GIPO接口进行控制,而JavaScript也是其中之一,也就是说,我们可以通过Node.js环境和树莓派,从而控制硬件。
这样的话,也许就能做一个好玩的智能小车玩一玩
 
 
参考资料

S3.做电视机机顶盒应用,例如借助ntv.js

(注意:我搜索到的这方面的资料其实非常有限,可能有错误和纰漏,还请指正! )
当你打开电视机机顶盒的时候,你看到的可能还是熟悉的HTML和JS,而它们被运行在一个看起来很不一样的“浏览器”上,当然,为了兼容电视机的接口,开发上可能存在很多细节上的不同,也正因如此,有积极热心的人开发了一个框架,叫ntv.js, 用来兼容不同牌子数字电视的中间件接口。
 
本人其实对电视机这一块不是很了解,但是通过阅读文档和相关资料,大概总结出以下内容
我们平时观看的电视软件,有 东方有线网,电信IPTV网等 不同电视软件公司, 这些电视软件呢,又有不同的二级厂商提供给它们“中间件浏览器” (终于看到一个我看得懂的词了! 哭)
  1. 电信下提供中间件浏览器的厂商主要是 iPanel、天柏,中间件规范为“IPTV2.0/3.0规范”
  2. 东方有线 下提供中间件的厂商主要是 iPanel、SHDV、联彤
Ntv.js根据这些中间间浏览器提供的规范,实现了兼容统一的JavaScript接口,大概是这么个意思
 

S4.通过Hybird开发混合APP,到后来通过React-Native编写原生APP

(这件事情其实不用讲也可以,因为大家肯定都比较了解了,但还是陈述以下)
Hybird是一种混合开发应用,基于webview实现,通过ios/android下不同的接口,可以实现JavaScript和Java/Object-C代码的互通。单纯使用ios/android原生实现,开发进度和成本受不了,而单纯使用h5/js开发,页面体验更加受不了。Hybird的目的是实现H5和Naive两者之间的权衡。
Hybird开发中能看到许多H5的影子,影响其体验,所以到后来,就出现了React-Native。
React-Native所编写开发的并不是Hybird那样的混合应用,它编写的是真正的原生应用。通过JavaScript和React框架的语法进行开发。
 
“从使用感受上和用Objective-C或Java编写的应用相比几乎是无法区分的。 React Native所使用的基础UI组件和原生应用完全一致。” —— React-Native官网。
所以相比起Hybird, React-Native在降低开发成本的同时,尽量优化了用户的体验。
当然了,RN也有许多缺点,这些就有劳诸位自己去查了,这里不作赘述
其他资料

S5.JS语通过Cocos2d-x 框架或白鹭引擎,可以开发流行游戏

Cocos2d-js
  1. Cocos2d-x是一套开源跨平台的游戏开发框架,适配ios/android/html5/Mac/windows多端,但功能侧重于原生移动平台
  2. 提供了图形渲染、网络、用户、音频、GUI 等功能。
  3. 核心采用C++编写,支持JavaScript等语言进行开发
 
白鹭引擎(Egret)
  1. 白鹭为开发者提供移动端游戏开发一站式解决方案,并建立包含核心渲染引擎2D/3D、游戏开发工具、创意动画工具、资源工具、原生打包方案等全球首个HTML5完整工作流
  2. Egret中包含多个工具以及项目。而Egret Engine是一个基于TypeScript语言开发的HTML5游戏引擎
 

S6.JS可以进行三维处理: WebGL和three.js

WebGL (Web图形库) 是一种JavaScript API,也属于HTML5的范畴。它可以用于在任何兼容的Web浏览器中呈现交互式3D和2D图形,而无需使用插件。WebGL通过引入一个与OpenGL ES 2.0紧密相符合的API,可以在HTML5 <canvas> 元素中使用。
而Three.js是基于WebGL封装的一个框架,能写出在浏览器上流畅运行的3D程序
 

S7.做浏览器插件开发,例如Chrome插件

 
有的时候,为了辅助开发,你可能会下载Chrome插件,Chrome插件下载完后呢,往往会在Chrome的右上角上有个自己的小图标,点击后会弹出菜单,然后通过对菜单进行操作就可以使用相关功能,就像上面那个默认的小图标的操作一样=
其实Chrome插件里的菜单的UI和交互也还是HTML和JS实现的,我们完全可以按照规范,定制自己的自定义Chrome插件,具体的做法参考以下
参考资料
 

S8.做IDE插件开发,例如VScode

我们在使用VScode的时候,我们发现,许多好用的插件大大加速了我们的开发过程,那我们能不能自己写一个自己的插件呢? 这当然也是可以的,道理和第5点是类似的,这里不多阐述,参考
参考资料
 

S9.NodeOS: 属于JS的操作系统

(当然了,JS写操作系统,相对其他语言来说肯定是被动的,但是我觉得吧,阅读其源码有利于前端工程师去了解操作系统的组成和构造,就是一个学习的窗口吧)
NodeOS是一个由Node.js设计的操作系统,发布于2015年。NodeOS的主要特点是:
  • 以Linux为内核
  • 以Node作为主要的运行时环境
  • 以npm作为包管理器
  • 用户自主的独立文件系统
参考资料
Github地址
 

S10.微软开发的Node.js 多线程库 Napa.js,让JS也能拥抱多线程

我们都知道,理论上node.js是单线程的,适合处理IO密集型的任务,但也许不适合处理计算密集型的任务。而微软提供了一个node的多线程的实现:Napa.js,让JS也能够涉略计算密集型的任务。
Napa.js的作用
  • 支持多线程,拥抱计算密集型的任务
  • 支持JavaScript线程上的对象传输,对象共享功能
  • 提供了内存分配的API
参考资料
 

总结

这篇文章,说了些东西,也什么都没说。 但我认为,相对于知道具体怎么做一件事情,知道能做哪些事情,也许也同样重要。
 
最后,欢迎大家多多补充

除了Web和Node,JavaScript还能做什么的更多相关文章

  1. Node.js结合Selenium做Web自动化测试

    发现腾讯课堂上有个node.js结合Selenium做Web自动化测试的教学视频, 听来感觉不错,一来老师讲的还不错,二来node.js这门语言会越来越热,学会总没什么坏处,三来发现CukeTest这 ...

  2. web前端之JavaScript

    JavaScript概述 JavaScript历史 在上个世纪的1995年,当时的网景公司正凭借其Navigator浏览器成为Web时代开启时最著名的第一代互联网公司.由于网景公司希望能在静态HTML ...

  3. 微信开发之移动手机WEB页面(HTML5)Javascript实现一键拨号及短信发送功能

    在做一个微信的微网站中的一个便民服务电话功能的应用,用到移动web页面中列出的电话号码,点击需要实现调用通讯录,网页一键拨号的拨打电话功能. 如果需要在移动浏览器中实现拨打电话,发送email,美国服 ...

  4. [HTML] 微信开发之移动手机WEB页面(HTML5)Javascript实现一键拨号及短信发送功能

    在做一个微信的微网站中的一个便民服务电话功能的应用,用到移动web页面中列出的电话号码,点击需要实现调用通讯录,网页一键拨号的拨打电话功能. 如果需要在移动浏览器中实现拨打电话,发送email,美国服 ...

  5. web前端分享JavaScript到底是什么?特点有哪些?

    web前端分享JavaScript到底是什么?特点有哪些?这也是成为web前端工程师必学的内容.今天为大家分享了这篇关于JavaScript的文章,我们一起来看看. 一.JavaScript是什么? ...

  6. web 前端3 javascript基础

    JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. 一.如何编写 1.J ...

  7. 1 初级.net web工程师,在工作中都做些什么

    初级.Net Web工程师,在工作中都做些神马?   职责 初级.Net Web工程师的主要职责,就是按比较详细的要求去完成代码. 比较详细的要求是指:一般会把页面式样.功能的描述.数据库结构.性能要 ...

  8. 好程序员web前端分享javascript关联数组用法总结

    好程序员web前端分享javascript关联数组用法总结,有需要的朋友可以参考下. Hash关联数组定义 代码如下 // 定义空数组 myhash = { } // 直接定义数组 myhash = ...

  9. Python web前端 05 JavaScript

    Python web前端 05 JavaScript 一.获取元素 1.初识JavaScript /* .. */ #这是多行注释 // #这是单行注释 #JavaScript是一种脚本语言,是一种动 ...

随机推荐

  1. Badboy - 导出脚本,用于JMeter并发测试

    参考: http://leafwf.blog.51cto.com/872759/1141011 http://www.51testing.com/html/00/130600-1367743.html ...

  2. BZOJ-3343教主的魔法+分块(大块排序二分)

    传送门:https://www.luogu.org/problemnew/show/P2801 参考:http://hzwer.com/2784.html  感觉思路无比清晰:) ps:我在洛谷A的, ...

  3. CodeForces 979 D Kuro and GCD and XOR and SUM

    Kuro and GCD and XOR and SUM 题意:给你一个空数组. 然后有2个操作, 1是往这个数组里面插入某个值, 2.给你一个x, k, s.要求在数组中找到一个v,使得k|gcd( ...

  4. 让docker中的mysql启动时自动执行sql

    在用docker创建mysql容器的时,有时候我们期望容器启动后数据库和表已经自动建好,初始化数据也已自动录入,也就是说容器启动后我们就能直接连上容器中的数据库,使用其中的数据了. 其实mysql的官 ...

  5. 【Offer】[4] 【二维数组中的查找】

    题目描述 思路分析 Java代码 代码链接 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数 ...

  6. Xshell配置公钥,免密码登陆

    下面讲解如何通过xshell配置使用PubKey 来登录服务器,可以减少通过password登录的麻烦. 1.先到用户的家目录, cd ~ 2.执行ssh-keygen -t dsa(or rsa) ...

  7. git修改user.name 和user.email

    今天刚刚入门了下git,,然后初始化的时候将用户名弄错了...就很气啊.然后网上找了半天都找不出一个可靠的修改全局用户名和邮箱的方法..   最后还是自己摸索出来了..其实也很简单.   首先进入gi ...

  8. 使用Idea第一次创建一个Mavne工程时没有src目录

    在使用idea创建一个maven工程时没有src目录,可能出现的问题很多,我先把我自己的问题分享上来 因为没有src,可能是因为maven插件还没下载到本地仓库.maven插件的版本和jdk版本冲突或 ...

  9. linux下tomcat无法远程访问(开放8080端口)

    我们在linux下配置了tomcat后发现,无法访问除了linux(如果是虚拟机的话,宿主机子根本无法访问tomcat),解决下吧 原因是我们的tomcat访问需要8080端口,但是从外部访问,我们的 ...

  10. airflow使用SimpleHttpOperator实现http调用任务

    使用SimpleHttpOperator作为处理器的时候,会发现默认访问的地址www.google.com端口为443 例如下面这样定义的任务 task = SimpleHttpOperator( t ...