On Tue, Aug 28, 2012 at 3:49 AM, Adam Richardson <simples...@gmail.com> wrote:
> On Mon, Aug 27, 2012 at 6:54 PM, Matijn Woudt <tijn...@gmail.com> wrote:
>> On Mon, Aug 27, 2012 at 10:56 PM, Haluk Karamete
>> <halukkaram...@gmail.com> wrote:
>>>
>>> Now, the question is... should you use a global include that points to
>>> this library - across the board - so that ALL the pages ( including
>>> the 90% that do not need the library ) will get it, or should you
>>> selectively add that include reference only on the pages you need?
>>>
>>
>> Since searching for files is one of the most expensive (in time)
>> operations, you're probably best off with only a single PHP file.
>
> Maybe I misinterpreted the question, but I don't think I agree.
>
> If you have a 50K PHP file that's only needed in only 10% of the
> pages, then, when solely considering performance, that file should
> only be included on the 10% of the pages that actually use the file.
> Now, there are reasons where you might want to include the file
> globally (maintenance purposes, etc.) Loading the 50K of PHP code
> requires building up all of the associated infrastructure (zvals,
> etc.) for the user code (even if APC is used, the cached opcode/PHP
> bytecode still has to be parsed and built up for the user-defined
> classes and functions per request, even if they're unused), is
> certainly going to perform more slowly than selectively including the
> library on only the pages that need the library.
>
> Adam
>

First of all, I believe PHP is smart enough to not generate bytecode
for functions that are not used in the current file. Think about the
fact that you can write a function with errors, which will run fine
until you call the function. (except for syntax errors).

The speed difference between loading 5K file or 50K file (assuming
continuous blocks) is extremely small. If you split this library, you
would have PHP files that require you to load maybe 3 or 4 different
files to have all their functions. This would require 3 or 4 more file
searches, first the file needs to be located in the file table, then
on the disk. If you compare the required time for those operations,
they are enormous compared to time needed for a bigger file.
Just for the facts, if you're on a high end server drive (15000RPM
with 120MB/s throughput), you would have an average access time of
7ms. (rotational and seek time). Loading 5k with 120MB/s thereafter
only takes 0.04ms. 50k would take 0.4ms. That would save you 0.36ms if
a file only needs 1 include, if you need 2, that would cost you 6.68
ms. 3 would cost 13.72 ms, etc. With an 3.8GHz CPU, there are approx
4.000.000 clock cycles in 1ms, so in this case you would lose for only
loading 2 files instead of one, approx 27.250.000 clock cycles.. Think
about what PHP could do with all those clock cycles..

- Matijn

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to