网站首页 > 技术教程 正文
原文:https://blog.csdn.net/lihongxun945/article/details/48900489
最近 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有直接的竞争关系。
猜你喜欢
- 2024-10-12 高端Linux 脚本很有用,赶紧学起来!
- 2024-10-12 linux日常脚本(linux有意思的脚本)
- 2024-10-12 彻底搞懂nginx基本使用配置(nginx常用配置参数)
- 2024-10-12 详解shell脚本case条件语句,开发各种服务启动脚本跳板机
- 2024-09-25 详解利用系统函数模拟实现nginx 系统脚本启动的特殊颜色专业效果
- 2024-09-25 0364-如何使用Nginx实现HiveServer2负载均衡
- 2024-09-25 centos 7.9 shell脚本安装nginx-1.20.2
- 2024-09-25 CentOS 开机启动脚本(centos开机启动脚本)
- 2024-09-25 Nginx日志安全分析脚本(nginx日志大量502)
- 2024-09-25 redis&nginx运行参数采集脚本
你 发表评论:
欢迎- 最近发表
-
- Win10 TH2正式版官方ESD映像转换ISO镜像方法详解
- 使用iso镜像升级到Windows 10的步骤
- macOS Ventura 13.2 (22D49) Boot ISO 原版可引导镜像
- 安利一个用ISO镜像文件制作引导U盘的的小工具RUFUS
- CentOS 7使用ISO镜像配置本地yum源
- 用于x86平台的安卓9.0 ISO镜像发布下载:通吃I/A/N、完全免费
- AlmaLinux 9.6发布:升级工具、初步支持IBM Power虚拟化技术
- Rufus写入工具简洁介绍与教程(写入模式)
- 新硬件也能安装使用了,Edge版Linux Mint 21.3镜像发布
- 开源工程师:Ubuntu应该抛弃32位ISO镜像
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)