get_option () বনাম get_theme_mod (): কেন একটি ধীর?


17

আমি আমার get_theme_mod()বিভিন্ন প্রকল্পে কিছু সময়ের জন্য ব্যবহার করে আসছি । আমি একবার ওয়ার্ডপ্রেস v3.4 এ থিম কাস্টমাইজেশন এপিআইয়ের সুবিধা নেওয়ার সিদ্ধান্ত নিয়েছিলাম যখন এটি অনুভূত হওয়ায় এটি আমার ক্লায়েন্টদের ব্যবহারের জন্য এটি একটি অপরিহার্য সরঞ্জাম।

কিছু সময়ের পরে, আমি খেয়াল করতে শুরু করি যে আমার সাইটগুলি স্বাভাবিকের চেয়ে কিছুটা বেশি স্বাচ্ছন্দ্য বোধ করছে এবং বিশেষত কাস্টমাইজারটি লোড হতে বেশ দীর্ঘ সময় নিয়েছিল। আমার তদন্তকালে শুদ্ধাশুদ্ধি প্রচুর মাধ্যমে আমি পরিবর্তন করে চেষ্টা করার সিদ্ধান্ত নিয়েছে typeযখন আমার সেটিংস (যেমন নিবন্ধনের $wp_customize->add_setting()থেকে) theme_modথেকে option

একবার আমি এটি করেছি এবং আমার সমস্ত get_theme_mod()কলটি সরিয়ে ফেললাম get_option(), আমি সামনের দিকে এবং বিশেষত ব্যাকএন্ডের কাস্টমাইজারে পূর্ববর্তীটির বিপরীতে আধুনিক সেটআপটি ব্যবহার করে গতিতে খুব উল্লেখযোগ্য বৃদ্ধি লক্ষ্য করেছি । আমি কেন ওয়ার্ডপ্রেস কোরটি চেষ্টা করেছি এবং এটি কেন রয়েছে তার উত্তর খুঁজে বের করার চেষ্টা করেছি, তবে এই দৃশ্যে নির্দিষ্ট হ্যাঙ্গআপ কী তা বোঝা যায় না।

সম্প্রদায়ের যে কোনও অন্তর্দৃষ্টি রয়েছে যা প্রশংসিত হতে পারে তার get_option()চেয়ে দ্রুততর সম্পাদন করার ক্ষেত্রে ardsget_theme_mod()


1
আপনি কটাক্ষপাত যদি /wp-includesoption.phpযেখানে get_option()সংজ্ঞায়িত করা হয়, এবং theme.phpযেখানে get_theme_mod()সংজ্ঞায়িত করা হয়, আপনি যে আধুনিক আসলে কল দেখতে পারেন get_option(), নিজেই তা একটি এক্সটেনশন এছাড়াও প্রয়োজনীয় ফিল্টার প্রযোজ্য হিসাবে অভিনয়। এটি ধীর কেন ব্যাখ্যা করতে পারলাম।
জোডি হ্যাভেনার

1
জোডি, আমি ভেবেছিলাম যে আমি নিজেই, তবে এটি মনে হয় কেবল উল্লেখ করা get_option()এবং কিছু ফিল্টার প্রয়োগ করা এটি যতটা উল্লেখযোগ্যভাবে হ্রাস করা উচিত নয়। অবশ্যই একটি দুর্দান্ত সূচনা পয়েন্ট, তবে আমি ভাবছি যে এখানে কাজগুলির মধ্যে অন্য কিছু নেই।
এনটিজি 2

3
সেখানে কোনও ধরণের গতির পার্থক্যের কোনও কারণ নেই, তাই আমি সন্দেহ করি যে অন্য কোনও কারণ আপনার বোধকৃত পার্থক্য সৃষ্টি করছে। থিম মোডগুলি নিজেরাই বিকল্প হিসাবে সংরক্ষণ করা হয়।
অটো

