Re: [SMARTY-DEV] Replacing include with include_once in Smarty::fetch()?
| From: | boots | Date: | Thu, 16 Sep 2004 01:10:07 +0000 |
| Subject: | Re: [SMARTY-DEV] Replacing include with include_once in Smarty::fetch()? | ||
| References: | 1 | Groups: | php.smarty.dev |
| Request: | Send a blank email to php-smarty-dev+get-2569@lists.php.net to get a copy of this message | ||
This is an interesting idea...but are you using a PHP accelerator? That
should speed-up includes considerably. Further, the scenario you
describe sounds hardly typical and even if you are generating many
emails in bulk (hmmmmmmmmmm) I would assume that you wouldn't be facing
many concurrent users but rather simply having to sporadically endure a
longer running process. In other words, optimizing here seems
unwarranted. Never-the-less, I think it would be possible to simulate
such an effect as you describe using messju's really cool compiler
plugin that you can find in this thread
http://www.phpinsider.com/smarty-forum/viewtopic.php?t=291
(which is on
recursion, but you need not use it recursively).
I don't mean to be impolite, but I sure hope this isn't some spam
related thing ;)
xo boots
--- Matthias Pigulla <mp@webfactory.de> wrote:
> Dear smarty-developers,
>
> I'm extending a mailing application to allow for sending HTML emails.
> I
> use Smarty as template engine to build personalized e-mail messages
> (Smarty outputs html as well as text mime parts).
>
> Right now, I'm doing some performance tests and have to call
> $smarty->fetch a few thousand times (once for every personalized
> e-mail
> being sent), which is a very realistic - if not even small - setup
> for
> my purposes.
>
> The problem is that the include($_smarty_compile_path) around line
> 1258
> in Smarty.php makes up a huge share of total execution time and also
> consumes a lot of memory, although it just includes the same compiled
> template again and again. I could imagine that the PHP parser will
> analyze/precompile the file upon every inclusion? I'm not that
> familiar
> with PHP internals...
>
> As a quick experiment, I wrote a postfilter to add "<?php function
> foo(&$this) { ?>" and "<? } ?>" around the compiled template and
> changed
> Smarty::fetch() to "include_**once**(...); foo($this);".
>
> That way I could reduce the execution time spent in that code region
> to
> a fraction of 1/8th, memory consumption is reduced by about 3.5MB. I
> suppose that longer template code and more repetitions would even
> yield
> better improvements.
>
> I know that usually you would hardly fetch the same template
> repeatedly
> during the same request, so maybe that problem only occurs with my
> very
> specific setup.
>
> However, what do you think of automatically placing template code in
> a
> function body? The function name could be derived from the resource
> or
> file name. Note that this would require calling the function instead
> of
> just including the compiled template; however, as long as
> Smarty::fetch
> is the only section of code including templates, that should not be a
> problem.
>
> Any ideas what else might break? Possible benefits?
>
> Best regards,
> Matthias