On 11/26/18 2:14 PM, Nikita Popov wrote:
> On Mon, Nov 26, 2018 at 10:15 AM Zeev Suraski <vsura...@gmail.com> wrote:
>
>> On Sun, Nov 25, 2018 at 11:43 PM Marco Pivetta <ocram...@gmail.com> wrote:
>>
>>> Is that space rrrrrrreeeeeally a problem?
>>>
>>> Take the example ZF loader from the RFC: that barely makes any difference
>>> at all.
>>>
>>> A stronger reasoning for another language construct (that changes engine
>>> behaviour) is kinfa required.
>>>
>> The emails I've written on this thread already suggested that I tend to
>> agree.  I just spoke with Dmitry to better understand why he cared about so
>> little space, and turns out he didn't either - the rationale is different
>> and is pretty straightforward.
>>
>> The goal of declare(cache=0) would be to avoid persisting utility
>> functions/classes that have to do with a particular preload.php
>> implementation - so that they don't become a part of the app's memory
>> context and 'pollute' its scope.
>>
>> For example, you may implement a preload_file() function in preload.php, or
>> perhaps even a class Preload{} with some utility functions that will be
>> responsible for include()ing all the various files you want to preload into
>> your server. Currently, function preload_file() / class Preload would
>> become permanent parts of the app's scope - and pollute it to some degree.
>> They're sort of meta-code that has no business sticking around in the app's
>> memory space once the preloading stage is over.  With declare(cache=0) -
>> these will execute just as before, but won't be persisted into the
>> permanent scope (or into the OPcache at all, for that matter).
>>
>> There's no way to 'automatically' apply this 'do-not-cache', as in
>> different implementations - the preload.php file might actually include
>> classes/functions folks would actually want to persist, and in other cases
>> files include()ed by preload.php may in fact include functions/classes
>> people do not want to persist.  This has to be a manually-applied feature.
>>
>> As I mentioned in another reply on this thread, it's also a nice
>> runtime/configurationless alternative for the blacklist feature, in case
>> you want to prevent certain files from being cached for whatever reason
>> (that use case is unrelated to the preload capability).
>>
>> I'm personally fine with this being admitted w/o a full fledged RFC if
>> there are no objections.
>>
>> Zeev
>>
> It would make more sense to me to not cache anything from the preload
> script or anything it includes, and only make things for which
> opcache_compile_file() is called part of the preload. As I understand it,
> right now both included and compiled files will be preloaded.
>
> I think that would be a better solution than a declare annotation, because
> it would allow you to use arbitrary code in your preload script. You could
> make use of normal library code -- something that would be much harder if
> you had to hot-patch the library to include no-cache directives first.

In general, this solution should work.

Thanks. Dmitry.

Reply via email to