পৃথক মোড আনার ক্ষেত্রে সিরিয়ালাইজেশন / আনসিরিয়ালাইজেশন প্রক্রিয়া কি কোনও উপায়ে এতে অংশ নিতে পারে? আমি উত্সাহী যদি মোডটি বের করার অতিরিক্ত কাজটি হ্যাংআপ হতে পারে তবে এটি না করেই কেবল বিকল্পটি আনার বিরুদ্ধে। যখন থেকে পরিবর্তন get_theme_mod()করতে get_option()সব প্রকল্পের গতি উভয় ফ্রন্টএন্ড ও Customizer মধ্যে গড়ে দ্বিগুণ হয়ে গেছে। এটিই ছিল একমাত্র পরিবর্তন যা এটিকে অন্য কোনও পার্শ্ব প্রতিক্রিয়া থেকে পৃথক করার প্রয়াসে করা হয়েছিল।
এনটিজি 2

উত্তর:


19

হ্যাঁ, থিম_মোড ফাংশনগুলির উত্তরটি ধীরে ধীরে হবে, তবে তা উল্লেখযোগ্য নয় এবং সুবিধাগুলি পার্থক্য ছাড়িয়ে যাবে।

থিম মোডগুলি বিকল্প হিসাবে সংরক্ষণ করা হয়। সুতরাং, সংক্ষেপে, থিম_মুড ফাংশনগুলি বিকল্পগুলির ফাংশনগুলির চারপাশে মোড়ক।

প্রথমে বুঝতে হবে যে থিম_মোড সেটিংস নির্দিষ্ট থিমের নাম অনুসারে একক বিকল্পে অ্যারে হিসাবে সঞ্চিত আছে। সুতরাং, আমি যদি এটি করি:

set_theme_mod('aaa',123);
set_theme_mod('bbb',456);

তারপরে আমি যা ডাটাবেসে আসলে পাই তা থিম_মডস_থেনামের নামের একটি একক বিকল্প সারি যা এতে ('আআআ' => 123, 'বিবিবি' => 456) সহ একটি সিরিয়ালযুক্ত অ্যারে ধারণ করে।

এখন, get_theme_modধীর হবে কারণ এটি আসলে দুটি get_optionকল করছে। প্রথমত, এটি থিমটির নাম পায়। তারপরে, এটি theme_mods_themenameবিকল্প পায় । সুতরাং ঠিক সেখানে একটি 50% গতি হ্রাস। বাকি কাজগুলি বেশিরভাগ ফিল্টারগুলিতেই থাকে, এতে একটি অতিরিক্ত ফিল্টার কল রয়েছে, তবে যদি না সেই ফিল্টারটিতে আপনার কিছু না থাকে, এটি বিন্দুমাত্র তুচ্ছ।

নোট করুন যে বিকল্পগুলি সিস্টেমটি অবজেক্ট ক্যাশে পুনরুদ্ধার করা ডেটা সঞ্চয় করে, তাই এটি এখানে একাধিক ডাটাবেস কল করছে না। একটি ডাটাবেস হিট শুধুমাত্র প্রথম ব্যবহারের ফলাফল।

set_theme_modকিছুটা ধীর কারণ এটি ঐ একই দুই করুন অপশন কল তোলে হতে হবে, তাহলে এটি আরেকটি তোলেget_option থিমের নাম আবার পেতে কল করুন, এবং তারপর এটা আছে update_optionএখন পরিবর্তিত অপশন পূর্ণ সেট দিয়ে। এটি একটি ডাটাবেস আপডেটের কারণ এবং এটি আরও অনেক ডেটা প্রেরণ করা সত্যই একটি উল্লেখযোগ্য মন্দার কারণ হতে পারে। বৃহত্তর সারি আপডেট করার চেয়ে কয়েকটি বাইট আপডেট করা দ্রুত। তবে আপনি সাধারণত লক্ষ্য করেননি তেমন নয়। আপনার যদি প্রচুর সেটিংসের পুরোটা হ্যাক না করে ...

