Node.JS的竞争对手?QuickJS入门教程,使用os模块读写文件,并将JavaScript编绎成可执行文件


发布者 ourjs  发布时间 1563241334223
关键字 JS学习  Node.JS 
QuickJS 是一个完全由C语言编写的极小型JavaScript引擎,支持跨平台运行,并且有一些Java的特质,可将JS直接编绎成二进制文件。内置的系统模块还可以直接读写文件,动态加载脚本。目前还不支持net模块,不过已经有人在pull request中提交了merge请求。不久将可以直接使用系统Socket或发送http请求,构建web服务器。

由于非常精简,而且拥有JavaScript的全部功能,开发效率和运行效率都相当不错,可以预见,QuickJS将是Node.JS在嵌入设备,尤其是低端设备上较强的竞争对手。

QuickJS直接调用C模块


使用QuickJS前先需要进行源码编绎, 参考:  在嵌入式设备树莓派上编译QuickJS教程:一个C语言编写的极简JavaScript引擎 

QuickJS可直接调用C语言写的模块,如下面的示例:

/* example of JS module importing a C module */

import { fib } from "./fib.so";

console.log("Hello World");
console.log("fib(10)=", fib(10));

因为使用了import,调用时需要先启用模块加载 -m 参数:

root@VM-168-37-debian:~/quickjs-2019-07-09# ./qjs -m examples/hello_module.js
> Hello World
> fib(10)= 55

QuickJS使用系统os模块


在node.js中os提供系统的一些接口比如芯片构架操作系统信息等,文件操作则在fs模块中。而在quickjs中则在os模块中提供一些操作系统的底层接口,比如文件读写。

我们先创建一个测试文件,内容为 testing:

echo testing >> test.txt

新建一个 os.js 的测试文件,

nano os.js

粘贴入代码:

var fd      = os.open('./test.txt')
var buffer  = new ArrayBuffer(1024)
var len     = os.read(fd, buffer, 0, 1024)

console.log(len)
console.log(String.fromCharCode.apply(null, new Uint8Array(buffer)))

由于fd读取的是ArrayBuffer,我们使用了Uint8Array先转换成了字符串。用qs运行:

root@VM-168-37-debian:~/quickjs-2019-07-09# ./qjs os.js
8
testing

编绎成可执行文件

QuickJS使用qjsc来将javascript 文件编绎成二进制文件,但这里可能有一个BUG调用时目前还无法调用系统模块。没有外部依赖的JS则没有这个问题,由此可见QuickJS还有一定的改善空间。

root@VM-168-37-debian:~/quickjs-2019-07-09# ./qjsc -o os os.js
root@VM-168-37-debian:~/quickjs-2019-07-09# ./os
ReferenceError: os is not defined
    at <eval> (os.js:1)

这里的例子使用的是同步代码,由于JavaScript是单线程的,同步代码可能会阻塞当前进程,QuickJS提供了 setReadHandler/setWriteHandler 疑似可以传入回调函数进行异步处理。


os module 目前的接口方法:

open(filename, flags, mode = 0o666)
close(fd)
seek(fd, offset, whence)
read(fd, buffer, offset, length)
write(fd, buffer, offset, length)
isatty(fd)
ttyGetWinSize(fd)
ttySetRaw(fd)
remove(filename)
rename(oldname, newname)
setReadHandler(fd, func)
setWriteHandler(fd, func)
signal(signal, func)
setTimeout(delay, func)
clearTimer(handle)


QuickJS项目地址: https://github.com/horhof/quickjs









 热门文章 - 分享最多
  1. Node.JS用RSA签名算法公钥加密私钥解密,实现License软件授权验证
  2. Node.JS在命令行中检查Chrome浏览器是否安装,并打开指定网址
  3. 使用JavaScript的Proxy监听对象属性变化并进行类public/private的访问控制
  4. 树莓派4对比测试:性能提升3倍启动时间反而变慢?TF卡成最大瓶颈
  5. JavaScript求一个字符串的字节长度
  6. Node.JS借助OS模块获取当前Windows系统用户登录名
  7. GO有语法缺陷,缺少泛型、public/private、三元运算符?我不喜欢 Go 语言的十个理由
  8. 在嵌入式设备树莓派上编译QuickJS教程:一个C语言编写的极简JavaScript引擎
  9. Node.JS的竞争对手?QuickJS入门教程,使用os模块读写文件,并将JavaScript编绎成可执行文件

 相关阅读
  1. 在嵌入式设备树莓派上编译QuickJS教程:一个C语言编写的极简JavaScript引擎
  2. Node.JS的竞争对手?QuickJS入门教程,使用os模块读写文件,并将JavaScript编绎成可执行文件
  3. 使用JavaScript的Proxy监听对象属性变化并进行类public/private的访问控制
  4. JavaScript求一个字符串的字节长度
  5. Node.JS用RSA签名算法公钥加密私钥解密,实现License软件授权验证
  6. Node.JS借助OS模块获取当前Windows系统用户登录名
  7. JavaScript中将字符串true或false转换成Boolean类型
  8. jQuery用$.prop,$.attr方法来获取或设置checkbox当前选中状态
  9. Node.JS中用concat和push连接两个或多个数组的性能比较
  10. 判断是否为对象typeof abc == 'object' 与 instanceof 性能比较

  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA