কীভাবে জেসনকে ডাব্লুপি-সুপার ক্যাশে দিয়ে ক্যাশে করবেন


15

একটি নতুন প্রকল্পে আমরা কাস্টম বিষয়বস্তুর ধরণের জন্য স্ট্যাটিক এইচটিএমএল ফাইলগুলি তৈরি করতে ডাব্লুপি-সুপার-ক্যাশে (ক্লায়েন্টের পছন্দসই প্লাগইন) ব্যবহার করছি। তবে আমরা সবকিছু ঠিকভাবে ক্যাশে হচ্ছে কিনা তা জানার চেষ্টা করছি are

এটি একটি 2 অংশ প্রশ্ন।

1) আমরা তৈরি থিমটি পেজ টেমপ্লেটগুলিকে জেসসন আউটপুট ব্যবহার করে যা এজ্যাক্স কলগুলির মাধ্যমে অন্তর্ভুক্ত। অর্থাত। আপনি যদি পৃষ্ঠাটি হিট করেন: theurl.com/sample - আপনি খাঁটি জসন পাবেন। প্রতিটি পৃষ্ঠা এবং পোস্টের একটি জাভাস্ক্রিপ্ট সংস্করণ থাকা অবস্থায়, আজাক্স এই থিমের সামনের প্রান্তটি চালিত করে। আমরা এই ফাইলগুলিতে শিরোলেখ এবং পাদচরণ সরিয়ে ফেলেছি যাতে এটি খাঁটি জসন হয় এবং আমরা কীভাবে নির্ধারণ করতে পারি যে জসনকে ক্যাশে করা হচ্ছে তা নির্ধারণ করতে চেষ্টা করছি। তাত্ত্বিকভাবে ডেটা ক্যাশে হবে কারণ এটি প্রযুক্তিগতভাবে একটি পৃষ্ঠা ওয়ার্ডপ্রেস দ্বারা পরিবেশন করা হয়েছিল। তবে, এটি ক্যাশে করা হচ্ছে কিনা তা আমরা কীভাবে আবিষ্কার করব?

2) আমরা কিছু নির্দিষ্ট পোস্ট ডেটা পরিবেশন করতে json এপিআই প্লাগইন ব্যবহার করছি। http://wordpress.org/extend/plugins/json-api/ উদাহরণস্বরূপ, আসুন আমরা ধরা যাক আমরা প্লাগইনের ডিফল্ট পদ্ধতিতে আউটপুট ব্যবহার করছি এবং এই পৃষ্ঠাটি হিট করছি: আমার url.com/category/news?json=1 - করে এই আউটপুটটি ক্যাশে হচ্ছে কীভাবে আমরা কীভাবে যাচাই করতে পারি? যদি এটি ক্যাশে না করা হয় তবে কোন পদ্ধতিটি এটি ঘটায়?

এই অনলাইন সম্পর্কে খুব বেশি তথ্য আছে বলে মনে হয় না, তাই বাধ্য এবং অপ্টিমাইজড ওয়ার্ডপ্রেস সাইটগুলি তৈরি করার চেতনাতে একজন ভাইকে সাহায্য করতে

উত্তর:


9

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

    $transient_key = 'my-transient-key'; 
    $data = get_transient( $transient_key ); 

    if ( $data == '' ) { 
      $args = array(

    'post_type' => 'brand', 
    'posts_per_page' => 50

  );

  $postsArray = array();  
  // The Query
 query_posts( $args );

  // The Loop
  while ( have_posts() ) : the_post();

    $brand_id = get_the_ID();
    $slug = basename(get_permalink());
    $title = get_the_title();
    $description = get_the_content();

                $posts = array(

                   'brand_id' => $brand_id,
                   'machine_name' => $slug,
                              'postTitle' => $title,
                   'description' => $description,

                   );

    array_push($postsArray,$posts);


  endwhile;

   $data = json_encode($postsArray);


 set_transient( $transient_key, $data, 60 * 60 * 24 ); // one day
 }  // now all the brand information is cached as one table call.

echo $data;

সুন্দর, থাম্বস আপ !!!
দিপেশ কেসি

6

ডাব্লুপি সুপার ক্যাশে আপনার ওয়ার্ডপ্রেস সাইটের পৃষ্ঠাগুলি কিছু এইচটিএমএল ট্যাগের জন্য এটি ক্যাশে দেওয়ার আগে পরীক্ষা করে।