থিম মোড ফাংশনগুলি সম্ভবত সামগ্রিকভাবে অপ্টিমাইজেশনের কারণে, তবে তবুও আপনার এখনও get_option এর পরিবর্তে এগুলি ব্যবহার করা উচিত এবং কারণ শিশু থিম।

বিকল্পগুলির সারিগুলি সরাসরি ব্যবহার করতে সমস্যা হ'ল আপনি সেগুলি সরাসরি ব্যবহার করছেন এবং আপনার সেটিংসের জন্য নির্দিষ্ট কী নাম ব্যবহার করছেন।

যদি আমার কাছে "এএএ" নামে একটি থিম থাকে এবং আমি এটির একটি চাইল্ড থিম তৈরি করি অন্য কোনও সাইটে ব্যবহারের জন্য "বিবিবি", তবে আমার "এএএ" থিমটি "উদাহরণ" নামের একটি বিকল্প ব্যবহার করতে পারে। যখন আমি একটি সাইট আপডেট করি এবং এটি আমার বিকল্পটি আপডেট করে, তখন একই বিকল্পটি এখন আমার শিশু থিমের জন্য প্রযোজ্য হবে। আমি যদি এটি না করতে চাই? আমি চাইলে চাইল্ড থিমটি বিকল্প সেটিংগুলির একটি আলাদা সেট ব্যবহার করতে পারে?

মূল অংশ হিসাবে প্রকৃত থিমের নাম (এবং হার্ডকডযুক্ত মান নয়) অন্তর্ভুক্ত করে থিম মোডগুলি নিশ্চিত করুন যে সাইটের প্রতিটি "থিম" তার নিজস্ব সেটিংসের সেট ব্যবহার করে uses আমি পিছনে পিছনে স্যুইচ করতে পারি এবং সেটিংস তাদের মধ্যে স্থানান্তরিত হয় না, তারা কীভাবে আমি সেট করে রেখেছি। সরল, আরও সুস্পষ্ট, আরও স্বজ্ঞাত।

এবং যদি ভবিষ্যতে কিছু মূল পরিবর্তন বা প্লাগইন থিম_মোডগুলি কীভাবে কাজ করে তা সংশোধন করে, তবে আপনি কোনও পরিবর্তন ছাড়াই স্বয়ংক্রিয়ভাবে এর সুবিধা পাবেন। মোড়ক সর্বদা ধীর হতে চলেছে, এটি অনিবার্য নয়, এটি মোড়কের প্রকৃতি। তবুও, আপনি এখনও মেশিনের ভাষা নয়, পিএইচপি কোড লিখছেন। জিনিসগুলিকে সহজ করার জন্য এবং আলাদা কার্যকারিতাটি আমরা এর মতো মোড়ক ব্যবহার করি। থিমগুলি কীভাবে তাদের বিকল্পগুলি ডাটাবেসে সঞ্চিত থাকে, বা নামকরণ কীভাবে কাজ করে তা জানা বা যত্ন নেওয়া উচিত নয়। থিম_মোড ফাংশনগুলি একটি সহজ সমাধান সরবরাহ করে যা ক্লিনার।


3

get_theme_modচারদিকে কেবল একটি মোড়ক get_option। তত্ত্বের কারণ এটি বিমূর্ততার আরেকটি স্তর এটি ধীর গতিতে কাজ করবে তবে বাস্তবে পার্থক্যটি এত বড় হওয়া উচিত নয় যে কোনও মানুষের দ্বারা লক্ষ্য করা যায়।

আপনার থিম_মোড হুকগুলিতে কিছু ধীর কোড হুক করা থাকলে আসল গতির পার্থক্য হতে পারে।


1

কাস্টমাইজারে তখন কি কিছু ঘটতে পারে? আমি এখানে ওপি হিসাবে একই জিনিস দেখতে পাচ্ছি।

