2012-11-30 16 views
5

समझाएं हम सिद्धांत 2 के साथ सिद्धांत 2 बनाम ज़ेंडफ्रेमवर्क 2 के साथ सिम्फनी 2 को बेंचमार्क कर रहे हैं।कृपया इस सिम्फनी 2 बनाम ज़ेंडफ्रेमवर्क 2 प्रदर्शन परिणाम

परीक्षण बेसलाइन बनाम के लिए एक नंगे ZF2 और SF2 हैलो वर्ल्ड में शामिल था। वही है लेकिन Doctrine2 के साथ एक साधारण वस्तु लोड हो रहा है। हमने एबी का इस्तेमाल किया और केवल प्रति अनुरोध और प्रति अनुरोध अनुरोधों को मापा।

बेयर फ्रेमवर्क परीक्षण के दौरान हैलो वर्ल्ड जेडएफ 2 ने एसएफ 2 की तुलना में लगभग 2x बेहतर प्रदर्शन किया।

हालांकि जब हमने एक ही परीक्षण किया लेकिन मिश्रण में सिद्धांत 2 जोड़ना परिणाम उलटा हुआ था। एसएफ 2 + डी 2 ने जेडएफ 2 + डी 2 के रूप में 2x तेज किया।

हमारे पास सिम्फनी 2 और ज़ेंडफ्रेमवर्क दोनों के लिए कौशल में घर है ताकि हम या तो जा सकें या हम राम उपयोग के बारे में चिंता न करें क्योंकि हम हमेशा अधिक रैम प्राप्त कर सकते हैं। लेकिन हम प्रदर्शन के बारे में परवाह करते हैं और हमें सर्वोत्तम टूल की मदद करने की आवश्यकता है।

कुछ विचार: - हमारा मानना ​​है S2 कैशिंग किसी प्रकार का कर रही है - हमारा मानना ​​है ZF2 Doctrine2 ORM मॉड्यूल कारण हो सकता है - हम के रूप में कैशिंग के लिए किस प्रकार के उत्पादन में उपयोग करने के लिए अनिश्चित हैं? एपीसी? XCache? आदि

Framework + Doctrine loading an object  
Concurrent:100/Connections: 1000  
    Resp. T ms Req. Sec 
ZF2  60 16 
S2   31 32 

Framework + Doctrine loading an object  
Concurrent: 25/Connections: 150  
    Resp. T ms Req. Sec 
ZF2   57 17 
S2   30 32 


====================== 

Framework Bare  
Concurrent: 100/Connections: 1000  
    Resp. T ms Req. Sec 
ZF2   10.5 94 
S2   15.3 65.36  

Framework Bare  
Concurrent: 25/Connections: 150  
    Resp. T ms Req. Sec 
ZF2   10 98 
S2   15.4 64 
+2

हैलो दुनिया कैसे प्रत्येक ढांचे बॉक्स से बाहर बर्ताव करता है और कंप्यूटर क्षमताओं और वांछित अपाचे विन्यास की एक प्रारंभिक माप प्राप्त करने के लिए एक आधार रेखा था। परीक्षण में कई अन्य परीक्षण शामिल थे लेकिन मैं बस सबसे प्रासंगिक का जिक्र कर रहा था। हमने कम, मध्य, उच्च मात्रा परीक्षण, समवर्ती, एकल, स्थानीय, रिमोट, हैलो दुनिया, 100, 1000, 10000 वस्तुओं, पुनरावृत्तियों इत्यादि आदि लोड किया ...ऐसा नहीं है कि हम परीक्षण के लिए दोनों ढांचे में एक संपूर्ण आवेदन बना सकते हैं ताकि हम विकास शुरू करने से पहले हम कर सकें। – smorhaim

उत्तर

7

डिफ़ॉल्ट रूप से, DoctrineORMModule एकीकरण सक्रिय कैशिंग का कोई प्रकार है।

'doctrine' => [ 
    'driver' => [ 
     'orm_default' => [ 
      'class' => 'Doctrine\ORM\Mapping\Driver\DriverChain', 
      'drivers' => [], 
      'cache' => 'apc', 
     ], 
    ], 
], 

डिफ़ॉल्ट संचय array है:

आप विन्यास में अपनी मैपिंग के लिए कैशिंग सेट करना होगा। अन्यथा, प्रत्येक अनुरोध पर एनोटेशन और किसी अन्य प्रकार की मैपिंग का विश्लेषण होगा।

