2013-02-23 67 views
5
// VERY BEGIN OF SCRIPT 
$_SERVER['HX_startTime'] = microtime(true); 

... 

// MY SHUTDOWN FUNCTION 
register_shutdown_function('HX_shutdownFn'); 
function HX_shutdownFn() 
{ 
    // formatTimeSpan is simple time to string conversion function 
    var_dump(formatTimeSpan(microtime(true) - $_SERVER['HX_startTime'])); 
} 


... 

// VERY END OF SCRIPT 
var_dump(formatTimeSpan(microtime(true) - $_SERVER['HX_startTime'])); 

मुझे 0.0005s मिला है। स्क्रिप्ट के अंत में और 1.1s। शटडाउन समारोह पर। क्या यह सामान्य है? जहां 1 सेकंड खो गया है?शटडाउन फ़ंक्शन से पहले PHP प्रोफाइलिंग देरी

स्क्रिप्ट शुद्ध php है, डाटाबेस कनेक्शन, आदि परीक्षण WAMP सर्वर (php वी 5.3.9, अपाचे 2.2.21)

+0

मैं इस रन वाला अपने आप को कर रहा हूँ और परिणाम देखें। –

+0

क्या होता है यदि आप स्पष्ट रूप से स्क्रिप्ट के अंत में 'निकास()' को कॉल करते हैं (अंतिम 'var_dump' के बाद)? –

+0

जहां आपके सत्र सहेजे गए हैं? शायद डीबी पर? आप सत्र हैंडलर को ओवरराइट करते हैं? – Oden

उत्तर

0

मैं वहाँ इस के लिए और अधिक कोड से तुम्हें तैनात है संभालने हूँ पर उपयोग नहीं करता है - उस स्थिति में यदि आप किसी भी आउटपुट को क्लाइंट में स्थानांतरित कर रहे हैं, तो भेजे जाने तक स्क्रिप्ट बंद नहीं होगी।

अतिरिक्त शट डाउन फ़ंक्शंस भी पंजीकृत हो सकते हैं जिन्हें आप टिप्पणियों के अनुसार अनजान हो सकते हैं।

यदि अन्य सभी विफल हो जाते हैं, तो इस स्क्रिप्ट को अलग करने का प्रयास करें (इसलिए केवल आपके द्वारा पोस्ट की गई लाइनें, ... को जो कुछ भी विकल्प नहीं देती हैं) और कमांड लाइन और आपके वेब सर्वर से इसे चलाने की तुलना करें। कुछ सर्वर-विशिष्ट ओवरहेड शामिल हो सकते हैं।

0

कुछ कनेक्शन बंद होने और क्लीनअप होने के बाद शट डाउन फ़ंक्शन सामान्य स्टैक से बाहर हो जाएगा। एक विलंब हमेशा इस कार्य की प्रकृति के रूप में होता है, जो आपने पहले किया है या इस फ़ंक्शन में करने का प्रयास करें।

मैनुअल नहीं बताता है लेकिन यह एक डिबगिंग फ़ंक्शन है और इसका भी इलाज किया जाना चाहिए।

सामान्य ऑपरेशन पर आपको इसका कभी भी उपयोग नहीं करना चाहिए। कोई फायदा नहीं है। आप स्क्रिप्टडाउन फ़ंक्शन को स्क्रिप्ट के अंत में मैन्युअल रूप से कॉल कर सकते हैं और अप्रत्याशित शट डाउन के लिए हैंडलर छोड़ सकते हैं।

0

जैसा कि अन्य ने उल्लेख किया है, अन्य शटडाउन फ़ंक्शन भी हो सकते हैं। इसके अतिरिक्त, वस्तुओं के विनाशक होते हैं जिन्हें वे दायरे से बाहर करते हैं (यदि वैश्विक दायरे में)।

आप एक्सडीबग मॉड्यूल () के साथ विशेष रूप से ट्रेस फ़ाइलों का उपयोग करते समय शानदार विवरण में देख सकते हैं। एक बार आपके पास XDebug इंस्टॉल और कॉन्फ़िगर हो जाने के बाद, आप अपने यूआरएल में XDEBUG_TRACE = 1 जोड़ सकते हैं और प्रत्येक पृष्ठ के लिए समय की जानकारी सहित, अपने पृष्ठ के पूरे निष्पादन के लिए एक पूर्ण कॉल स्टैक देख सकते हैं।

उपयुक्त विकल्पों के साथ, आप पैरामीटर के आवंटन, नाम और मान, मूल्य लौटाए गए, और असाइनमेंट भी देख सकते हैं। यह एक बहुत शक्तिशाली और उपयोगी उपकरण है।

ये सेटिंग्स मैं XDebug के लिए उपयोग कर रहे हैं:

xdebug.default_enable=1 
xdebug.profiler_enable=0 
xdebug.profiler_enable_trigger=1 
xdebug.profiler_append=On 
xdebug.auto_trace=Off 
xdebug.show_mem_delta=On 
xdebug.collect_return=On 
xdebug.collect_params=4 
xdebug.profiler_output_dir = /tmp 
xdebug.profiler_output_name = profile.%H.%t.%p 
xdebug.var_display_max_children = 999 
xdebug.var_display_max_data = 99999 
xdebug.var_display_max_depth = 100 
xdebug.remote_enable=1 
xdebug.cli_color=1 
xdebug.show_local_vars=1  
xdebug.show_mem_delta=1 
xdebug.collect_return=1 
xdebug.collect_assignments=1 
xdebug.collect_params=4 
xdebug.collect_includes=1 
xdebug.trace_enable_trigger=1 
xdebug.trace_output_dir=/tmp 
xdebug.trace_output_name=trace.%t.%R.%p