我对这件事情全新.花了一整天试图找出"最常用"的方法.我想要实现的是像readthedocs.org,但对于私人客户(和专有项目)
几乎所有的常见问题解答,博客文章,howtos等都在描述如何使用GitHub页面使用主机(发布)文档,或者使用readthedocs.org(.com)
我试图在本地使用Sphinx(NB:不是 "Sphinx搜索"),我可以很容易地构建一个示例演示文档,但我并不完全理解如何托管"可搜索"的解决方案,就像它一样适用于http://www.sphinx-doc.org(似乎它使用readthedocs.org作为搜索后端)
我试图在本地部署readthedocs.org,但是
(注意:我在Windows上尝试它,这可能解释1-2项,但不是3,我相信)
到目前为止感觉我的想法已经用完了......
任何建议将受到高度赞赏!
我们希望让我们的客户能够自定义其请求处理的某些方面,让他们编写一些东西(当前正在查看 Groovy 脚本),然后将这些脚本保存在数据库中并在必要时应用,这样我们就不必维护处理细节的所有这些微小方面可能仅适用于某些客户。
因此,对于 Groovy,一个简单的实现会像这样:
GroovyShell shell = new GroovyShell(); // prepare execution engine - probably once per threadScript script = shell.parse(scriptBody); // parse/compile execution unitBinding binding = prepareBinding(..); script.setBinding(binding); // provide script instance with execution contextscript.run(); doSomething(binding);当一个接一个地运行时,步骤 1 大约需要 1 分钟。800 毫秒,步骤 3 大约需要 2000 毫秒,步骤 5 大约需要 150 毫秒。绝对数字会有所不同,但相对数字相当稳定。假设步骤 1 不会按请求执行,并且步骤 5 的执行时间是可以忍受的,那么我非常关心步骤 3:从源代码解析 Groovy 脚本实例。我阅读了一些文档和代码,还进行了一些谷歌搜索,但到目前为止还没有发现任何解决方案,所以这里是问题:
我们能否以某种方式预编译一次 Groovy 代码,然后将其保存在数据库中,然后在必要时重新水合,以获得可执行实例Script(我们也可以在必要时缓存)?
或者(正如我现在所想的那样)我们可以将 Java 代码编译为字节码并将其保存在数据库中?不管怎样,我不太关心脚本使用的特定语言,但亚秒执行时间是必须的..感谢您的任何提示!
注意:我知道这GroovyShellEngine可能会缓存已编译的脚本;仍然存在首次执行延迟过长的风险,还有内存过度消耗的风险......
UPD1:根据@daggett的出色建议,我修改了一个解决方案,如下所示:
GroovyShell shell = …Run Code Online (Sandbox Code Playgroud) 我在package.json文件中设置了一些脚本,应该在后台运行,比如
"scripts": {
"babel-watch": "babel client -d _tmp/babel -w",
"server": "node server.js",
"background": "start npm run babel-watch && start npm run server"
}
Run Code Online (Sandbox Code Playgroud)
我想background从VS代码运行任务,所以我这样设置tasks.json(省略了一些行):
"command": "npm",
"args": [],
"isShellCommand": true,
"showOutput": "always",
"suppressTaskName": true,
"tasks": [
{
"taskName": "background",
"args": ["run", "background"]
}
]
Run Code Online (Sandbox Code Playgroud)
如果我npm run background从远程管理器运行,则会启动2个新的控制台窗口,然后我将返回到远程.但是,当我在VS Code中运行它时(使用task background,2个新的控制台窗口启动,但是,VS代码等待任务完成,然后它才允许我执行另一个任务(显示错误:( There is an active running task right now. Terminate it first before executing another task.我给了一个选项"终止"运行任务",只会导致错误The launched process doesn't exist …