我使用Google Closure Compiler使用PHP自动编译javascript(需要这样做 - 在PHP中,在Windows机器上没有安全限制).我编写了简单的PHP脚本来调用进程,将.js内容传递给stdin并通过stdout接收重新编译的.js.它工作正常,问题是,当我编译例如40 .js文件时,它需要强大的机器将近2分钟.但是,市长延迟是因为java为每个脚本启动.jar应用程序的新实例.有没有办法如何修改下面的脚本来创建进程只有一个并在进程结束前多次发送/接收.js内容?
function compileJScript($s) {
$process = proc_open('java.exe -jar compiler.jar', array(
0 => array("pipe", "r"), 1 => array("pipe", "w")), $pipes);
if (is_resource($process)) {
fwrite($pipes[0], $s);
fclose($pipes[0]);
$output = stream_get_contents($pipes[1]);
fclose($pipes[1]);
if (proc_close($process) == 0) // If fails, keep $s intact
$s = $output;
}
return $s;
}
Run Code Online (Sandbox Code Playgroud)
我可以看到几个选项,但不知道是否可能以及如何做到这一点:
我想知道,为什么.*和.*?PCRE正则表达式中的和不一样(例如在PHP的preg_match()中。点.是任何可能字符*的符号,并且是0到无穷大重复的符号。为什么有符号?意味着0到1重复?但是,由于.*?与不能互换,所以显然不是一样的,.*但是我看不出逻辑上的区别,我必须总是尝试在某些情况下什么可行,什么不可行,我想这.*什么都不做,并且?是多余的,因为它可以指定.*为0或1倍-但空字符串为0倍,并且空字符串也应匹配.*。
谁能解释给我确切的区别,并给我看个简短的例子?
谢谢