• 北漂鱼
    2019-06-17
    对于一个OpenResty入门者一开始讲这些性能和低层的知识有些枯燥了,毕竟还没写过几个OpenResty的实例,对性能的差异没什么感觉,基础知识还没掌握全更难深入底层。有如学习java的初学者一开始就看《Java编程思想》。可否尝试在后面的实际例子中引出这些知识点。

    作者回复: 后面会专门介绍 OpenResty 的 Lua API。LuaJIT 的这些内容有个印象即可。

    
     11
  • 回家
    2019-06-17
    封装字符串查找函数:
    local function new_string_find(src, dst, regex, pos)
        if regex then
            local ctx = {pos = pos or 1}
            return ngx.re.find(src, dst, "jo", ctx)
        else
            local pos = pos or 1
            return string.find(src, dst, pos, true)
        end
    end
    展开
    
     4
  • helloworld
    2019-06-17
    老师,下面这个设置lua库的搜索路径的代码,最后为什么要拼接package.path本身啊?
    package.path = "../myLuaTest/myLuaCode/?.lua;"..package.path

    作者回复: package.path 是默认的查找路径,你可以单独把它 print 出来看下里面的值。不拼接的话,就把默认查找路径全都覆盖掉了。

    
     3
  • Geek_89bbab
    2019-06-17
    希望老师分享一下写 openresty代码时用什么编辑器比较好,代码补全,定义跳转,引用跳转等如何配置。老师你们写openresty的时候是怎么来做的?直接vim操作,还是有更智能些的IDE?

    作者回复: 现在还没啥好用的编辑器,我用的是 vs code

    
     3
  • Guyun
    2019-07-04
    好~
    
     1
  • 燕羽阳
    2019-06-17
    1. lua的语法比较简单,如果有编程基础的话,一天就可以入门了。推荐大家两本书《lua程序设计》lua入门必备,《lua设计与实现》深入解释器虚拟机的原理。
    2. 之前写过一点openresty和kong,但是从没注意过性能问题。今天的NYI,老师讲的非常棒,完整的实战方案,超赞👍
    3.我对jit完全不熟悉,请问老师,jit是按照函数为单位来编译么?函数中有一个NYI,整个函数就是解释运行么?

    作者回复: 是按照原语来编译的,也就是 `ipairs` 、`string.find` 这种的颗粒度,并不是你自己写的 function

    
     1
  • John
    2019-06-17
    请教一下老师,当op中的lua规则和nginx配置文件产生冲突,比如nginx配置了rewrite规则,又同时引用了rewrite_by_lua_file,那么这两条规则的优先级是什么?

    作者回复: 这个具体要看 nginx 配置的 rewrite 规则是怎么写的了,是 break 还是 last。这个在官方文档中有注明,并且配了一个示例代码:
     location /foo {
         rewrite ^ /bar;
         rewrite_by_lua 'ngx.exit(503)';
     }
     location /bar {
         ...
     }
    上面这个配置中,ngx.exit(503) 是不会被执行的。但是,如果改成:
    rewrite ^ /bar break;

    ngx.exit(503) 就是可以执行的。

     1
     1
  • Forturn
    2019-06-17
    楼上说的有道理,目前还没掌握基本的语法,还不会写一些基本的功能,就去学底层的东西,有点摸不着头脑,也不懂这些。不知道后面会不会具体事例

    作者回复: 看不懂没有关系,重要的是记得有LuaJIT 和 NYI 这个东西,后面遇到问题方便查找。

    
     1
  • Geek_e59303
    2019-11-12
    什么是代码热路径啊
    
    
  • sheng
    2019-08-09
    这里的一个数量级是指十倍的意思么?

    作者回复: 是的

    
    
  • sheng
    2019-08-09
    你好,性能差距至少一个数量级是指多少?可否举个例子?
    
    
  • KoALa
    2019-07-25
    教程中反复提到了“LuaJIT 的作者目前处于半退休状态”,感觉这个情况很不乐观啊...

    作者回复: Kong 和 OpenResty 的团队中,都有人在逐步接手。开源项目只要有人在使用,就不会死掉,不用担心。

    
    
  • 莫然
    2019-07-11
    pairs的例子稍作修改,如下:
    local t = {}
    for i=1,100 do
         t[i] = i
    end
     
    for j=1,10 do
        for k,v in pairs(t) do
             --
        end
    end
    jit.log里输出的是:[TRACE 1 t.lua:123 loop]

    如果改成如下代码:
    for j=1,100 do
        for k,v in pairs(t) do
             --
        end
    end
    jit.log里输出的是:
    [TRACE 1 t.lua:123 loop]
    [TRACE --- t.lua:128 -- NYI: bytecode 72 at t.lua:129]
    [TRACE --- t.lua:128 -- NYI: bytecode 72 at t.lua:129]

    为什么循环10的时候没有NYI的提示?
    展开

    作者回复: LuaJIT 的优化是随机触发的,要足够热才可能尝试去优化

    
    
  • psoracle
    2019-07-04
    既然是优先使用openresty api,再luajit的api,老师请问一下,luajit的API在哪里能找到,看过 http://luajit.org/ext_jit.html 与 http://wiki.luajit.org/JIT-Compiler-API?

    作者回复: 还有 https://github.com/LuaJIT/LuaJIT/blob/v2.1/doc/extensions.html

    
    
  • 风翱
    2019-06-20
    能否说明一下学习的路径或介绍一些书籍,可以在课程之外进行补充学习? 现在学习的过程中,对于文中讲解的内容,真的只有一个印象,然后就有点不知道如何下手了。

    作者回复: 推荐看 OpenResty 相关的开源项目,比如 lua-resty 库。

    
    
  • NEVER SETTLE
    2019-06-19
    经常会发现openresty运行一段时间,性能会差很多。然后reload一下性能会好很多。这个问题一直困扰很久了,不知道如何进行排查。 以前两天的情况,高峰期CPU使用率超过了60%,然后reload一下,CPU使用率就降为30%。

    作者回复: 需要用火焰图分析下 on-cpu 才行

    
    
  • John
    2019-06-18
    老师,我在用op实现一个自定义逻辑的风控系统,想请教一下动态配置生效的问题,如何在不reload的情况下使配置生效,我想了两个办法:1,使用全局变量存储配置文件,提供一个api更新全局变量;2,使用ngx.shared.DICT,将配置文件存储在共享内存中。请问是否合理,或者是否有其它思路

    作者回复: 你可以使用一个 timer,定时的查询是否有新的配置,并把新配置写到类似 shared dict 的缓存中。

     1
    
  • 涉蓝
    2019-06-17
    对于初学者是不是 要先学 lua -> luajit -> openresty api -> 其他第三方包
    按这种先把 文档啥的都扒一遍才行呢?
    我对于使用有点疑惑,openresty可以做 网站普通后端语言可以做的事 譬如连数据库做前端页面 但这显然并不是它主要适合的部分吧 毕竟其他后端语言一大把,文档生态库好的多的是
    所以是API 网关的 开发 或者 nginx 无法配置热修改的 补充吗?

    作者回复: 这个问题其实要回到 OpenResty 诞生的那个时候来看, 2007 年,支持同步非阻塞的语言凤毛麟角。
    即使是现在,后端语言可以达到 OpenResty 这种性能级别的也不多。
    API 网关和软 WAF 算是开发者的自然选择,OpenResty 其实能做的不止这些。

    
    
我们在线,来聊聊吧