আপডেট_পোস্ট_ (মেটা / টার্ম) _ ক্যাশের ব্যাখ্যা


23

আমি 10 আপ থেকে কিছু সেরা অনুশীলনগুলি পড়ছিলাম এবং তারা ডাব্লুপিউকিউয়ারিতে (আপনি যা জিজ্ঞাসা করছেন তার উপর নির্ভর করে) এই দুটি পতাকা মিথ্যাতে সেট করার কথা বলেছেন:

  • 'update_post_meta_cache' => false: দরকারী যখন পোস্ট মেটা ব্যবহার করা হবে না।
  • 'update_post_term_cache' => false: কার্যকর যখন ট্যাক্সনোমির পদগুলি ব্যবহার করা হবে না।

আমি ধরে নিচ্ছি যে এটি এর মতো কিছু ব্যবহার করছে update_post_caches()তবে আমি এর অর্থ কী তা 100% নিশ্চিত নই। এই দুটি পতাকা একটিতে কী বোঝায় এবং WP_Queryসেগুলি কতটা কার্যকর তা কেউ কী ব্যাখ্যা করতে পারেন? ওয়ার্ডপ্রেস কীভাবে জিনিসকে ক্যাশে করে সে সম্পর্কে পুরোপুরি আমি জানি না তবে এই দুটি পতাকা সম্পর্কিত একটি সুচিন্তিত উত্তরও গ্রহণযোগ্য।

উত্তর:


30

সর্বত্র ক্যাশে অবজেক্ট

ওয়ার্ডপ্রেস যতটা সম্ভব ডাটাবেস প্রশ্নের সংখ্যা হ্রাস করার চেষ্টা করে।

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

"ক্যাশে কাজ" WP_Object_Cacheক্লাস এবং wp_cache_*ফাংশনগুলির মাধ্যমে সম্পন্ন হয় (যা সেই শ্রেণীর পদ্ধতিতে মোড়ক থাকে))

যেখানে ক্যাশে থাকে

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

তবে ড্রপিনস ( advanced-cache.phpএবং / অথবা object-cache.php) এর মাধ্যমে এই ক্যাশে পরিচালনা করার জন্য কাস্টম পদ্ধতিতে সেটআপ করা সম্ভব।

সাধারণত, এই ড্রপিনগুলি এক ধরণের ক্যাশিং প্রক্রিয়া সেটআপ করতে ব্যবহৃত হয় যা একক অনুরোধগুলি "বেঁচে থাকে"।

এই কারণে, ডব্লিউপি লোকগুলির মধ্যে, এগুলি "পার্সেন্টিভ ক্যাশে" প্লাগইন হিসাবে পরিচিত (বুদবুদের বাইরেও "ক্যাশে" এবং "ধ্রুবক" শব্দগুলি একসাথে খুব একটা বোঝায় না)।

আজকাল জনপ্রিয় পছন্দগুলি মেমক্যাচড বা রেডিস

সুতরাং "অবিচ্ছিন্ন ক্যাশে" প্লাগইন ব্যবহার করে আপনি ডাটাবেস প্রশ্নের সংখ্যাকে মারাত্মকভাবে হ্রাস করতে পারেন, কারণ প্রতিটি অনুরোধে ক্যাশে আপডেট হয় না।

কিছু উদাহরণ

$foo = get_post_meta('foo', $post_id, true);
// a lot of code in the middle
$bar = get_post_meta('bar', $post_id, true);

উপরের কোডের 2 টি লাইন সর্বাধিক, 1 টি ডাটাবেস কোয়েরি ট্রিগার করবে।

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

বিভাগীয় শর্তাদির ক্ষেত্রেও একই ঘটনা ঘটে, ওয়ার্ডপ্রেস একবার সমস্ত বিভাগের জন্য সমস্ত শর্তাদি টান দেয়, তারপরে সেগুলি ক্যাশে থেকে ফিরিয়ে দেয়।

