পোস্টের পারফরম্যান্সে কাস্টম পোস্ট মেটা ফিল্ড এফেক্ট


10

আমার অনেকগুলি কাস্টম সংজ্ঞায়িত মেটা ক্ষেত্র রয়েছে এমন পোস্টগুলি রয়েছে। পোস্টগুলিতে আমি তাদের প্রয়োজনে কল করছি get_post_meta। 10 টি মেটা ক্ষেত্রের অর্থ আমি এটি 10 ​​বার ব্যবহার করছি।

আমি কি এটা ঠিক করছি? মানে, উপরোক্ত পদ্ধতিতে কোনও পারফরম্যান্স সমস্যা আছে এবং যদি হ্যাঁ হয় তবে কিভাবে কলগুলির সংখ্যা হ্রাস করবেন to

আমি এখানে উপলভ্য উত্তর সম্পর্কে সচেতন: কাস্টম ক্ষেত্র এবং সম্পাদনা যা ব্যাখ্যা করে যে 'একক ক্যোয়ারী' ব্যবহার। তবে এটি স্পষ্ট এবং সুস্পষ্ট নয় তাই আবার জিজ্ঞাসা করছে যদি কেউ জানে এবং বিস্তারিতভাবে ভাগ করতে চান।

উত্তর:


25

এর উত্তর দেওয়ার জন্য, আমি গিয়েছিলাম এবং এটি নিয়ে কিছু পরীক্ষা করেছি এবং ফলাফলগুলি আসলে খুব মন খারাপের ছিল।

এই আমার পরীক্ষা

এটি নিজেই, নিজেকে একটি পরীক্ষার পৃষ্ঠা দিয়ে সেট আপ করুন। কেবল পেজ.এফপি অনুলিপি করুন, এটির নতুন নাম দিন এবং লুপটি মুছুন। এখন কেবল শেষ প্রান্তে একটি নতুন পৃষ্ঠা তৈরি করুন। আপনি শুরু করার আগে, কোনও ডেটা ছাড়াই প্রশ্নের পরিমাণ পাওয়ার জন্য প্রথমে আপনার টাইমারটি খালি তথ্য দিয়ে পরীক্ষা করুন

আমি পরীক্ষার পোস্টের জন্য সম্পূর্ণ 5 টি মেটা ক্ষেত্র তৈরি করেছি,

  • enclosure,
  • First name,
  • Last name,
  • packages এবং
  • post_views_count

আমার পরীক্ষার পোস্টটির একটি আইডি ছিল 530। একটি পোস্টের ভিতরে আপনি কেবল ব্যবহার করতে পারেন $post->IDবা get_the_ID()পোস্ট আইডি সেট করতে পারেন

সুতরাং আমার প্রথম পরীক্ষাটি নিম্নরূপ ছিল:

<?php               
       timer_start();       

       $a = get_post_meta(530, 'enclosure', true);
       $b = get_post_meta(530, 'First name', true);
       $c = get_post_meta(530, 'Last name', true);
       $d = get_post_meta(530, 'packages', true);
       $e = get_post_meta(530, 'post_views_count', true);
?>
<p><?php echo get_num_queries(); ?> queries in <?php timer_stop(1, 5); ?> seconds. </p>

যা আমাকে নিম্নলিখিত ফলাফল দিয়েছে

0.00195 সেকেন্ডে 1 টি প্রশ্ন।

আমার দ্বিতীয় পরীক্ষাটি নিম্নরূপ ছিল:

<?php               
       timer_start();       

       $a = get_post_meta(530);
?>
<p><?php echo get_num_queries(); ?> queries in <?php timer_stop(1, 5); ?> seconds. </p>

যা আশ্চর্যজনকভাবে একই ফলাফল দিয়েছে

0.00195 সেকেন্ডে 1 টি প্রশ্ন।

আপনি তাকান তাহলে সোর্স কোড জন্য get_post_meta(), আপনি যে দেখতে পাবেন get_post_meta()কেবল মাত্র একটি মোড়কের হয় get_metadata()। সুতরাং এটি আপনার প্রয়োজন ছিল। সোর্স কোড জন্য get_metadata(), আপনি যে মেটাডেটা ক্যাশে পেতে দেখতে পাবেন।

সুতরাং কোনটি ব্যবহার করবেন এবং কার্য সম্পাদন সম্পর্কে আপনার প্রশ্নের উত্তর, উত্তরটি আপনার পক্ষে হবে। আপনি ফলাফলগুলিতে প্রমাণটি দেখেছেন

আমার ব্যক্তিগত মতামতে, আপনার যদি 10 টি মেটা ডেটা ক্ষেত্র পুনরুদ্ধার করতে হয়, (বা আমার ক্ষেত্রে 5), আমার উত্তরে দ্বিতীয় পদ্ধতির ব্যবহার করুন।

$a = get_post_meta(530);

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

যেমন উদাহরণস্বরূপ, $aআমি যদি এটি করি তবে এখান থেকে আমার আউটপুটvar_dump( $a );

