Speed up startup time
authorRyan Dahl <ry@tinyclouds.org>
Wed, 27 Jul 2011 23:36:03 +0000 (16:36 -0700)
committerRyan Dahl <ry@tinyclouds.org>
Wed, 27 Jul 2011 23:36:05 +0000 (16:36 -0700)
Reverts 2a05fe784d.

src/node.js

index 64280e9..4ed4ba4 100644 (file)
   };
 
   startup.globalConsole = function() {
-    global.console = NativeModule.require('console');
+    global.__defineGetter__('console', function() {
+      return NativeModule.require('console');
+    });
   };
 
+
   startup._lazyConstants = null;
 
   startup.lazyConstants = function() {
   };
 
   startup.processStdio = function() {
-    var binding = process.binding('stdio'),
-        // FIXME Remove conditional when net is supported again on windows.
-        net = (process.platform !== "win32")
-              ? NativeModule.require('net_legacy') // fixme!
-              : undefined,
-        fs = NativeModule.require('fs'),
-        tty = NativeModule.require('tty');
-
-    // process.stdout
-
-    var fd = binding.stdoutFD;
-
-    if (binding.isatty(fd)) {
-      process.stdout = new tty.WriteStream(fd);
-    } else if (binding.isStdoutBlocking()) {
-      process.stdout = new fs.WriteStream(null, {fd: fd});
-    } else {
-      process.stdout = new net.Stream(fd);
-      // FIXME Should probably have an option in net.Stream to create a
-      // stream from an existing fd which is writable only. But for now
-      // we'll just add this hack and set the `readable` member to false.
-      // Test: ./node test/fixtures/echo.js < /etc/passwd
-      process.stdout.readable = false;
-    }
+    var stdout, stdin;
+
+    process.__defineGetter__('stdout', function() {
+      if (stdout) return stdout;
+
+      var binding = process.binding('stdio'),
+          // FIXME Remove conditional when net is supported again on windows.
+          net = (process.platform !== "win32")
+                ? NativeModule.require('net_legacy') // fixme!
+                : undefined,
+          fs = NativeModule.require('fs'),
+          tty = NativeModule.require('tty'),
+          fd = binding.stdoutFD;
+
+      if (binding.isatty(fd)) {
+        stdout = new tty.WriteStream(fd);
+      } else if (binding.isStdoutBlocking()) {
+        stdout = new fs.WriteStream(null, {fd: fd});
+      } else {
+        stdout = new net.Stream(fd);
+        // FIXME Should probably have an option in net.Stream to create a
+        // stream from an existing fd which is writable only. But for now
+        // we'll just add this hack and set the `readable` member to false.
+        // Test: ./node test/fixtures/echo.js < /etc/passwd
+        stdout.readable = false;
+      }
 
-    // process.stderr
+      return stdout;
+    });
 
     var stderr = process.stderr = new EventEmitter();
     stderr.writable = true;
     stderr.write = process.binding('stdio').writeError;
     stderr.end = stderr.destroy = stderr.destroySoon = function() { };
 
-    // process.stdin
+    process.__defineGetter__('stdin', function() {
+      if (stdin) return stdin;
 
-    var fd = binding.openStdin();
+      var binding = process.binding('stdio'),
+          net = NativeModule.require('net'),
+          fs = NativeModule.require('fs'),
+          tty = NativeModule.require('tty'),
+          fd = binding.openStdin();
 
-    if (binding.isatty(fd)) {
-      process.stdin = new tty.ReadStream(fd);
-    } else if (binding.isStdinBlocking()) {
-      process.stdin = new fs.ReadStream(null, {fd: fd});
-    } else {
-      process.stdin = new net.Stream(fd);
-      process.stdin.readable = true;
-    }
+      if (binding.isatty(fd)) {
+        stdin = new tty.ReadStream(fd);
+      } else if (binding.isStdinBlocking()) {
+        stdin = new fs.ReadStream(null, {fd: fd});
+      } else {
+        stdin = new net.Stream(fd);
+        stdin.readable = true;
+      }
+
+      return stdin;
+    });
 
     process.openStdin = function() {
       process.stdin.resume();