चूंकि मैं ZF2-Doctrine2 एकीकरण का रखरखाव भी कर रहा हूं, इसलिए मुझे इस विषय के बारे में अधिक जानकारी प्राप्त करने में भी रुचि हो सकती है। क्या आपके पास दिखाने के लिए एक परीक्षण वातावरण है?

+0

ओह ठीक है .. हम इन सेटिंग्स के साथ फिर कोशिश करेंगे। हमने वास्तव में ZF2D2 का उपयोग करके एक छोटा सा एप्लीकेशन तैनात किया और यह इसके लिए आवंटित किए गए मुकाबले ज्यादा मेमोरी का उपभोग करके बहुत दुर्घटनाग्रस्त हो गया और हमें रोलबैक करना पड़ा ... इसलिए हम यह कर रहे हैं - दूसरी ओर हमारे पास एक विशाल डेटाबेस गहन है आवेदन (डीबी क्लस्टरर्ड प्रतिकृति बहु-मास्टर के साथ) अब 6 महीने के लिए उत्पादन में कम से कम उपयोग के साथ और यह बहुत अच्छी तरह से काम कर रहा है ... हाँ, हमारे पास एक परीक्षण वातावरण है। क्या आपके पास इसका परीक्षण करने के बारे में कोई अन्य सुझाव या विचार हैं? हम टेब को सेब के रूप में सेब के रूप में संभव बनाना चाहते हैं। – smorhaim

+0

सुझाव है कि "एक इकाई के साथ हैलो वर्ल्ड" के लिए कॉन्फ़िगरेशन साझा करना है। बेहतर अगर एक छोटे मॉड्यूल के रूप में :) – Ocramius

+0

इसके अलावा, कृपया ध्यान दें कि मेटाडेटा कैश के बिना कुछ भी तैनात करना शुद्ध पागलपन है। मेटाडाटा पार्सिंग में बहुत सारे प्रतिबिंब और कोड स्कैनिंग ऑपरेशन शामिल हैं। – Ocramius

0

ऑपोड (एपीसी) और डीबी अनुरोधों के उचित कैशिंग (उदाहरण के लिए मेमकेचे के साथ) के साथ, मैं कहूंगा कि सिन्फनी और ज़ेंड के बीच का अंतर मूंगफली होगा।

ऐसे छोटे पेर्फ अंतर के कारण कभी भी ढांचे का चयन न करें। ढांचे पर कैशिंग और डीबी सुधारों के साथ आपको और अधिक लाभ मिलेगा।

जब तक आप एक वित्त वास्तविक समय ऐप नहीं बना रहे हैं, या थोड़े, प्रतिक्रिया समय में 10 या 20ms अंतर कुछ भी नहीं है। वेब पेज के लिए औसत प्रतिक्रिया समय आमतौर पर 100 के एमएस में होता है!

इसके अलावा, "प्रति सेकंड अनुरोधों की संख्या" के लिए प्रतिक्रिया समय को परिवर्तित करने का कोई मतलब नहीं है, हालांकि मुझे पता है कि यह PHP मानक में सामान्य है। चूंकि आपका अपाचे अनुक्रमिक रूप से अनुरोधों का इलाज नहीं करेगा (एक अनुरोध 100% सीपीयू का उपभोग नहीं करता है), एक ही समय में आने वाले 5 अनुरोधों को एक अनुरोध के लिए 5x से कम समय में परोसा जाएगा।

रूप Ocramius कहा, तुम मेटाडाटा कैश को सक्रिय करना चाहिए:

$frontendOptions = array(
     'lifetime' => 7200, // seconds 
     'automatic_serialization' => true 
    ); 

    $backendOptions = array(
     'cache_dir' => APPLICATION_PATH_CACHE 
    ); 

    $this->cache = Zend_Cache::factory('Core', 
           'File',//Memcache is better 
           $frontendOptions, 
           $backendOptions); 

    //ADD a metadata cache for DB, important for perf 
    Zend_Db_Table_Abstract::setDefaultMetadataCache($this->cache); 
+0

आपके द्वारा चिपकाए गए उदाहरण में डॉक्टर 2 ओआरएम के साथ कुछ लेना देना नहीं है ... – Ocramius