ম্যাজেন্টো 2 অবজেক্ট ম্যানেজার কারখানার মাধ্যমে ক্লাস ইনস্ট্যান্ট করছে


9

Magento 2 ক্লাস একটি বস্তু ম্যানেজার কারখানা ব্যবহার instantiated করা হয়: \Magento\Framework\ObjectManager\Factory\Factory::create()
এতক্ষণে গু। তবে এখানে এমন কিছু আছে যা আমি বুঝতে পারি না।
ডিআইয়ের জন্য কনস্ট্রাক্টরের কাছে আর্গুমেন্টের কোনও বিজ্ঞপ্তি উল্লেখ নেই কিনা তা যাচাই করার পরে এবং যুক্তিগুলি নির্ধারণের পরে এই ( $argsআর্গুমেন্টগুলি যা কনস্ট্রাক্টরের কাছে প্রেরণ করা উচিত) রয়েছে:

    switch (count($args)) {
        case 1:
            return new $type($args[0]);
        case 2:
            return new $type($args[0], $args[1]);
        case 3:
            return new $type($args[0], $args[1], $args[2]);
        case 4:
            return new $type($args[0], $args[1], $args[2], $args[3]);
        case 5:
            return new $type($args[0], $args[1], $args[2], $args[3], $args[4]);
        case 6:
            return new $type($args[0], $args[1], $args[2], $args[3], $args[4], $args[5]);
        case 7:
            return new $type($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6]);
        case 8:
            return new $type($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7]);
        default:
            $reflection = new \ReflectionClass($type);
            return $reflection->newInstanceArgs($args);
    }

কেন এই দীর্ঘ switchবিবৃতি? defaultশাখা থেকে সরাসরি কোড ব্যবহার করবেন না কেন ?
বা case8 এ থামবে কেন ? 5 বা 10 বা 127 কেন নয়?


খুব বিছানা কোডিং
কীউল শাহ

1
@KeyulShah। হতে পারে তবে আমি নিশ্চিত যে এর পিছনে কোনও কারণ রয়েছে।
মারিয়াস

উত্তর:


11

কারণটি হল পারফরম্যান্স। নতুন মাধ্যমে ইনস্ট্যান্টেশন প্রতিবিম্ব চেয়ে কিছুটা দ্রুত। বেশিরভাগ ক্লাসে 8 টিরও কম আর্গুমেন্ট থাকে তাই এই সুইচটি বেশিরভাগ ক্ষেত্রে .েকে রাখে।

সম্ভবত এটি সরানো হবে।


1
উত্তরের জন্য ধন্যবাদ. আমি অবশ্যই বলতে পারি আমি কিছুটা হতাশ আমি অভিনব কিছু আশা ছিল। :)
মারিয়াস

1
পারফরম্যান্স কি যথেষ্ট ভাল নয়? :)
আন্তন ক্রিল

3
এছাড়াও, যদি উত্তরটি থেকে পরিষ্কার না হয় তবে অনেক কিছু ঘটে (অর্থাত্ কোনও বস্তুর তাত্ক্ষণিকভাবে কাজ করা) এর জন্য কিছুটা দ্রুত বাস্তবায়ন করা ভাল।
অ্যালান ঝড়

1
@AntonKril। আমি কারণগুলির বিষয়ে কথা বলছিলাম না। আমি "কারণ আমরা এটি এইভাবে করি, আপনার বিয়ার কখনই গরম হবে না" বা এর মতো কোনও কিছুর মতো অভিনব উত্তরের জন্য আমি আশা করছিলাম। তবে আমার ধারণা "পারফরম্যান্স" আপাতত এটি করবে। দয়া করে কাছে থাকুন অন্যান্য দার্শনিক প্রশ্নগুলি পরের দিনগুলিতে অনুসরণ করবে। :)
মারিয়াস

6

পারফরম্যান্স লাভ প্রায় অদৃশ্য। আমি যখন 2 টি পদ্ধতিতে 1000000 বস্তু ইনস্ট্যান্ট করার চেষ্টা করি, ফলাফল এখানে:

এখানে চিত্র বর্ণনা লিখুন

আমি ম্যাজেন্টো 2 বিটা এবং পিএইচপি সংস্করণ ব্যবহার করছি (নীচে দেখুন)

পিএইচপি 5.6.12-1 + deb.sury.org ~ বিশ্বস্ত + 1 (ক্লিপ) কপিরাইট (সি) 1997-2015 পিএইচপি গ্রুপ জেন্ড ইঞ্জিন v2.6.0, কপিরাইট (সি) 1998-2015 জেন্ড অপপ্লে v7.0.6 সহ জেন্ড টেকনোলজিস -দেব, কপিরাইট (সি) 1999-2015, জেড টেকনোলজিস সহ এক্সডিবাগ ভি 2.3.3.2, কপিরাইট (সি) 2002-2015, ডেরিক রেথানস দ্বারা

এই পরীক্ষাটি করার জন্য, আমি এই স্ক্রিপ্টটি ব্যবহার করেছি


আচ্ছা ... অ্যান্টন বলেছিলেন "কিছুটা দ্রুত"। যা এটি :)। তবে যাইহোক ... প্রোফাইলিংয়ের জন্য +1।
মারিয়াস

এই কোডটি দীর্ঘ সময় আগে যুক্ত হয়েছিল। এটি পিএইচপি 5.3 এ পরীক্ষা করা হয়েছিল পরবর্তী সংস্করণগুলিতে পার্থক্য কম দৃশ্যমান হয়ে ওঠে তাই আমি আমার উত্তরে উল্লেখ করেছি যে এই কোডটি পরে মুছে ফেলা হতে পারে।
আন্তন ক্রিল

@ এন্টনক্রিল পরিবর্তে, আপনি এটি 15 পরামিতি পর্যন্ত পাম্প করেছেন ? ;-)
ফ্যাবিয়ান শেমংলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.