Ich benutze den Google Closure Compiler, um automatisch Javascript mit PHP zu kompilieren (wird benötigt, um es so zu machen - in PHP, ohne Sicherheitseinschränkungen auf Windows-Rechner). Ich schrieb einfaches PHP-Skript, das Prozess aufruft, .js-Inhalt an stdin übergibt und neu kompilierte .js über stdout empfängt. Es funktioniert gut, Problem ist, wenn ich zum Beispiel 40 .js Dateien kompiliere, dauert es starke Maschine fast 2 Minuten. Die größte Verzögerung liegt jedoch darin, dass Java für jedes Skript eine neue Instanz der .jar-App startet. Gibt es eine Möglichkeit, das Skript unten zu ändern, um nur einen Prozess zu erstellen und den .js-Inhalt mehrmals zu senden/empfangen, bevor der Prozess endet?Mehrere stdin/stdout-Aktionen während eines Prozessaufrufs
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;
}
ich mehrere Optionen sehen kann, aber nicht wissen, ob es möglich ist und wie es zu tun:
- Prozess einmal erstellen und erstellen Sie nur Rohre für jede Datei
- Force-java halte JIT-ed .jar im Speicher für eine viel schnellere Re-Ausführung
- Wenn PHP es nicht kann, ist es möglich, Bridge (eine andere .exe-Datei, die jedes Mal schnell starten, übertragen stdin/out und leitet es um laufender Compiler; wenn so etwas überhaupt existiert)