मैं PHP का उपयोग करके स्वचालित रूप से जावास्क्रिप्ट संकलित करने के लिए Google क्लोजर कंपाइलर का उपयोग करता हूं (इसे ऐसा करने के लिए आवश्यक है - PHP में, विंडोज मशीन पर कोई सुरक्षा सीमा नहीं है)। मैंने सरल PHP स्क्रिप्ट लिखी जो प्रक्रिया को कॉल करता है, stdin को .js सामग्री पास करता है और stdout के माध्यम से recompiled .js प्राप्त करता है। यह ठीक काम करता है, समस्या यह है कि जब मैं 40 .js फ़ाइलों के लिए संकलन करता हूं, तो यह लगभग 2 मिनट तक मजबूत मशीन लेता है। हालांकि, महापौर देरी इसलिए है क्योंकि जावा प्रत्येक स्क्रिप्ट के लिए .jar ऐप का नया उदाहरण शुरू करता है। प्रक्रिया को समाप्त करने से पहले केवल एक ही प्रक्रिया बनाने और प्राप्त करने/प्राप्त करने के लिए .js सामग्री को भेजने के लिए नीचे स्क्रिप्ट को संशोधित करने का कोई तरीका है?एक प्रक्रिया कॉल के दौरान एकाधिक stdin/stdout क्रियाएं
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;
}
मैं कई विकल्प देख सकते हैं, लेकिन अगर यह संभव हो सकता है और यह कैसे करना है पता नहीं है:
- प्रक्रिया हर फ़ाइल
- फोर्स जावा के लिए एक बार बनाएँ और केवल पाइप पुन: बहुत तेजी से पुनः निष्पादन के लिए जेआईटी-एड .jar को स्मृति में रखें
- यदि PHP ऐसा नहीं कर सकता है, तो पुल का उपयोग करना संभव है (एक और .exe फ़ाइल जो हर बार तेज़ी से शुरू हो जाएगी, stdin/out को ट्रांसफर करेगी और इसे रीडायरेक्ट करेगी चलने वाला कंपाइलर; अगर ऐसा कुछ भी मौजूद है)