কার্নেল ইভেন্টস :: REQUEST ক্যাশেড পৃষ্ঠাগুলিতে নিক্ষেপ করা হয় না


13

পৃষ্ঠার লোডে কিছু ক্রিয়া সম্পাদনের জন্য আমি একটি কর্নেল এভেন্টস :: রিকুয়েস্ট ইভেন্ট গ্রাহককে কার্যকর করার চেষ্টা করছি।

অনুরোধ করা পৃষ্ঠাটি দ্রুপাল ক্যাশে উপস্থিত রয়েছে তা নির্বিশেষে আমার এই ইভেন্টটি চালানোর প্রয়োজন - এটি মনে হয় যে কার্নেল এভেন্টস :: রিকুইয়েস্ট ফায়ার করে না যখন দ্রুপাল ক্যাশে থেকে কিছু সরবরাহ করে।

এটি অর্জনের জন্য আমি কোন ইভেন্ট ব্যবহার করতে পারি, বা মিডলওয়্যারের কোনও রূপ হিসাবে আমার প্রয়োজনীয়তাগুলি প্রয়োগ করতে হবে?


1
অনুরোধ ইভেন্টটি ট্রিগার করা উচিত, অন্যথায় কোনও প্রতিক্রিয়া হবে না। এই প্রোগ্রামটিতে আপনার ইএস খারাপ ওজন অত: পর আপনার ইএস আলোড়ন সৃষ্টি হবে না আরও এবং ঘটনার প্রসারণ http_middleware.page_cache (অথবা গতিশীল পৃষ্ঠা ক্যাশে) পরিষেবা বাঁধন হয়।

ES ওজন / অগ্রাধিকার 20

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

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

উত্তর:


14

গতিশীল ক্যাশে অগ্রাধিকারের সাথে একটি ইভেন্ট সাবস্ক্রাইব করে 27. আপনি যদি চান যে আপনার কোডটি আগে চলে তবে আপনাকে একটি অগ্রাধিকার> 27 ব্যবহার করতে হবে:

  public static function getSubscribedEvents() {
    $events = [];

    // Run after AuthenticationSubscriber (necessary for the 'user' cache
    // context; priority 300) and MaintenanceModeSubscriber (Dynamic Page Cache
    // should not be polluted by maintenance mode-specific behavior; priority
    // 30), but before ContentControllerSubscriber (updates _controller, but
    // that is a no-op when Dynamic Page Cache runs; priority 25).
    $events[KernelEvents::REQUEST][] = ['onRequest', 27];

যা ডায়নামিকপেজক্যাশসবসক্রাইবার :: অন রিকোয়েস্ট .. চালায়


অগ্রাধিকার 20

আমি মনে করি আপনার সমস্যাটি ডায়নামিক ক্যাশে থেকে আসা ইভেন্টটির সাথে রয়েছে, আমি আমার উত্তরটি সম্পাদনা করেছি।
কে 4

ধন্যবাদ @ 4 কে 4, তবে অগ্রাধিকার 30 এ সেট করা সত্ত্বেও এটি এখনও একই আচরণ করে (আমি মডিউলটি পুনরায় ইনস্টল করেছিলাম এবং পরিবর্তনগুলি করার পরে সমস্ত ক্যাশে সাফ করেছি)। অন্য কোন ধারণা?

দুটি ক্যাশে আছে। এখন যে আপনার গতিশীল ক্যাশে অগ্রাধিকার আছে সেখানে পৃষ্ঠা ক্যাশে এখনও আছে। পৃষ্ঠার ক্যাশেটি প্রধান কার্নেলের আগে কার্যকর করা হয়। আপনি এই মডিউলটি আনইনস্টল করতে পারেন এবং যদি এটি সম্পাদন না করে পারফরম্যান্স ঠিক থাকে।
4k4

আমি নিশ্চিত করতে পারি যে এটি আমার জন্য কাজ করেছে। আমার পুনর্নির্দেশ ছিল যা কেবল একবার ঘটবে - পৃষ্ঠাটি ক্যাশে হওয়ার আগে। আমি যখন অগ্রাধিকার যোগ করেছি ['checkForRediret', 30];তখন এটি প্রত্যাশার মতো কাজ করেছিল।
সাইক্লোনকোড

6

ড্রুপাল 8 এ দুটি স্তরের ক্যাশে, পৃষ্ঠা ক্যাশে এবং গতিশীল পৃষ্ঠা ক্যাশে রয়েছে।

হ্যাঁ আপনি 4k4 @ উল্লিখিত হিসাবে গতিশীল পৃষ্ঠা ক্যাশে বাধা দিতে পারেন। আপনার যে সমস্যাটি হচ্ছে তা পৃষ্ঠা ক্যাশে বাধা দেওয়ার সম্ভাবনা বেশি। চাবিটি এখানে রয়েছে

এর জন্য কয়েকটি সমাধান রয়েছে:

  1. নতুন ক্লাস যুক্ত করুন যা 'HttpKernelInterface' প্রয়োগ করে এবং 200 এর চেয়ে উচ্চ অগ্রাধিকারের সাথে 'http_middleware' নিবন্ধন করুন (280 করবে)। রেফারেন্সের জন্য 'পেজক্যাস' শ্রেণি এবং বাস্তবায়ন দেখুন।

  2. 'সার্ভিসপ্রাইডারবেস' থেকে প্রসারিত করে বিদ্যমান 'পেজক্যাচে' পরিবর্তন করতে নতুন শ্রেণি তৈরি করুন। এখানে রেফারেন্সের জন্য এটি পরীক্ষা করে দেখুন । তারপরে, 'পেজক্যাচ' বাড়ানোর জন্য নতুন শ্রেণি তৈরি করুন।

এখানে কোড রেফারেন্স রয়েছে:

এটি স্ট্যাটিক ক্যাশে সার্ভিসপ্রোভাইডার.এফপি:

/**
 * Modifies the language manager service.
 */
class StaticCacheServiceProvider extends ServiceProviderBase
{
  /**
   * {@inheritdoc}
   */
  public function alter(ContainerBuilder $container)
  {
    // Overrides language_manager class to test domain language negotiation.
    $definition = $container->getDefinition('http_middleware.page_cache');
    $definition->setClass('Drupal\your_module\StackMiddleware\StaticCache');
  }
}

এটি স্ট্যাটিক ক্যাচ.এফপি:

/**
 * Executes the page caching before the main kernel takes over the request.
 */
class StaticCache extends PageCache
{
  /**
   * {@inheritdoc}
   */
  public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true)
  {
    // do special logic here.

    $response = parent::handle($request, $type, $catch);

    return $response;
  }
}

আশা সাহায্য করে।


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