র‌্যাম ব্যবহারে সঞ্চয় করার জন্য কি পোস্ট ভেরিয়েবল থেকে সামগ্রী বাদ দেওয়ার কোনও উপায় আছে?


9

সুতরাং, আমি ডাব্লুপি র‍্যাম ব্যবহারের সমস্যার মতো দেখতে চলেছি এবং এর সমাধান খুঁজছি।

আমার সাইটে সত্যই এই সমস্যাটি হচ্ছিল এমন এক জায়গাটি হ'ল একটি সাইট ম্যাপ পৃষ্ঠা যা আমি জনসাধারণের চেষ্টা করছি, তবে এই সমস্যার সমাধানটি সর্বজনীনভাবে প্রয়োগ করা যেতে পারে এবং পুরো সাইটের জুড়ে র‌্যাম ব্যবহারে সংরক্ষণ করা যেতে পারে।

মূলত, আমার কাছে থাকা এই সাইট ম্যাপ পৃষ্ঠাটি হ'ল সমস্ত postsএবং pagesআমার সাইটের একটি তালিকা । এই পৃষ্ঠায় আমার vari পোস্ট ভেরিয়েবলের কেবলমাত্র উপাদানগুলি হ'ল শিরোনাম এবং পারমিলিংক। দুর্ভাগ্যক্রমে, আমি যে ক্যোয়ারীটি ব্যবহার করছি তা সমস্ত পোস্ট তাদের প্রতিটি পোস্টের ভেরিয়েবলের সমস্ত তথ্য দিয়ে দেয়।

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

 $varArray= array(
      'post_type' => 'products',
      'post_status' => 'publish',
      'supplements' => 'all-supplements',
      'posts_per_page' => -1,
      'orderby' => 'title',
      'order' => 'ASC'
 );
 $myProducts= new WP_Query($varArray);

$ পোস্ট ভেরিয়েবলের মধ্যে সংরক্ষিত তথ্যগুলির বেশিরভাগ অংশ (আমার সাইটের জন্য, এবং আমি অনুমান করছি যে এই প্রবণতাটি সাধারণ ব্যবহারের জন্য দেখা যায়) "বিষয়বস্তুর" মধ্যে পাওয়া যায় আমার সাইটের মানচিত্র পৃষ্ঠার জন্য র‍্যামের র‍্যামের সাধারণ ব্যবহার ~ 140MB (ডিবাগ বার দ্বারা রিপোর্ট), যেখানে আমার সাইটে অন্য যে কোনও সাধারণ পৃষ্ঠার ব্যবহার 50-60MB। বড় পার্থক্য. গতকাল সাইটের মানচিত্র পৃষ্ঠাটি (ডাব্লুএসওডি) কাজ করা বন্ধ করে দিয়েছিল এবং এটি ঠিক করতে আমাকে ডাব্লুপি ব্যবহার করতে পারে এমন সর্বোচ্চ পরিমাণের র‌্যাম বাড়াতে হয়েছিল। সুতরাং আমি একক পৃষ্ঠার কারণে সামগ্রিক প্রয়োজনীয় সিস্টেমের সংস্থান বাড়িয়ে দিচ্ছি।

এইভাবে, আমি আমার প্রশ্নে আসি।

সেখানে ওয়ার্ডপ্রেস মধ্যে একটি পথ / বিকল্প কোথাও যে আমি অনুপস্থিত করছি যে আনা হবে posts/ pagesস্বাভাবিক ক্যোয়ারী মত, কিন্তু না উদ্ধার পোস্টের জন্য বিষয়বস্তু পাওয়ার?

অথবা, বিকল্পভাবে, পুরো $ পোস্টের ভেরিয়েবল শেবাংয়ের পরিবর্তে কেবলমাত্র কোনও নির্দিষ্ট প্রশ্নের (শিরোনাম / পারম্যাকলিংক / স্লাগ / ইত্যাদি ...) মধ্যে থাকা বিশেষ উপাদানগুলি ধরার জন্য আমার পক্ষে আরও সহজ উপায় আছে?

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

কোন সাহায্য প্রশংসা করা হবে।

উত্তর:


8

মেমোরির ব্যবহার হ্রাস করার জন্য filterআপনি সরাসরি পোস্ট ডেটা জিজ্ঞাসা করে এবং পোস্ট অবজেক্টের ক্ষেত্রটি সেট করার sampleআগে একটি কৌশল চেষ্টা করতে পারেন get_permalink()

এর পিছনে বিশদ যুক্তির জন্য get_permalink মেমরি ব্যবহারের সমস্যাটি দেখুন ।