ওয়ার্ডপ্রেসে অবজেক্ট ক্যাশে খুব বেশি ব্যবহৃত হয়। কেবল পোস্ট, মেটা মান এবং করশোণীর জন্যই নয়, ব্যবহারকারী, মন্তব্য, থিম ডেটা ...

এসবের WP_Queryসাথে কী করার আছে?

যখন আপনি কিছু পোস্ট WP_Queryডিফল্টরূপে জিজ্ঞাসা করেন , ওয়ার্ডপ্রেস কেবল সেগুলি কেবল ডাটাবেস থেকে (বা যদি তারা ক্যাশে থাকে তবে ক্যাশে থেকে) টানতে পারে না তবে সমস্ত কাস্টম ক্ষেত্র এবং টানা পোস্টগুলির সাথে সম্পর্কিত সমস্ত বিভাগের জন্য ক্যাশে আপডেট করে

সুতরাং আপনি যখন কল করবেন, উদাহরণস্বরূপ, get_the_terms()বা get_post_meta()লুপিং পোস্টগুলি যখন পেয়েছেন WP_Query, আপনি আসলে কোনও ডাটাবেস কোয়েরি ট্রিগার করবেন না, তবে ক্যাশে থেকে তথ্য টানুন।

ভাল, তাই না?

হ্যাঁ, তবে এটি একটি ব্যয় নিয়ে আসে।

ক্যাশে আপডেট "ম্যাজিক" ওয়ার্ডপ্রেস করে যে যখন টান পোস্ট মাধ্যমে WP_Queryঘটতে update_meta_cacheমেটা জন্য এবং update_object_term_cachetaxonomies জন্য।

যদি আপনি এই ফাংশনগুলির উত্স কোডটি লক্ষ্য করেন তবে আপনি দেখতে পাবেন যে সেখানে ওয়ার্ডপ্রেস প্রতিটি ফাংশনে কেবলমাত্র একটি ডিবি কোয়েরি সম্পাদন করে তবে প্রচুর প্রক্রিয়াজাতকরণও করে। উদাহরণস্বরূপ, মধ্যে update_object_term_cacheআছে 7 নেস্টেডforeach ... যদি আপনি taxonomies অনেক আছে, এবং প্রতি পাতায় পোস্ট সংখ্যা বেশি, এর ফলে খুব performant নয়।

এই WP_Queryযুক্তি সম্পর্কে , অবশেষে

কী 'update_post_meta_cache'এবং 'update_post_term_cache'সেট করার সময় falseযথাক্রমে কাস্টম ফিল্ড এবং ট্যাক্সনোমির জন্য ক্যাশে আপডেট করার জন্য ওয়ার্ডপ্রেসকে প্রতিরোধ করা।

সেক্ষেত্রে প্রথমবারের মতো কোনও কাস্টম ক্ষেত্র বা বিভাগের কোয়েন থেকে কোনও ডাটাবেস ক্যোয়ারী ট্রিগার করা হয় এবং ডেটা ক্যাশে করা হয়।

এটা কি মূল্য?

যথারীতি উত্তরটি নির্ভর করে । বেশিরভাগ সময় এই মানগুলিকে সেট করার জন্য false, একটি ভাল পছন্দ, কারণ এটি প্রয়োজন না হলে অপ্রয়োজনীয় প্রক্রিয়াজাতকরণ এবং ডাটাবেস অনুসন্ধানগুলি প্রতিরোধ করে এবং প্রথমবারের মতো কাস্টম ফিল্ড / ট্যাক্সনোমির শর্তাদি আবশ্যক হলে ক্যাশে আপডেট করা হয়।

তবে, আপনি যদি একবার get_post_meta()লুপ করতে চলেছেন, এমনকি একবার লুপ চলাকালীন এবং আপনি get_the_terms()পোস্ট দ্বারা সমর্থিত সকল ট্যাক্সনোমির জন্য (বা বেশিরভাগ) কল করতে চলেছেন , তবে ক্যাশে আপডেট করা যেকোনো উপায়েই ট্রিগার করা হয়েছে, এবং এর কোনও প্রকৃত সুবিধা নাও থাকতে পারে এই ক্যোয়ারী যুক্তিগুলিতে সেট করে false


