
PHP के लिए संकलित MVC फ्रेमवर्क बनाना एक से अधिक बार कोडर्स के दिमाग में आया।
इस दृष्टिकोण के लाभ:
- उच्च प्रदर्शन
- कम फ़ाइल सिस्टम लोड
- कम मेमोरी खपत (मजबूत टाइपिंग के साथ)
- व्याख्या के बिना आंशिक डेटा प्रसंस्करण
और अपने आप में कोई कम स्पष्ट नुकसान नहीं:
- यदि आप C को नहीं जानते हैं, तो आप पूरी तरह से डेवलपर्स पर निर्भर हैं
- परियोजना को किसी भी समय उड़ा दिया जा सकता है
- वास्तुकला के आधार पर, आपको अभी भी कुछ मॉड्यूल खुद लिखना होगा, जो लाभ को कम करता है
इस लेख में मैं एक संकलित PHP MVC फ्रेमवर्क बनाने के लिए एक और प्रयास शुरू करने की कोशिश करूंगा।
परिचित
मैं खुद एक तेज, विश्वसनीय और सक्षम ढांचे की तलाश में हूं। विदेशी मंचों और ब्लॉगों के बारे में घूमते हुए, मैं एक दिलचस्प बेंचमार्क पर आया, जहां "हैलो वर्ल्ड!" के लिए एक रूपरेखा तैयार की गई, जिसमें कई बार मशहूर हस्तियों ने पॉट-बेल्ड किया।