এই সমাধান দুর্দান্ত কাজ করেছে। ঠিক আছে, একটু ঝগড়া করার পরে তা। :) কীভাবে আমার কাস্টম শৃঙ্খলা / শব্দটিকে অন্তর্ভুক্ত করতে হবে তা খুঁজে বের করতে হয়েছিল, তবে এটি একটি বিশাল সহায়তা ছিল। সাইট মানচিত্র পৃষ্ঠাতে এখন 70MB র‌্যাম ব্যবহার করা হচ্ছে (ডিবাগ বার অনুসারে)। মহান পয়েন্টার জন্য ধন্যবাদ।
প্রোগ্রামার ড্যান

4

আপনি এটি আপনার অ্যারেতে যুক্ত করার চেষ্টা করতে পারেন:

'nopaging' => true,
'no_found_rows' => true,
'update_post_meta_cache' => false,
'update_post_term_cache' => false

এটি বেশ স্ব-বর্ণনামূলক বলে মনে হচ্ছে তবে মূলত আপনি সমস্ত পোস্টের ভেরিয়েবল এবং আপনার প্রয়োজনীয় জিনিসগুলি অনুসন্ধান করছেন না।


2

প্রোগ্রামার ড্যান, মাহ মানুষ!

আসুন আপনি SELECTগ্লোবালটি ব্যবহার করে কাস্টম ক্যোয়ারীগুলি শুরু করুন $wpdb। কোডেক্সের কাস্টম সিলেক্ট ক্যোয়ারী ব্যবহার করে পোস্ট প্রদর্শন করাতে দুর্দান্ত প্রবেশ রয়েছে । আপনি যদি ব্যবহার setup_postdata()করেন তবে ফলাফলগুলি লুপ করতে পারেন যেমন আপনি স্ট্যান্ডার্ড ওয়ার্ডপ্রেস লুপে বসে আছেন:

global $wpdb;

$sitemap_query = "
    SELECT $wpdb->posts.ID, $wpdb->posts.post_title, $wpdb->posts.guid
    FROM $wpdb->posts
    WHERE $wpdb->posts.post_status = 'publish' 
    AND $wpdb->posts.post_type IN ('post','supplement','another_post_type')
    ORDER BY $wpdb->posts.post_type, $wpdb->posts.post_title DESC
    ";

$sitemap_nodes = $wpdb->get_results($sitemap_query, OBJECT);

if( $sitemap_nodes ):
    global $post;
    foreach ( $sitemap_nodes as $post ):
        setup_postdata( $post );
        ?>

<!-- //Use standard Wordpress template tags for SELECT'd data within The Loop here -->
    <?php the_title() ?>
    <?php the_permalink() ?>

        <?php
    endforeach;
endif;

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

স্পষ্টতই আপনি আপনার প্রয়োজনীয় ফলাফলগুলি পেতে বা সন্ধানের setup_postdata()মাধ্যমে লুপটি ব্যবহার করতে $sitemap_nodesবা ক্যুয়ারীর সাথে ফ্রেড বাড়াতে ইচ্ছুক হতে পারেন।

যদি আপনি কল করেন setup_postdata()এবং ডিবাগ মোডটি সক্রিয় করে রেখেছেন, কলগুলি সম্ভবত বাম এবং ডানদিকে (ইচ্ছাকৃতভাবে) অনুপস্থিত তথ্য সম্পর্কিত নোটিশগুলি ছড়িয়ে দিবে। @আপনার কাস্টম ক্যোয়ারী সঠিকভাবে কাজ করছে তা আপনি নিশ্চিত করার পরে আপনি ফাংশন কলটি তাদের দমন করার আগে একটি নিক্ষেপ করতে চাইতে পারেন।

তবে এটি আপনার শুরু করা উচিত! আপনার যে ক্ষেত্রগুলি অনুসন্ধান করতে হবে তা সনাক্ত করতে আপনি নিম্নলিখিত ডাটাবেস চিত্রটি ( কোডেক্সের ডেটাবেস বিবরণ পৃষ্ঠা থেকে) উল্লেখ করতে পারেন:

ওয়ার্ডপ্রেস ডাটাবেস ডায়াগ্রাম

সম্পাদনা করুন:

সর্বাধিক মেমরি দক্ষ সমাধান হ'ল এটি SELECT@ রাারস্টের প্রোটীপের সাথে একটি কাস্টম ক্যোয়ারিকে একত্রিত করে :)


1

ডাব্লুপি_কিউয়ের একটি "রিটার্ন ফিল্ডস" প্যারামিটার রয়েছে যা দেখতে দেখতে এটি:

$args = array(
 'fields' => 'ids'
);
$query = new WP_Query( $args );

যখন এইভাবে ব্যবহার করা হয়, ডাব্লুপি_কিউয়ারি কেবল পোস্ট আইডিগুলি দেয়, পুরো পোস্টের অবজেক্টকে নয়। তারপর আপনি শুধু ব্যবহার করতে পারেন get_permalink(), get_the_title()এবং অন্যান্য হরেক রকম ওয়ার্ডপ্রেস ফাংশন পোস্ট ID উপর ভিত্তি করে আপনার সামগ্রী পুনরুদ্ধার করতে।


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

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