Benjamin Eberlei wrote:
> hello,
> 
> you might want to install pecl-xdebug extension to PHP and enable profiling.
> You can then use Webgrind or KCachegrind to show you which functions and 
> classes use the most processing power in your appliaction.
> 
> Have you installed APC or eAccelerator?

Yes APC is install and heavily use :-)

I've ( due to ZendStudio ) the zend_debugger installed and also the xdebug.

Did you have a quick way to generate a trace I can use with KCachegrind ?
It would help me to confirm or infirm what the ZendStudio Profiler give me.


> 
> On Thursday 23 October 2008 22:04:40 Bruno Friedmann wrote:
>> Follow at the end
>>
>> Matthew Weier O'Phinney wrote:
>>> -- Bruno Friedmann <[EMAIL PROTECTED]> wrote
>>>
>>> (on Tuesday, 21 October 2008, 09:45 PM +0200):
>>>> Matthew Weier O'Phinney wrote:
>>>>> -- Bruno Friedmann <[EMAIL PROTECTED]> wrote
>>>>>
>>>>> (on Tuesday, 21 October 2008, 06:56 AM +0200):
>>>>>> Matthew Weier O'Phinney wrote:
>>>>>>> -- Bruno Friedmann <[EMAIL PROTECTED]> wrote
>>>>>>>
>>>>>>> (on Monday, 20 October 2008, 07:00 AM +0200):
>>>>>>>> Matthew Weier O'Phinney wrote:
>>>>>>>>> -- Bruno Friedmann <[EMAIL PROTECTED]> wrote
>>>>>>>>>
>>>>>>>>> (on Sunday, 19 October 2008, 07:30 PM +0200):
>>>>>>>>>> With the help of ZendStudio, I'm trying to understand why on one
>>>>>>>>>> application I've got 25/30 req/s and on the second one I've only a
>>>>>>>>>> 5/5.50 req (1.6.2) or a 7/8.2rqs ( 1.7.0 notice the little change
>>>>>>>>>> ) ( a simple html file is giving a 385rqs and a 404 error page
>>>>>>>>>> give around a 280/320rqs )
>>>>>>>>>>
>>>>>>>>>> The profile result give me a 59% time consume by Layout ( which I
>>>>>>>>>> doesn't have on the speed app ) and another 12.5% to Translate
>>>>>>>>>> ( ok I'm using tmx which is not the most speedy thing )
>>>>>>>>> You can save me a little time and effort here by attaching the
>>>>>>>>> layout script you use, as well as a count of the number of times
>>>>>>>>> calls are made to translate items. With that information, I can add
>>>>>>>>> some information to our performance and profiling test suite.
>>>>>>>> Quickly I'm calling the index controlleur / index view with layout.
>>>>>>>> html/index.php
>>>>>>>> -> ZFApplication ( which is the real bootstrap )
>>>>>>>> -> app/Module/Default
>>>>>>>> -> /Controller/indexController
>>>>>>>>        -> Action indexAction
>>>>>>>> -> Scripts/index/index.phtml
>>>>>>>>
>>>>>>>> Layout contain
>>>>>>>>
>>>>>>>> |-- common
>>>>>>>> |
>>>>>>>> |   |-- footer.phtml
>>>>>>>> |   |-- header.phtml
>>>>>>>> |   |-- help.phtml
>>>>>>>> |
>>>>>>>> |   `-- menu.phtml
>>>>>>>>
>>>>>>>> `-- main.phtml
>>>>>>>>
>>>>>>>> For the index view there's a test
>>>>>>>> if ( !Zend_Auth::getInstance()-> hasIdentity() ):
>>>>>>>>     // Render login form or logged
>>>>>>>>     echo $this-> action(null, 'login');
>>>>>>>>    // If we are anonymous
>>>>>>>>
>>>>>>>> ----------------------------------------------
>>>>>>>> For translation I've a global function __($str) which translate
>>>>>>>> strings.
>>>>>>>>
>>>>>>>> For the whole projet there's a 945 call to it.
>>>>>>>>
>>>>>>>> For the index call profiled it's about 24 calls.
>>>>>>> The above may very well be the culprit, but I'll write a test just to
>>>>>>> see.
>>>>>>>
>>>>>>> Can you give the contents of your layout files? I'm curious to see
>>>>>>> how you're pulling in content -- if you're using partial(), action(),
>>>>>>> or simply render(). I've already identified a bottleneck in partial()
>>>>>>> that I'll be working on. Additionally, I typically recommend against
>>>>>>> action() because I know already that internally it's expensive; it's
>>>>>>> cheaper to create a helper that pulls from the model directly.
>>>>>> If what you say is correct, I'm in trouble :-)
>>>>>>
>>>>>> You will see why in the source attached ...
>>>>>>
>>>>>> So I'm waiting your confirmation, and eventually other
>>>>>> recommandations. There's some refactoring/rewritting in the air
>>>>>> tonight :-)
>>>>> The only reason to use partial() instead of render() is when you
>>>>> absolutely need a clean variable scope for the rendered view script. In
>>>>> your case, I'd recommend simply substituting render() for each time you
>>>>> use partial(); this will definitely improve speed.
>>>> Ok this remark make sense ... I think it should find it's place as
>>>> remark in docs.
>>>>
>>>>> I see you're using action() to pull in a login form. Since you won't be
>>>>> worried about pre-populated values or validation, it may make more
>>>>> sense here to either instantiate the form object directly and display
>>>>> it, or create a view helper that does this.
>>>> To be honest, I'm actually in a process to limits the number of view
>>>> helper to a quantic's number.
>>>> I feel I'm on the wrong way. Too strict perhaps in the logic approach
>>>> There a login controller in which the login form & logic reside so I'm
>>>> calling it because layout permit this,
>>>> leaving all login to it's own controller/model/form/view system.
>>> Makes sense. Just remember that this is an expensive operation. You may
>>> want to consider a view helper that calls the action() helper, but
>>> caches the results.
>>>
>>>>> See if the above changes help your performance. If not, the next
>>>>> thing I'd suggest trying to move to gettext for your translations to
>>>>> see if that speeds things up. If so, you may be able to develop
>>>>> using TMX, and write a build script that converts to gettext later.
>>>> I will give them a try on Thursday and Friday and keep you inform of
>>>> the result.
>>>>
>>>> In your Guru's opinion, shall I try the svn version of 1.7 or could I
>>>> stay with the PR release ?
>>> I'd go with trunk; there are changes going in daily improving the
>>> release, and we'll be doing at least one bug hunting event before the
>>> release. (1.7 will be branched from trunk prior to the first RC)
>> Ok I've upgrade the 1.7 to svn checkout.
>>
>> I've transform all my main.phtml layout to not use this->partial / action
>> or render In the tested page I also kill the $this->action('login');
>>
>> With the same condition I obtain a 8 rqs
>> and a when only this->action login a 6.5 rqs
>>
>> This disappoint me a bit ...
>> The server could respond a 434 rqs for a phpinfo :-)
>> I know this absolutely not the same ...
>>
>> The old version ( php4 without oo & pdo ) answer at 427 rqs
>>
>> A ZF application which doesn't use layout & translate & acl
>> give me a 13.80rqs ....
>>
>> [some fondue later ... :-) ]
>> This is frustating ... I've made some new profiling which indicate clearly
>> that one of the bad guy are Logger. (I've installed and use FirePhpBug
>> which is initialize by
>>     private function initializeLogger()
>>     {
>>      // TODO : should only be present in dev env
>>      $logger = new Zend_Log();
>>      $writer = new Zend_Log_Writer_Firebug();
>>      $logger->addWriter($writer);
>>      Zend_Registry::set('logger',$logger);
>>      $writer->setEnabled(true);
>>
>>     }
>>
>> When I comment this one in bootstrap the rate rise to a 12.01rqs which is
>> fine compared to the other application which have many less component
>> activated.
>> ( even with this->action() enabled and all $this->render enabled in
>> main.phtml
>>
>> So the lesson : never try to log or monitor an application or use non
>> official plugin :-))) (at least for the momemt)
>>
>> If performance are concern for the 1.7.x release someone should take a look
>> at Zend_Log(),Zend_Log_Writer_Firebug() plugin I will try to report all of
>> this on Jira for this plugin.
>>
>> So what can we do next to obtain the near phpinfo() 400rqs rate ? :-))))))
>>
>>
>> Thanks for you help, One time again I've learned many things ...
> 
> 
> 


-- 

     Bruno Friedmann

Ioda-Net Sàrl
  2830 Vellerat - Switzerland

  Tél : ++41 32 435 7171
  Fax : ++41 32 435 7172
  gsm : ++41 78 802 6760
  www.ioda-net.ch

 Centre de Formation et de Coaching En Ligne
 www.cfcel.com

Reply via email to