[Jifty-commit] r7491 - in jifty/trunk: lib/Jifty lib/Jifty/Script

Jifty commits jifty-commit at lists.jifty.org
Fri Sep 18 01:12:26 EDT 2009


Author: sunnavy
Date: Fri Sep 18 01:12:25 2009
New Revision: 7491

Modified:
   jifty/trunk/bin/jifty
   jifty/trunk/lib/Jifty/Script.pm
   jifty/trunk/lib/Jifty/Script/Help.pm

Log:
hack to speed up "jifty help" about 4.5x faster

Modified: jifty/trunk/bin/jifty
==============================================================================
--- jifty/trunk/bin/jifty	(original)
+++ jifty/trunk/bin/jifty	Fri Sep 18 01:12:25 2009
@@ -1,16 +1,39 @@
 #!/usr/bin/env perl
 use warnings;
 use strict;
-use UNIVERSAL::require;
 
 BEGIN {
-    Jifty::Util->require or die $UNIVERSAL::require::ERROR;
-    my $root = Jifty::Util->app_root(quiet => 1);
-    unshift @INC, "$root/lib" if ($root);
+
+    # `use Jifty::Everything' is time-consuming,
+    # when people just want to read the help message, waiting sucks.
+    # on my machine, this is 4.5x faster or so, from 0.7s to 0.15s
+    require Jifty::Script;
+    if (
+        @ARGV == 0
+        || ( $ARGV[0] eq 'help' )
+        && (
+            @ARGV == 1 || grep { lc $ARGV[1] eq lc $_ } @Jifty::Script::CORE_CMDS,
+            @Jifty::Script::CORE_MAN,
+        )
+      )
+    {
+
+   # only_core is to tell Jifty::Script not to use Jifty::Everything to find all
+   # the cmds
+        Jifty::Script->import( only_core => 1 );
+    }
+    else {
+        no warnings 'once';
+        require UNIVERSAL::require;
+        Jifty::Util->require or die $UNIVERSAL::require::ERROR;
+        my $root = Jifty::Util->app_root( quiet => 1 );
+        unshift @INC, "$root/lib" if ($root);
+
+        require Jifty;
+        Jifty::Script->import;
+    }
 }
 
-use Jifty;
-use Jifty::Script;
 
 local $SIG{INT} = sub { warn "Stopped\n"; exit; };
 Jifty::Script->dispatch();

Modified: jifty/trunk/lib/Jifty/Script.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Script.pm	(original)
+++ jifty/trunk/lib/Jifty/Script.pm	Fri Sep 18 01:12:25 2009
@@ -2,10 +2,21 @@
 use App::CLI;
 use base qw/App::CLI App::CLI::Command Jifty::Object/;
 
-use Jifty::Everything;
-Jifty::Everything->plugin_commands;
 use Pod::Usage;
 
+our @CORE_CMDS = qw/action adopt app env fastcgi help modperl2 model
+  plugin po schema script server/;
+our @CORE_MAN = qw/
+  AccessControl         Glossary              Tutorial
+  AccessControl_zhtw    JavaScript            TutorialRest
+  Actions               JavaScript_zhtw       Tutorial_de
+  Actions_zhtw          Models                Tutorial_ja
+  Continuations         ObjectModel           Tutorial_zhtw
+  Cookbook              PageRegions           Upgrading
+  Deploying             Preload               UsingCSSandJS
+  Deploying_zhtw        RequestHandling       jQueryMigrationGuide
+  FAQ                   Style                /;
+
 =head1 NAME
 
 Jifty::Script - Base class for all bin/jifty commands
@@ -105,4 +116,13 @@
     ) if $self->{man};
 }
 
+sub import {
+    my $self = shift;
+    my %args = @_;
+    unless ( $args{only_core} ) {
+        require Jifty::Everything;
+        Jifty::Everything->plugin_commands;
+    }
+}
+
 1;

Modified: jifty/trunk/lib/Jifty/Script/Help.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Script/Help.pm	(original)
+++ jifty/trunk/lib/Jifty/Script/Help.pm	Fri Sep 18 01:12:25 2009
@@ -3,6 +3,37 @@
 use base qw( App::CLI::Command::Help Jifty::Script );
 use File::Find qw(find);
 
+sub run {
+    my $self   = shift;
+    my @topics = @_;
+
+    push @topics, 'commands' unless (@topics);
+
+    foreach my $topic (@topics) {
+        if ( $topic eq 'commands' ) {
+            $self->brief_usage($_) for $self->app->files;
+        }
+        elsif ( grep { $topic eq $_ } @Jifty::Script::CORE_CMDS ) {
+            # to find usage of a CMD, App::CLI will require the CMD.pm first
+            # that's too heavy for us because some CMD.pm `use Jifty', 
+            # which `use Jifty::Everything'!
+            my $file = $INC{'Jifty/Script/Help.pm'};
+            $file =~ s/Help(?=\.pm$)/ucfirst $topic/e;
+
+            open my $fh, '<:utf8', $file or die $!;
+            require Pod::Simple::Text;
+            my $parser = Pod::Simple::Text->new;
+            my $buf;
+            $parser->output_string( \$buf );
+            $parser->parse_file($fh);
+            print $self->loc_text($buf);
+        }
+        else {
+            $self->SUPER::run($topic);
+        }
+    }
+}
+
 sub help_base {
     return "Jifty::Manual";
 }


More information about the Jifty-commit mailing list