WP_Query অযৌক্তিক পরিমাণে মেমরি ফাঁস


10

নীচের ফাংশনে আমি যতবার ডাব্লুপি_কিউয়ারি () কল করি, ওয়ার্ডপ্রেস 8 মেগাবাইট মেমরি ফাঁস করে দেয়। এবং যেহেতু আমি এই ফাংশনটিকে অনেক কল করি, বিষয়গুলি খুব দ্রুত চুল পাকা হয়ে যায় ... :( আমি ফলাফল $ ক্যোয়ারী অবজেক্টটি আনসেট করার পাশাপাশি পর্যায়ক্রমে ডাব্লুপি_ক্যাচি_ফ্লাশ () কল করার চেষ্টা করেছি, তবে কোনওরকমই তার কোনও প্রভাব আছে বলে মনে হচ্ছে না কোনও ভাবনা?

function get_post_ids_in_taxonomies($taxonomies, &$terms=array()) {
    $post_ids = array();

    $query = gen_query_get_posts_in_taxonomies($taxonomies, $terms);
    // var_dump($query);

    //Perform the query
    $queryObject = new WP_Query($query); //*****THE 8 MEGABYTES IS LEAKED HERE*****

    //For all posts found...
    if($queryObject->have_posts()) {
        while($queryObject->have_posts()) {
            $queryObject->the_post();

            //Get the $post_id by capturing the output of the_ID()
            ob_start();
            the_ID();
            $post_id = (int) ob_get_contents();
            ob_end_clean();

            // echo $post_id."\n";
            $post_ids[] = $post_id;
        }
    }

    unset($queryObject);

    return $post_ids;
}

জেন_কিউরি_গেট_পোস্ট_ইন_ট্যাক্সোনোমিজ () হ'ল:

function gen_query_get_posts_in_taxonomies($taxonomies, &$terms=array()) {
    //General query params
    $query = array(
        'posts_per_page'    => -1,  //Get all posts (no paging)
        'tax_query'             => array('relation' => 'OR'),
    );

    //Add the specific taxonomies and terms onto $query['tax_query']
    foreach($taxonomies as $tax) {
        //Get terms in the taxonomies if we haven't yet
        if(!array_key_exists($tax, $terms)) {
            $terms[$tax] = array();

            $terms_tmp = get_terms($tax);
            foreach($terms_tmp as $tt)
                $terms[$tax][] = $tt->term_taxonomy_id;
        }

        $query['tax_query'][] = array(
            'taxonomy' => $tax,
            'terms' => $terms[$tax],
            'field' => 'term_taxonomy_id',
        );
    }

    return $query;
}

1
আপনি কি ডিবুগ বার প্লাগইনটি ব্যবহার করে দেখেছেন?
কায়সার

WP_Queryআপনার কেস (8 এমবি ফাঁস হয়ে গেলে) কতগুলি পোস্ট এনেছে?
ইউজিন মানুইলভ

উত্তর:


14

ডব্লিউপি হ্যাকারদের উপর দুর্দান্ত প্রতিক্রিয়া: http://lists.automattic.com/pipermail/wp-hackers/2012- জুন/ 043213.html

আপনি এই ক্যোয়ারীটি দিয়ে কী করছেন, সম্পূর্ণ পোস্টের সামগ্রী সহ মেলামেশায় প্রতিটি মেলানো পোস্ট লোড করছে। আপনি কল্পনা করতে পারেন, এটি সম্ভবত বেশ কিছু আইটেম।

পরিবর্তে ডাব্লুপিউকিউয়েরিতে 'ফিল্ডস' => 'আইডি' পাস করতে পারেন পরিবর্তে ম্যাচের পোস্ট_আইডগুলির একটি তালিকা ফিরে আসার জন্য, যা স্মৃতি (এবং প্রসেসিংয়ের সময়) উল্লেখযোগ্যভাবে হ্রাস করতে পারে:

http://codex.wordpress.org/Class_Reference/WP_Query#Post_Field_Parameters


3

এখানে উল্লেখ করা মেমরি সমস্যা নিয়ে গবেষণা করতে গিয়ে এই হোঁচট খেয়েছে।

এই ক্ষেত্রে, আপনি আইডি ক্যাপচার করতে বাফারিংয়ের পরিবর্তে get_the_id ব্যবহার করতে পারেন, এবং আপনি অনুসন্ধান ক্ষেত্রগুলিকে কেবল আইডিতে অন্তর্ভুক্ত করতে সংকুচিত করতে পারেন।


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