At 18:07 06/08/2001, Andrei Zmievski wrote:
>On Mon, 06 Aug 2001, Zeev Suraski wrote:
> > BTW, there's no good reason not to load all of the extensions you may need
> > in all of your scripts from php.ini. Loading many extensions doesn't pose
> > a significant/noticeable load. Loading using dl() does.
>
>Can you explain why the difference matters?
Sure. dl() means that module_init is done multiple times. It also means
that module_shutdown is done multiple times, *and* has to take care of
cleaning up after the extension *completely*. That is, clean whatever
functions, classes, ini entries and callbacks this function may have
registered. Right now, only PHP functions and ini entries (to a degree)
are handled properly.
Drawbacks:
- It's slow. We encourage putting expensive operations into the
module_init, using dl() means they end up being done multiple times.
- Under Apache, it's even worse - since in addition to slowliness, it also
ends up consuming significantly more memory, since any memory the extension
allocates in module_init (e.g., the function entries it registers) cannot
be shared between the processes.
- It prevents the engine from optimizing function calls at compile time, by
looking at what kind of arguments these functions expect. This is left for
run-time, which results in significantly slower run-time performance.
- Literally, none of the extensions properly cleans up after itself,
leaving PHP in various degrees of instability. This rarely translates to
crashes, because people don't usually have a script in which they dl() and
then use a class, another script in which they use the class without
dl()'ing first, and call the 2nd script right after calling the 1st
one. Still, from a cleanliness perspective and in theory, it's bad.
- Another buglet resulting from this is the crash in debug mode, in case of
a memory leak inside an extension, which is reported in the bugs db. It's
no biggy, but also has no good solution.
I don't think the solution should be fixing all of the extensions to clean
up after themselves, when the only gain is having dl() work, and when using
dl() is almost always(*) significantly worse than simply adding the
extension to the php.ini file.
(*) I can't think of any case in which it isn't, but I'm staying humble :)
Zeev
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]