2012-04-18 17 views
5

मैं symfony2 का उपयोग कर अपने आवेदन के लिए एक स्टेटस पेज बनाना चाहता हूं जहां मैं विशेष अनुरोध के निष्पादन समय (अन्य डेटा के साथ) मुद्रित करना चाहता हूं। मैं ऐसा करने के लिए वैसे भी नहीं मिला।symfony2 - निष्पादन समय प्राप्त करें

मुझे पता है कि मैं के साथ एक कोड भाग के निष्पादन के समय को ट्रैक कर सकते हैं:

$starttime = microtime(); 
// do something 
$duration = microtime() - $starttime; 

लेकिन स्पष्ट कारण के लिए मैं नियंत्रक में रख नहीं कर सकते हैं, के रूप में पूरे बूटस्ट्रैप होगा ट्रैक नहीं किया। टेम्पलेट को भी प्रस्तुत करना शामिल नहीं होगा।

क्या स्क्रिप्ट के कुल निष्पादन समय के लिए जितना संभव हो सके पास करने का कोई तरीका है?

+0

अंतर्निहित प्रोफाइलिंग सिस्टम के बारे में क्या? इसमें 2.1 में और भी शानदार विशेषताएं होंगी, जैसे एक विस्तृत समय ग्राफ, कुछ हद तक फायरबग और वेबकिट के ग्राफ के समान। – gilden

+0

मैं इसे एक विशेष पृष्ठ पर उत्पादन वातावरण में करना चाहता हूं। अभी मुझे अंतर्दृष्टि नहीं है कि प्रोफाइलर कैसे काम करता है। क्या मैं इसे किसी भी तरह से "सक्रिय" कर सकता हूं जब मैं एक कार्यवाही करता हूं और अन्य सभी कार्यों पर कोई प्रदर्शन प्रभाव नहीं डालता? – Sgoettschkes

+0

एक उत्पादन सर्वर पर प्रोफाइलिंग के लिए, आप शायद xhprof में देखना चाहते हैं ... – greg0ire

उत्तर

8

मुझे एक ऐसा तरीका मिला जो मुझे लगता है कि हमारे उपयोग के मामले के लिए ठीक है।

<?php 
/** 
* This file is only used for doing realtime performance measurement 
* Right now only the microtime is calculated, but in the future the 
* xhproof module could be used: http://de2.php.net/manual/en/book.xhprof.php 
* 
* MAKE SURE TO NOT USE THIS FILE IN PRODUCTION FOR OTHER STUFF THAN REAL TIME 
* PERFORMANCE MEASUREMENT 
*/ 

$GLOBALS['PerformanceTwigExtensionMicrotime'] = microtime(true); 

require_once __DIR__.'/app.php'; 

मैं भी एक टहनी विस्तार जो वैश्विक उपयोग करता है और बीता हुआ समय की गणना करता है पंजीकृत:

<?php 

namespace Acme\DemoBundle\Extension; 

class PerformanceTwigExtension extends \Twig_Extension { 

    public function getFunctions() { 
     return array(
      'performance_exectime' => new \Twig_Function_Method($this, 'getExecTime') 
     ); 
    } 

    public function getExecTime() { 
     if (!isset($GLOBALS['PerformanceTwigExtensionMicrotime'])) { 
      return 0; 
     } 

     $durationInMilliseconds = (microtime(true) - $GLOBALS['PerformanceTwigExtensionMicrotime']) * 1000; 
     return number_format($durationInMilliseconds, 3, '.', ''); 
    } 

    public function getName() { 
     return "performance_extension"; 
    } 

} 

जब हम चाहते हैं मैं वेब फ़ोल्डर में एक नया फ़ाइल performance.php जो इस तरह दिखता बनाया कुछ प्रदर्शन माप करने के लिए, हम बस performance.php का उपयोग कर सकते हैं। टेम्पलेट फ़ंक्शन को कॉल करने के लिए और फिर निष्पादन समय प्रदर्शित कर सकते हैं:

{{ performance_exectime() }} 

यह आउटपुट 0 यदि प्रारंभ समय सेट नहीं है (उदाहरण के लिए जब सामान्य app.php प्रयोग किया जाता है), तो यह किसी भी मामले में उपयोग करने के लिए सुरक्षित है । दूसरी ओर, यदि कोई एंट्री पॉइंट के रूप में performance.php का उपयोग करने का निर्णय लेता है, तो इसे कुछ भी तोड़ना नहीं चाहिए क्योंकि केवल एक वैश्विक चर अलग है।

+0

यह एक अच्छा विचार है! (इसे विकी प्रविष्टि में बदलने पर विचार करें।) –

1

पीएचपी 5.4 के बाद से हम कर सकते हैं microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']

Symfony2 में उपयोग कैसे करें:

src/AppBundle/Twig/AppExtension.php

<?php 

namespace AppBundle\Twig; 

class AppExtension extends \Twig_Extension 
{ 
    public function getFunctions() 
    { 
     return [ 
      new \Twig_SimpleFunction('request_time', [$this, 'requestTime'], ['is_safe' => ['html']]), 
     ]; 
    } 

    public function requestTime($decimals = 3) 
    { 
     return number_format(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'], $decimals); 
    } 

    public function getName() 
    { 
     return 'app_extension'; 
    } 
} 

ध्यान में रखते हुए:

<footer class="footer"> 
    <div class="container"> 
     <p class="text-muted">{{ request_time() }}s</p> 
    </div> 
</footer> 

में:

services: 
    app.twig_extension: 
     class: AppBundle\Twig\AppExtension 
     public: false 
     tags: 
      - { name: twig.extension } 
संबंधित मुद्दे