আপনার পৃষ্ঠাগুলিতে সম্ভবত </html>ট্যাগ নেই (সাধারণ সমস্যা), সেক্ষেত্রে এমন কিছু যুক্ত করার চেষ্টা করুন //</html>- এটি একটি কার্যকরী, এবং ডাব্লুপি সুপার ক্যাশে আপনার পৃষ্ঠাগুলির ক্যাশেড সংস্করণ তৈরি করা উচিত।

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

ডনঞ্চার (ডাব্লুপি সুপার ক্যাশের বিকাশকারী) নিজস্ব কথায় , "এটি অর্ধেক উত্পন্ন পৃষ্ঠাগুলি ক্যাশে করা বন্ধ করে দেবে।"


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

3

নিরাপত্তা দ্রষ্টব্য:Content-Type: text/html ডাব্লুপি সুপার ক্যাশে যে উপযুক্ত application/jsonমান সহ প্রেরণ করে যে শিরোনামকে ওভাররাইড করার কোনও উপায় না থাকলে এই (এবং অন্যান্য সমাধানগুলি) ব্যবহার করা উচিত নয় । JSON কে হিসাবে প্রেরণ করা হচ্ছেtext/html ব্রাউজারকে এটি এইচটিএমএল হিসাবে রেন্ডার করবে, যা সম্ভবত কোনও এক্সএসএস ভেক্টর হতে পারে।

দেখে মনে হচ্ছে এটি সার্ভার লেয়ারে করা দরকার, যেহেতু ডাব্লুপিএসসি প্রয়োজনীয় হুক সরবরাহ করে না।


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

আপনি যদি REST এপিআই এর v2 ব্যবহার করেন তবে আপনার REST_REQUESTপরিবর্তে ব্যবহার করা উচিতJSON_REQUEST

ডাব্লুপি সুপার ক্যাশে কিছু পরিবর্তনের ক্ষেত্রে 22 এবং # 79 এর সাবস্ক্রাইব করা ভাল ।

/**
 * Tell WP Super Cache to cache API endpoints
 *
 * @param string $eof_pattern
 *
 * @return string
 */
function wcorg_json_cache_requests( $eof_pattern ) {
    global $wp_super_cache_comments;

    if ( defined( 'JSON_REQUEST' ) && JSON_REQUEST ) {
        // Accept a JSON-formatted string as an end-of-file marker, so that the page will be cached
        $json_object_pattern     = '^[{].*[}]$';
        $json_collection_pattern = '^[\[].*[\]]$';

        $eof_pattern = str_replace(
            '<\?xml',
            sprintf( '<\?xml|%s|%s', $json_object_pattern, $json_collection_pattern ),
            $eof_pattern
        );

        // Don't append HTML comments to the JSON output, because that would invalidate it
        $wp_super_cache_comments = false;
    }

    return $eof_pattern;
}
add_filter( 'wp_cache_eof_tags', 'wcorg_json_cache_requests' );

ওহে. আমি wp_cache_eof_tags ফিল্টার ব্যবহার করি তবে এখন (এবং কেবল যখন ক্যাচিং সক্ষম করা থাকে) আমার একটি ত্রুটি রয়েছে: XMLHttpRequest cannot load http://api.mywebsite.com/wp-json/wp/v2/posts. Origin http://mywebsite.com is not allowed by Access-Control-Allow-Origin.আমি কীভাবে এটি সংশোধন করতে পারি?
asukasz Florczak

যেহেতু আপনি একটি পৃথক ডোমেনে REST এপিআই পেয়েছেন তাই আপনার মূল সাইটটি সম্ভবত Access-Control-Allow-Originক্রস-অরিজিন অনুরোধের অনুমতি দেওয়ার জন্য একটি শিরোনাম রফতানি করছে । আমি অনুমান করছি যে ক্যাশেড পৃষ্ঠাগুলি সেই শিরোলেখকে আউটপুট দিচ্ছে না।
ইয়ান ডান

0

আমি এই সমস্যাটিও পূরণ করেছি। আমি এপিআই হতে আমার কিছু কোড লিখেছিলাম। যখন প্রতিক্রিয়ার ধরণটি এক্সএমএল ছিল, তখন ক্যাশে কাজ করেছিল। কিন্তু যখন প্রতিক্রিয়ার ধরণটি জসন ছিল, এটি কার্যকর হয়নি।

এই বাগটি ঠিক করতে আমার কয়েক ঘন্টা সময় লাগে।

এটা আমার জন্য কাজ।

এখানে চিত্র বর্ণনা লিখুন

আমার পরিবর্তনের মতো আপনার কোডটি আপডেট করুন।

এটা এখন আমার জন্য কাজ করে।


5
দয়া করে আসল কোড পোস্ট করুন, কোডের একটি চিত্র নয়।
পিটার গুজন

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