मैं इस तरह से नहीं गुजर सकता था और यह पता लगाने लगा कि यह कैसे काम करता है और विकसित होता है।
प्रोजेक्ट एक साल से कम पुराना है। गितुब पर पहली बार 10 जनवरी 2012 को प्रतिबद्ध है। और हां, यह एक खुला स्रोत परियोजना है। जैसा कि मैंने इसे समझा, अब 3 लोग कमोबेश इसमें लगे हुए हैं।
लेखक लोगों को इसके प्रदर्शन के बारे में सोचने, मानकों का पालन करने और उपयोग किए गए अधिकांश तरीकों तक पहुंच देने के बिना कोड लिखने का अवसर देने की कोशिश करते हैं, जो सर्वर की शुरुआत से मेमोरी में लोड होते हैं।
उदाहरण
फ्रेमवर्क सीखने का सबसे अच्छा तरीका समानांतर में प्रलेखन का अध्ययन करते समय उस पर कुछ करना है।
मैंने
फाल्कन की कुछ विशेषताओं को
दिखाते हुए एक 3-पृष्ठ एप्लिकेशन
बनाया , अर्थात्:
- मार्ग
- डेटाबेस के साथ काम करें, आंतरिक भाषा PHQL में
- घटनाओं के साथ काम करें
- डेटा फ़िल्टरिंग
- कैशिंग
- DI (निर्भरता इंजेक्शन)
- बिल्ट-इन वोल्ट टेम्पलेट इंजन की विशेषताएं
इसके अलावा, डेवलपर्स बहुत अधिक कहते हैं:
- ODM - दस्तावेज़-उन्मुख डेटाबेस के साथ काम करते हैं
- बहुभाषी
- कंसोल या वेब चेहरे से स्वचालित रूप से CRUD एप्लिकेशन बनाएं
- कई लोकप्रिय टेम्पलेट इंजनों के लिए समर्थन
- सूक्ष्म अनुप्रयोग (एक रीस्ट एपीआई बनाने के लिए)
- किसी भी कॉन्फ़िगरेशन का लकड़हारा बनाना
- आग और पकड़ने के साथ अपने इवेंट मैनेजर बनाना
- टेम्पलेट्स के लिए अंतर्निहित HTML टैग हैंडलर
- Nemespace और बहु-प्रतिरूपकता के लिए समर्थन
- सत्र और फ्लैश संदेशों को संभालना
- एसीएल
परियोजना पदानुक्रम:
xmpl /
ऐप्स /
एप्लिकेशन / कॉन्फ़िगरेशन /
एप्लिकेशन / नियंत्रक /
ऐप / मॉडल /
एप्लिकेशन / विचार /
एप्लिकेशन / मेरा /
सार्वजनिक /
सार्वजनिक / img /
सार्वजनिक / सीएसएस /
सार्वजनिक / जेएस /
सभी कोड एप्लिकेशन /public/index.php को इनिशियलाइज़ करते हुए, पथ / ऐप्स / के साथ स्थित होंगे। आखिरी फ़ाइल पर, वास्तव में, आपको
अपाचे (.htaccess in / / and / public / फ़ोल्डरों में) या
nginx के माध्यम से कोई भी अप्रत्यक्ष पृष्ठों पर रीडायरेक्ट करने की आवश्यकता नहीं है।
प्रारंभ:
बिगाड़ने के तहत संक्षेप में प्रारंभिक के बारे में। अधिकांश को स्वचालित रूप से जोड़ा जा सकता है, जैसे:
$di = new Phalcon\DI\FactoryDefault();
नियंत्रक और उनकी कक्षाएं:
अब, आपके आवेदन में मानक राउटिंग
/ बेसयूरी / कंट्रोलरनेम / एक्शननाम / उपलब्ध है , विधियाँ जुड़ी हुई हैं, जो
डि के माध्यम से नियंत्रकों को यह
$-> कैश, $ यह-> डिस्पैचर, $ यह-> डीबी ...
आप अपने
एप्लिकेशन / My / फ़ोल्डर में स्थित अपनी कक्षाओं को भी कॉल कर सकते हैं
ViewManager वर्ग
दृश्य द्वारा उत्पन्न सभी घटनाओं को प्राप्त करेगा। हितों से
पहले । इसमें, हम क्लास और एक्शन के नाम वाले व्यू वेरिएबल्स में पास होंगे।
हम BaseController क्लास भी बनाएंगे class BaseController extends \Phalcon\Mvc\Controller { public function initialize() { Phalcon\Tag::prependTitle('Example | '); } }
class IndexController extends BaseController { public function initialize() {
यह मानक वर्ग को विरासत में मिला है। हमारे नियंत्रकों को पहले से ही
बेसकंट्रोलर विरासत में मिलेगा और HTML शीर्षक टैग के लिए एक उपसर्ग मिलेगा।
राय
फाल्कन एक काफी सुविधाजनक टेम्पलेट विधि प्रदान करता है जहां एक पदानुक्रम मौजूद है।
टेम्पलेट
/ एप्लिकेशन / दृश्य / में संग्रहीत किए जाते हैं
रूट टेम्पलेट /apps/views/index.phtm को सभी नियंत्रकों द्वारा प्रदान किया जाता है, सिवाय उन लोगों के जहां एक अलग रास्ता स्पष्ट रूप से सेट किया गया है।
इस फ़ाइल में आगे पदानुक्रम पथ हो सकता है:
{{ content() }}
मैंने अंतर्निहित टेम्पलेट इंजन के सिंटैक्स का उपयोग किया। अन्य इंजनों के भी अपने स्वयं के एनालॉग होते हैं।
यह फ़ंक्शन पथ के साथ स्थित निम्न पैटर्न को कॉल करता है:
/apps/view/layer/ControllerName.phtmlवास्तव में, एक विशिष्ट नियंत्रक के लिए एक विशेष डिज़ाइन सेट करना, जैसा कि मैंने अपने आवेदन में किया था। आप इसमें
सामग्री () भी कॉल कर सकते हैं, जिससे
/apps/views/ControllerName/ActionName.phpml टेम्पलेट
लोड हो रहा हैटेम्प्लेट में, आप अन्य टेम्प्लेट लोड कर सकते हैं, पूर्वनिर्धारित ब्लॉकों को बदल सकते हैं, उपयोगकर्ता-परिभाषित और इंजन-पूर्वनिर्धारित फ़ंक्शन को कॉल कर सकते हैं और मॉडल विधियों का उपयोग कर सकते हैं।
केवल वोल्ट उनकी युवा परियोजना है, इसलिए कई कार्य इसमें नहीं हैं, लेकिन उन्हें आगामी रिलीज के लिए योजनाबद्ध किया गया है।
बॉक्स से बाहर,
स्लिम ,
स्मार्ट ,
मूंछों का समर्थन करें ...
बॉक्स में से संकलित टेम्पलेट्स को संकलित करने की क्षमता है, केवल 0.6.0 तक के संस्करणों में, एक बग है जो कैश को शून्य करता है और एक खाली पृष्ठ का उत्पादन करता है।
आदर्श
डेटाबेस का कनेक्शन पीडीओ का उपयोग करके किया जाता है। डेटाबेस के साथ काम करने के 2 कार्यान्वयन हैं, एक ऑब्जेक्ट-ओरिएंटेड पथ और PHQL, आपका अपना छद्म SQL स्ट्रिंग हैंडलर।
दुर्भाग्य से, पहला केवल काफी सरल प्रश्नों के लिए उपयुक्त है, और दूसरा उन लोगों के लिए मुश्किल होगा जो पहले उपयोग किए जाते हैं।
एप्लिकेशन मॉडल class Poll extends Phalcon\Mvc\Model {
मॉडल में, मेरे लिए, मुझे कुछ भी नया और दिलचस्प नहीं मिला, सिवाय इसके कि विभिन्न स्थानों में मेटा डेटा का भंडारण। वे पूरी तरह से पूर्व निर्धारित भी हो सकते हैं।
कमियों
मुझे पूरी तरह से सब कुछ समझ में नहीं आया कि यह ढांचा क्या कर सकता है, लेकिन फिर भी खामियों पर ध्यान दिया गया:
- मैं खिड़कियों के लिए एक dll बनाने में कामयाब नहीं रहा। डेवलपर्स ने कोई जवाब नहीं दिया।
- मैं vps पर संस्करण 0.6.1 नहीं बना सका, मैंने डेवलपर्स को सूचित किया, हम इसका पता नहीं लगा सके।
- मुझे स्थिर फ़ाइल के लिए रूटिंग को कॉन्फ़िगर करने का एक तरीका नहीं मिला। उदाहरण के लिए /tp/score.json कोई फ़ाइल नहीं है - राउटर नियंत्रक और विधि के लिए है, अन्यथा एक स्थिर फ़ाइल। मैं समझूंगा।
- बिल्ट-इन वोल्ट टेम्पलेट इंजन की बहुत कम विशेषताएं।
- मुझे सत्रों का उपयोग किए बिना फ्लैश संदेश प्रदर्शित करने का कोई तरीका नहीं मिला, बिना रेंडरिंग को अक्षम किए।
- मॉडल पर भारी टूटा हुआ प्रलेखन - 3 अलग-अलग खंड, कोई संरचना नहीं।
- ज्यादातर मामलों में, साझा होस्टिंग पर इसका उपयोग करना असंभव है।
इसे दोष कहना कठिन है। जब तक कि डेवलपर्स के साथ सीधा संवाद न हो, सिवाय गितुब पर जारी सूची के।
अनुप्रयोग की कार्यक्षमता
हमारे पास एक मुख्य पृष्ठ, एक मतदान पृष्ठ और परिणामों के आउटपुट के साथ एक आवेदन है। इसलिए, डेटाबेस के साथ काम करना, फ़िल्टरिंग के साथ डेटा भेजना, और एपक में मिनट कैशिंग के साथ प्राप्त करना।
आयरन: वीपीएस होस्टिंग। प्रोसेसर X1 500 MHz, ओपी 256 एमबी। घोड़ा कमजोर है।
कनेक्टेड एपीसी। सेटिंग्स सभी डिफ़ॉल्ट हैं। सर्वर: nginx - php-fpm - php - mysql
सिंथेटिक परीक्षण:
1. -c50 -d5 -r10
2. -c100 -d2 -r10
3. -300 -d2 -r20 (एलए - 0.7)
4.-c400 -d1 -r20 (LA - 0.47)
5. -c800 -d1 -r30 (एलए - 1.1)
6. -c1000 -b -r20 (LA - 2)
(-c: प्रतियोगियों, -d: फिर से फोन करने से पहले देरी; -आर: रिट्रीट की संख्या, -b: देरी के बिना कॉल, ला: लोड औसत)
घेरा अनियमित रूप से 3 अनुरोध करता है, सभी गतिशील। उनमें से 2 डेटाबेस प्रश्नों के साथ, 1 मिनट के कैशिंग के साथ।
बड़ी प्रतिस्पर्धा के साथ, त्रुटियां प्रकट हुईं (अनुरोधों के 2% तक)।
अधिकतम प्रति सेकंड 516 अनुरोधों को संसाधित किया गया। सुंदर थम्स अप। यदि आप फ़ाइलों में अनुरोधित जोंस को स्टोर करते हैं और क्रोन द्वारा उन्हें अपडेट करते हैं, तो आप कई बार लोड को कम कर सकते हैं।
घेराबंदी के साथ कुछ और परीक्षण किए। -c500 -r10 -d1 -i
1. APC अक्षम है
2. एपीसी एक छोटे बफर और स्टेट = 0 के साथ सक्षम है

संदर्भ
फाल्कन वेबसाइटफाल्कन रिपोजिटरीकाम करने का उदाहरणGitHub नमूना स्रोतपुनश्च
आवेदन में सर्वेक्षण सिर्फ चुना नहीं है, कृपया ईमानदारी से जवाब दें;)
और मैं भ्रम के लिए माफी मांगता हूं, एक लेख में सब कुछ करना असंभव है।
11/19/2012 11:00 बजे।
किसी ने एक क्वेरी पर चुटकी लेने का फैसला किया जो डेटाबेस से परिणाम देता है। लॉग छलांग और सीमा से बढ़ते हैं। ला 1 से 4 तक है। साइट लोड हो रही है। मैं बहुत खुश हूँ :)
प्रकोष्ठ के साथ उपयोगिता। लॉग्स को देखते हुए प्रति सेकंड 60 अनुरोध आते हैं। आईपी 188.254.105.18
11/19/2012 11:43 PM
मुझे 0.5GB लॉग इन किया और यह काफी है। अलविदा ddos