非阻塞的访问网络IO。在连接 MySQL 、Redis 和发起 HTTP 请求时,工作进程不能傻傻的等待网络IO的返回,而是需要支持事件驱动,用协程的方式让 CPU 资源更有效的去处理其他请求。很多语言并不具备这样的能力和周边库。
有完备的缓存机制。不仅需要支持 Redis 、Memcached 等外部缓存,也应该在自己的进程内有缓存系统。我们希望大部分的请求都能在一个进程中得到数据并返回,这样是最高效的方法,一旦有了网络IO和进程间的交互,性能就会受到很大影响。
同步的写代码逻辑,不要让开发者感知到回调和异步。这个也很重要,程序员也是人,代码应该更符合人的思维习惯,显式的回调和异步关键字,会打断思路,也给调试带来困难。
我们看下它的 hello world:
locationi / {
js_run "
var res;
res = $r.response;
res.status = 200;
res.send("hello world!");
res.finish();
"
} 再对比下 OpenResty 的 hello world:
location / {
content_by_lua_block {
ngx.say("hello world")
}
} 看上去差不多,只是 OpenResty 简洁一些。根据 nginx 官方的说明,nginScript 只是想提供一种更方便配置 nginx 的方法,并不想取代 ngx_lua。