PHP

2011-12-30 13 views
11

में अज्ञात फ़ंक्शन प्रदर्शन मैं PHP में कार्यात्मक प्रोग्रामिंग प्रतिमानों का उपयोग करना शुरू कर रहा हूं और सोच रहा था कि प्रदर्शन प्रभाव क्या हैं। कुछ googling बस ऐसा लगता है कि कुछ हैं। विशिष्ट होने के लिए, मैं जानना चाहता हूं:PHP

  • क्या वास्तव में कोई प्रदर्शन प्रभाव है या यह शहरी किंवदंती है?
  • प्रदर्शन प्रभाव क्या है (उम्मीद है कि किसी ने बेंचमार्क किया है)?
  • इस प्रभाव का कारण क्या है (यदि कोई मौजूद है)?
  • क्या यह निश्चित लागत है, या प्रति निष्पादन?

किसी भी संसाधनों तुम लोग बहुत सराहना होता जा :)

अग्रिम धन्यवाद

+0

यह उत्तर "php अज्ञात फ़ंक्शन प्रदर्शन" के लिए शीर्ष Google परिणाम है https://hackernoon.com/the-decline-of-stack-overflow-7cb69faa575d – jchook

उत्तर

17

मैं array_map() के साथ कुछ परीक्षण किया था, के साथ बुला:

  1. के नाम एक फ़ंक्शन (array_map('test', $myArray);)
  2. एक वेरिएबल जिसमें एक बंद (array_map($test, $myArray);)
  3. एक बंद (array_map(function{}(), $myArray);)

सभी तीन मामलों में, समारोह था खाली (function test(){})

1.000.000 आइटम ($myArray = range(1,1000000);) एक के लिए

Function: 0.693s 
Variable:0.703s 
Closure: 0.694s 

साथ एक सरणी के लिए परिणाम 10.000.000 वस्तुओं की सरणी, परिणाम यह हैं:

Function: 8.913s 
Variable: 8.169s 
Closure: 8.117s 

तो किसी भी मामले में हमारे पास बहुत अधिक उपर है, यदि कोई हो।

http://fabien.potencier.org/article/17/on-php-5-3-lambda-functions-and-closures पर चौथी टिप्पणी भी देखें, यह एक ही निष्कर्ष पर आता है। उस टिप्पणी में, आप यह भी देखते हैं कि create_function() काफी धीमा है।

+0

अच्छा उत्तर। ध्यान दें कि create_function को रन टाइम पर हमेशा php को पार्स करना चाहिए ताकि यदि आप ऑपोड कैशिंग का उपयोग करते हैं तो आप बड़े समय को खो देंगे। – symcbean

+0

लेकिन पूरी तरह से गैर-कार्यात्मक समकक्ष 'foreach ($ myArray $ foo के रूप में) {} 'के बारे में क्या? :) – deceze

+1

बस 10.000.000 परीक्षण किया: 4.780s मुझे उम्मीद है कि यह एक * बिट * तेज हो, लेकिन यह एक * बहुत * है। (हालांकि अन्य संस्करणों के कुछ त्वरित पुन: रनों का सुझाव है कि वे अब थोड़ा तेज हैं, लेकिन उप-दूसरे बॉलपार्क में।) चीजों को निष्पक्ष बनाने के लिए, मैंने 'foreach ($ AS $ i) किया {test ($ i);} ', क्योंकि वह' array_map() कॉल के समान 'करता है'। –