ঝরঝরে! সর্বদা আপনার অন্তর্দৃষ্টি সবসময় জিএম প্রশংসা করা হয়। স্থানান্তরগুলি "স্থির ক্যাশে" হিসাবে বিবেচিত হবে? সুতরাং আরও যেতে, কোনও WP_Query চলাকালীন অবজেক্ট ক্যাশে পুনরায় wp_reset_postdata()সেট করা global $postএবং পুনরায় সেট করার কারণ ? দেখে মনে হচ্ছে যদি আমি একটি কাস্টম ডাব্লুপিউকিউয়ারি করি তবে এটি একটি নতুন ক্যাশেযুক্ত বস্তু তৈরি করবে তবে এটি পুনরায় সেট করাতেও মূল ক্যাশে পাওয়ার জন্য প্রয়োজনীয় কাজ করতে হবে। অথবা হতে পারে আমি এই প্রশ্নের প্রসঙ্গে খুব বেশি দূরে আছি।
Howdy_McGee

1
@ হাওডি_এমসিজি অবজেক্ট ক্যাশে এবং পোস্ট অবজেক্ট সম্পর্কিত নয়। সুতরাং wp_reset_postdata()অবজেক্ট ক্যাশে সম্পর্কে কিছুই করবেন না। wp_reset_postdata()কেবলমাত্র গ্লোবাল পোস্ট অবজেক্টটি পুনরায় সেট করুন, এটি এখনও আর একটি বৈশ্বিক পরিবর্তনশীল, এটি কখনই ক্যাশেড হয় না ... স্থানান্তরগুলি একটি হাইব্রিড জিনিস: যখন আপনি কিছু ধ্রুবক ক্যাশে প্লাগইন ইনস্টল করেন তখন ক্ষণস্থায়ীটি ব্যবহার করুন, তবে আপনার যদি স্থির ক্যাশে প্লাগইন না থাকে তবে ট্রান্সিয়েন্টগুলি trans ডাটাবেস ব্যবহার করুন।
গাজাজ্যাপ

আহ, আমি কেবল global variableধারণার দিকে ঝুঁকছি এবং ধরে নিয়েছি এটি হ'ল global $postবা বিশ্বব্যাপী $wp_queryবস্তু, স্পষ্টতার জন্য ধন্যবাদ!
হাওডি_এমসিজি

একটি সিডনোটে , fields => 'ids'উভয় ক্যাশে সেট করে false। আমি মনে করি যে এটির অর্থ বোঝায় যে একটি অবজেক্ট ক্যাশে কেবলমাত্র বস্তুগুলিতে কাজ করে তবে আমি ভেবেছিলাম যে আমি কেবল একটি উল্লেখ করব: ডি
হাওডি_এমসিজি

3

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

এটি ওয়ার্ডপ্রেসকে প্রতিটি পোস্টের জন্য একটি অনুরোধ প্রেরণের পরিবর্তে সমস্ত পোস্টের জন্য তথ্য পাওয়ার জন্য কেবল একটি অনুরোধ প্রেরণের মাধ্যমে ডিবিতে অনুরোধ প্রেরণ সম্পর্কিত ওভারহেড হ্রাস করতে সক্ষম করে।

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

* ক্যাশে - এখানে সর্বাধিক গুরুত্বপূর্ণ মেমরি ভিত্তিক ক্যাশে যেখানে ডাব্লুপি কোনও ডিভাইস ক্যাশিং প্লাগইন সক্রিয় না করে ডিবি থেকে প্রাপ্ত সমস্ত কিছু বাদাম সংরক্ষণ করে। স্পষ্টতই যখন আপনি অবজেক্ট ক্যাশে করবেন তখন তথ্যও সেখানে সংরক্ষণ করা হবে।

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