Io uso Google Closure Compiler per compilare automaticamente javascript utilizzando PHP (è necessario farlo in questo modo - in PHP, hovewer non ci sono limiti di sicurezza sulla macchina Windows). Ho scritto un semplice script PHP che chiama process, passa il contenuto .js allo stdin e riceve ricompilati .js tramite stdout. Funziona benissimo, il problema è che, quando compilo per esempio, i file .js 40, prende la macchina forte quasi 2 minuti. Tuttavia, il ritardo di Mayor è dovuto al fatto che java avvia una nuova istanza dell'app .jar per ogni script. C'è un modo come modificare lo script qui sotto per creare un solo processo e inviare/ricevere il contenuto .js più volte prima che il processo termini?Più azioni stdin/stdout durante una chiamata di processo
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;
}
posso vedere diverse opzioni, ma non so se è possibile e come farlo:
- Creare processo una volta e ricreare solo tubi per ogni file
- Forza java mantenere JIT-ed .jar in memoria per una più rapida ripetizione di esecuzione
- Se PHP non può farlo, è possibile utilizzare bridge (un altro file .exe che si avvierà velocemente ogni volta, trasferirà stdin/out e lo reindirizzerà a compilatore in esecuzione, se esiste qualcosa del genere anche