আমি নিশ্চিত করতে পারি যে প্রায় 30 টি বিকল্পের সাথে আমার কাস্টমাইজারের লোড সময়টি প্রায় 3 এস থেকে প্রায় 5-এ নেমে get_optionযায়get_theme_mod

পদ্ধতিগুলিতে সরাসরি কল করা আমি একটি 2 মিমি পার্থক্য দেখছি।

পরীক্ষার ফলাফল ( https://gist.github.com/anonymous/d98a46d00d52d40e7dec )

আপনি সরাসরি এপিআইগুলি তুলনা করার সময় এটি লক্ষণীয় নাও হতে পারে তবে কাস্টমাইজারে সেগুলি কীভাবে ব্যবহার হয় সে সম্পর্কে অবশ্যই কিছু থাকতে হবে।


1

আপনি করতে পারেন টাইম টেস্ট এর get_option(100 পুনরাবৃত্তিও) এই কোড (রাখা ব্যবহার functions.phpঅথবা কোথাও):

add_action('wp','My_Test');
function My_Test(){
    var_dump(microtime(true));
    for ($i=1; $i<100; $i++) { get_option('blogdescription'); }
    var_dump(microtime(true));
    for ($i=1; $i<100; $i++) { get_theme_mod('blogdescription'); }
    var_dump(microtime(true));
    exit;
}   




আরেকটি চিন্তাভাবনা

আমি জানি না, যদি এটি কোনও পার্থক্য করে (সম্ভবত ওয়ার্ডপ্রেস বিকাশকারীরা এটি আরও ভাল জানেন), তবে আমি ভেবেছিলাম যে কোনও ওয়েবসাইটের যদি উচ্চ ট্র্যাফিক থাকে এবং প্রতিটি পৃষ্ঠার ভারে এটির জন্য শত শত বিকল্পের দরকার হয়, তবে আমি যদি যোগ দেব তবে কি হবে? এক মধ্যে অনেক বিকল্প get_option? এটার মত:

update_option('my_extra_optss',  array(
      'myNAME' => 'George',
      'myAGE'  => 43 ));

তারপরে:

$x = get_option('my_extra_optss');
$x['myNAME'];
$x['myAGE'];
................

এটি কি কোনও সাইটকে কিছুটা দ্রুত তৈরি করবে?


2
Get_theme_mod ইতিমধ্যে এটিই করে। সমস্ত থিম মোড ইতিমধ্যে একটি একক বিকল্পে যোগদান করেছে। আপনি যখনই get_theme_mod কল করেন তখন এটি প্রথমবারের মতো দুটি ডাটাবেস কল করে এবং পরে শূন্য ডাটাবেস কল করে।
অটো

0

টিএল; ডিআর: আপনি যদি থিম বিকাশকারী হন তবে আপনার get_theme_mod ব্যবহার করা উচিত

পুরো উত্তর:

আপনার যদি 100 get_option কল থাকে তবে এটি আপনার ডেটাবেজে 100 টি ক্যারি করে।

আপনার যদি 100 টি get_theme_mod কল হয় তবে এটি আপনার ডাটাবেসে কেবল 1 টি ক্যোয়ারী নেবে।

কেন? কারণ সমস্ত থিম মোডগুলি একটি একক ডাটাবেস সারিতে সঞ্চিত থাকে এবং কেবলমাত্র একটি বলা হবে, যখন প্রতিটি বিকল্প একটি সারি এবং 100 get_option কলগুলির ফলে 100 ডাটাবেস ক্যোয়ারী আসে এবং অবশ্যই এটি আপনার সাইটকে ধীর করে দেয়।

যদি আপনার থিমের প্রচুর বিকল্প রয়েছে, get_theme_mod ব্যবহারের ফলে আপনার ক্যোয়ারী নম্বরটি ডাটাবেসে উল্লেখযোগ্যভাবে হ্রাস পাবে।

আপনি ক্যোয়ারী মনিটর প্লাগইন দ্বারা কার্য সম্পাদন এবং প্রশ্নের সংখ্যা পরীক্ষা করতে পারেন

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