Perl Cd Bookshelf [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Perl Cd Bookshelf [Electronic resources] - نسخه متنی

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید

12.10. Speeding Module Loading with SelfLoader


12.10.1. Problem



You''d like to load a very large module
quickly.

12.10.2. Solution


Use the
SelfLoader module:

require Exporter;
require SelfLoader;
@ISA = qw(Exporter SelfLoader);
#
# other initialization or declarations here
#
_ _DATA_ _
sub abc { .... }
sub def { .... }

12.10.3. Discussion


When you load a module using require or
use, the entire module file must be read and
compiled (into internal parse trees, not into byte code or native
machine code) right then. For very large modules, this annoying delay
is unnecessary if you need only a few functions from a particular
file.

To address this problem, the SelfLoader module delays compilation of
each subroutine until that subroutine is actually called. SelfLoader
is easy to use: just place your module''s subroutines underneath the
_ _DATA_ _ marker so the compiler will ignore
them, use a require to pull in the SelfLoader, and
include SelfLoader in the module''s @ISA array.
That''s all there is to it. When your module is loaded, the SelfLoader
creates stub functions for all routines below _ _DATA_
_
. The first time a function gets called, the stub replaces
itself by first compiling the real function and then calling it.

There is one significant restriction on modules that employ the
SelfLoader (or the AutoLoader for that matter, described in Recipe 12.11). SelfLoaded or AutoLoaded subroutines
have no access to lexical variables in the file whose _
_DATA_ _
block they are in because they are compiled via
eval in an imported AUTOLOAD block. Such
dynamically generated subroutines are therefore compiled in the scope
of SelfLoader''s or AutoLoader''s AUTOLOAD.

Whether the SelfLoader helps or hinders performance depends on how
many subroutines the module has, how large they are, and whether they
are all called over the lifetime of the program or not.

You should initially develop and test your module without SelfLoader.
Commenting out the _ _DATA_ _ line will take care
of that, making those functions visible to the compiler.

12.10.4. See Also


The documentation for the standard module SelfLoader; Recipe 12.11

/ 875