array(9) {
  ["_edit_lock"]=>
  array(1) {
    [0]=>
    string(12) "1414838328:1"
  }
  ["_edit_last"]=>
  array(1) {
    [0]=>
    string(1) "1"
  }
  ["_custom_sidebar_per_page"]=>
  array(1) {
    [0]=>
    string(7) "default"
  }
  ["post_views_count"]=>
  array(1) {
    [0]=>
    string(1) "0"
  }
  ["packages"]=>
  array(1) {
    [0]=>
    string(1) "0"
  }
  ["repeatable_names"]=>
  array(1) {
    [0]=>
    string(79) "a:1:{i:0;a:3:{s:4:"role";s:4:"fool";s:4:"name";s:6:"Pieter";s:3:"url";s:0:"";}}"
  }
  ["enclosure"]=>
  array(1) {
    [0]=>
    string(105) "http://localhost/wordpress/wp-content/uploads/2014/09/Nissan-Navara-Tough-City.avi
13218974
video/avi
"
  }
  ["First name"]=>
  array(1) {
    [0]=>
    string(3) "Tom"
  }
  ["Last name"]=>
  array(1) {
    [0]=>
    string(5) "Storm"
  }
}

আপনি এখন নিম্নলিখিত হিসাবে আপনার পোস্টে ফিরে যে কোনও মেটা তথ্য অ্যাক্সেস করতে পারেন:

echo $a['First name'][0] . " " . $a['Last name'][0] . "<br>";

যা প্রদর্শিত হবে

টম ঝড়


4
একে 'ওয়াক দ্য টক' বলা হয়। আশ্চর্য উত্তর।
অখিলেশ

1
আমার আনন্দ, আনন্দিত এটি আপনার পক্ষে কার্যকর হয়েছে। উপভোগ করুন :-)
পিটার গুসেন

1
এই খুব সুন্দর. পরিবর্তে কাস্টম ব্যবহারকারীর মেটাতে ফোকাস করে এমন একটি পরীক্ষা দেখতে আমি পছন্দ করব।
খ্রীস্টিন কুপার

1
এটি করার জন্য অবশ্যই মূল্যবান ;-)। আগামী কয়েক দিনের মধ্যে আমি কী করতে পারি তা দেখতে পাবে, এখন বেশ কয়েকদিন এগিয়ে আছে
@

1
নিস! আপনি যদি শেষ না হয়ে থাকেন তবে দয়া করে আমাকে এই থ্রেডটিতে একটি লিঙ্ক দিয়ে ট্যাগ করুন!
খ্রীস্টিন কুপার

0

আপনি get_post_metaএকবারে সমস্ত মেটা ক্ষেত্রের মান আনতে ব্যবহার করতে পারেন ।

$meta = get_post_meta( get_the_ID() );

এটি প্রদত্ত পোস্টের সমস্ত মেটা মান আনবে। স্বতন্ত্রভাবে আনার পরিবর্তে সেই অ্যারেটি ব্যবহার করুন।


0

পিটার গুসেন যেমন বলেছিলেন, আপনি যখন প্রথমবারের জন্য কোনও মেটা-ডেটা অনুরোধ করবেন তখন একটি পোস্টের সমস্ত মেটা ডেটা ক্যাশে হয়।

এটি যে কোনও কলের ক্ষেত্রেও সত্য WP_Query। আপনি কল করার সাথে সাথে WP_Queryওয়ার্ডপ্রেস একটি একক ক্যোয়ারীতে সমস্ত পুনরুদ্ধারকৃত পোস্টগুলির মেটা ডেটা নিয়ে আসে।

সবচেয়ে খারাপ পরিস্থিতিটি হ'ল আপনি get_post_metaস্বতন্ত্র পোস্ট আইডিগুলির জন্য কল করুন যা ওয়ার্ডপ্রেস এর আগে পুনরুদ্ধার করা হয়নি। এই ক্ষেত্রে, প্রতিটি কল get_post_metaএকটি একক ক্যোয়ারির ফলাফল হবে।

একটি কোয়েরি থেকে একটি wp_postmetaঅভ্যন্তর পর্যন্ত একটি নমুনা ট্রেস WP_Query:

SELECT post_id, meta_key, meta_value 
    FROM wp_postmeta 
    WHERE post_id IN (491,347) 
    ORDER BY meta_id ASC

#0 /wp-includes/wp-db.php(1567): wpdb->_do_query('SELECT post_id,...')
#1 /wp-includes/wp-db.php(1958): wpdb->query('SELECT post_id,...')
#2 /wp-includes/meta.php(814): wpdb->get_results('SELECT post_id,...', 'ARRAY_A')
#3 /wp-includes/post.php(5546): update_meta_cache('post', Array)
#4 /wp-includes/post.php(5529): update_postmeta_cache(Array)
#5 /wp-includes/query.php(3614): update_post_caches(Array, 'post', true, true)
#6 /wp-includes/query.php(3836): WP_Query->get_posts()
#7 /wp-includes/query.php(3946): WP_Query->query(Array)
#8 /wp-content/plugins/***/***.php(134): WP_Query->__construct(Array)

আপনি দেখতে পাচ্ছেন, কলটি ভিতর থেকে উদ্ভূত হয়েছে get_postsএবং 2 টি পোস্টের জন্য মেটা ডেটা পুনরুদ্ধার করে, যা আসল ফলাফল WP_Query

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