V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mywaiting
V2EX  ›  分享发现

Nginx with Javascript (nginxScrpt or njs)

  •  
  •   mywaiting · 2018-05-09 23:27:15 +08:00 · 5095 次点击
    这是一个创建于 2184 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前有吐槽过 OpenResty 中的 Nginx+Lua 写得很痛苦,传送门看这里 https://www.v2ex.com/t/438389

    本着八卦的心情到处八卦 Nginx+Python, Nginx+Javascript 这样的实现,还真有!

    Nginx 官方要实现一个 JavaScript 实现,作为钦点的内置脚本语言。后来这个实现就被称作 nginScript,简称 njs

    官方的介绍看这里 http://nginx.org/en/docs/njs_about.html

    本着继续八卦到世界的尽头的心态,我还找到了他们的开发仓库 http://hg.nginx.org/njs/

    有看到 Igor Sysoev 一直在提交代码吗!!!有看到吗!!!看到吗!!!

    仔细看一下他们迭代的版本,已经到 0.2.0 啦!已经基本实现 ES5.1 的要求

    这么玩下去,我觉得 njs 合并到 nginx mainline 版本释出,那是指日可待的事情~

    想想,性能爆表的 Nginx,加上前后端通杀比世界上最好的 PHP 还要热门的 javascript,这对官方组合会爆出什么样的浪潮~

    好了,我觉得这么搞法,章哥的 openresty 目测是玩不过 njs 了~
    第 1 条附言  ·  2018-08-22 00:28:23 +08:00
    写了一篇很长很详细的 Nginx NJS 的介绍,算了研究一番后的一些心得总结

    https://www.mywaiting.com/weblogs/introducing-nginx-njs/?s=v2ex

    不知道算不算广告,自己挖坟自己开的贴吧
    9 条回复    2018-05-10 10:49:45 +08:00
    mywaiting
        1
    mywaiting  
    OP
       2018-05-09 23:31:03 +08:00
    仔细看一下他们 hg 仓库的代码记录,发现 nginxScript 已经正式被除名了,真正的从代码里被删除了,现在的正式名字就只叫 njs
    hcymk2
        2
    hcymk2  
       2018-05-09 23:50:25 +08:00
    如果觉得写 Lua 痛苦,Javascript 估计会更痛苦。
    glues
        3
    glues  
       2018-05-10 00:01:50 +08:00 via iPhone
    不要忘了 luajit 的性能,可不是你随便搞搞就能达到的
    mywaiting
        4
    mywaiting  
    OP
       2018-05-10 00:26:20 +08:00
    @hcymk2 #2 js 挺好的,至少是主力语言之一,也许是因为太熟悉了,该踩的坑的都踩完了,没有觉得有啥痛苦的。lua table 模仿一切的数据结构,里面还不能有 nil,私下觉得不是很适应,当然了,这不适应很大的原因是因为对 lua 不熟悉引起的

    @glues #3 njs 或者没有 luajit 的性能,但对比之下,比 lua 的生态环境好太多太多了,js 的生态和入门的容易程度,比 lua 领先几个光年
    autoxbc
        5
    autoxbc  
       2018-05-10 00:39:06 +08:00
    @hcymk2 #2 不一样的,比如汉语其实非常难,但是大家天生就会,js 就是 web 上的母语
    0312birdzhang
        6
    0312birdzhang  
       2018-05-10 07:39:55 +08:00 via iPhone
    不是说官方搞出一个东西就胜利了,openresty 的性能跟生态在那摆着呢
    glues
        7
    glues  
       2018-05-10 09:52:42 +08:00
    @mywaiting 那你为啥不直接用 nodejs ?
    mywaiting
        8
    mywaiting  
    OP
       2018-05-10 10:22:13 +08:00
    @glues 这里面有个逻辑就是,如果不是用 nginx+lua 内嵌这样的实现的话,那么 nginx 前面做 proxy_pass 后端是 nodejs,php-fpm,uwsgi ( Python 系)等这些实现并无区别

    njs 的意义我觉得是 nginx 自带 js 引擎了,简单说就是等同于内嵌了 nodejs,这在部署的时候大幅度简化运维的步骤,因为只有一个 nginx,reload 一下,连啥 supervisor 这样的后端 server 监控的都不需要了

    @0312birdzhang 不说胜利不胜利,至少是个方向吧。Openresty 的性能有,但是生态跟 js 想比,这个真没法说
    glues
        9
    glues  
       2018-05-10 10:49:45 +08:00
    @mywaiting
    1. njs 能否使用 nodejs 的生态是个问题,我估计是不能直接用的
    2. njs 想要达到 nodejs V8 的性能,估计很难
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2110 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 11:31 · PVG 19:31 · LAX 04:31 · JFK 07:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.