nginx nodejs环境配置_nginx的脚本特性-nginScript笔记

原文:https://blog.csdn.net/lihongxun945/article/details/48900489

704fc5b5b5c0146d227a6aad099ce703.png

最近 nginx 团队宣布自己写了一个JS runtime,叫 nginScript,参见官方的介绍:https://www.nginx.com/blog/nginscript-why-our-own-javascript-implementation/

nginScript 是什么

nginScript 是一个JS runtime,也就是俗称的JS引擎,和V8做的是类似的事。目前他实现了一个 ES5的子集,它的代码会被编译成字节码,并且直接在nginx中执行。他用的是一个register-based virtual machine,关于这个VM并没有任何说明。

当前的版本是一个preview版本,nginx可以通过两种方式执行JS代码: 可以在nginx的配置中计算一些值 在nginx生成content的时候执行

为什么要再造一个 nginScript

Our goal is for nginScript snippets to be run when NGINX processes a request, in order to extend and inform the processing of requests and responses。

也就是说,nginScript的目的是在一个nginx请求中可以执行一些处理数据之类的操作,而不是想nodejs一样提供一个完备的持久运行的环境。

而为什么不直接用V8呢? 因为 V8 设计之初就是给浏览器中的,它的内存管理机制非常不可控,很容易因为内存溢出之类的问题导致进程终止。虽然对浏览器几乎没有影响,但是在需要长时间稳定运行的服务器来说这就是非常致命的。

nginScript主要希望能满足一下几个需求:

架构。 单线程,字节码的设计是为了保证能迅速初始化和销毁。每一个request都有自己一个独立的VM,所以可以以request为单位进行垃圾回收,一个request结束之后可以全部回收内存,并且这样可以使每个request都是独立的环境,不会因为一个request的问题导致全部request阻塞。

工具类。 nginScript提供很多常用的工具类,比如hash date等。并且都是调用native代码,所以速度很快。你可以认为nginScript就是一堆native方法的JS接口。

优先执行权。 nginScript会自动暂停那些阻塞操作的线程,比如一个线程发送一个同步的网络请求,nginScript会自动暂停这个线程,并且在请求成功的时候再通知他。这样可以用同步代码写出异步的效果,让代码更易读。

关于性能

nginScript现在是先编译成字节码,再在VM中执行字节码(很像JAVA)。他们也希望能增加JIT(即时编译)功能(不懂JIT的参见这里 https://en.wikipedia.org/wiki/Just-in-time_compilation )。现在的测试结果是,nginScript和其他的解释语言的性能相近,比如 PHP和Ruby。但是没有即时编译语言快。

并且nginScript的目的是在nginx中执行一些简单的内部操作和本地操作规则,而不是做一些需要大量CPU计算的事情,因为这些是C语言做的事。关键的性能是要优化的,但是不能简单的和JIT语言比性能。

未来

现在只是一个预览版,现在的主要精力是实现一些JS的核心功能,比如闭包,和一些常用的内建对象,比如 Date

后续的重点会放在 集成 上:

  • 如何用nginScript写nginx配置
  • nginScript如何访问和控制nginx
  • nginx 如何把相关数据传给 nginScript

我的一点理解

nginScript 虽然是一个runtime,但是其实它并不打算取代V8做后台的业务逻辑,它现在的中心主要是: 和nginx的无缝集成,互相访问和控制 优化性能,只专注于在nginx中执行简单的规则,比如调用一个C的时间模块,并不打算写复杂的业务逻辑。

相对于V8和Nodejs可以提供完善的ES实现和丰富的库,nginScript只是实现了JS中很小的一块内容。所以至少相当长的时间内,nginScript不会和V8有直接的竞争关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值