Symfony 4 - ذاكرة التخزين المؤقت لا تعمل؟

1

هذه هي وظيفة التحكم الخاصة بي

/**
* @Route(
*     path     = "/",
*     defaults = {"page": "1"},
*     name     = "products_show"
* )
* @Route(
*     path         = "/page/{page}",
*     requirements = {"page": "[1-9]\d*"},
*     name         = "products_show_by_page"
* )
* @Method("GET")
* @Cache(smaxage = "1800", public = true)
*/
public function showProducts(Request $request, int $page, PaginatorInterface $paginator, ProductRepository $products)
{
    $searchQuery = $request->query->get('q', '');
    $query = $products->findOrSearchAllJoinedToCategory($searchQuery);

    $pagination = $paginator->paginate($query, $page, Product::NUM_ITEMS);
    $pagination->setUsedRoute('products_show_by_page');

    return $this->render('product/products_show.html.twig', [
        'pagination'  => $pagination,
        'page'        => $page,
        'searchQuery' => $searchQuery
    ]);
}

وقمت بإضافة ملف KernelCache.php فارغ وإجراء تغييرات في index.php. نرى https://symfony.com/doc/current/http_cache.html#symfony-reverse-proxy وضبط APP_ENV على همز في .env

ولكن بعد هذه التغييرات ، ما زلت أحصل على 200 رد ، وليس استجابة 304. هل هناك أي مهام إضافية؟ (لدي نظام تطوير Xamp بسيط واختبار مع Firefox)

2 الاجابة

1
افضل جواب

أنت تخلط ذاكرة التخزين المؤقت للتحقق والانتهاء. عند تحديد الحد الأقصى للعمر المشترك ، يمكن لأي ذاكرة تخزين وسيطة إرجاع عنصر ذاكرة التخزين المؤقت بدلاً من إرسال الطلب إلى الخادم الخاص بك ، ولكن عندما تنتهي صلاحية ذاكرة التخزين المؤقت ، سيرسلون طلبًا عاديًا سيرد عليه خادمك برأس ذاكرة التخزين المؤقت لتحديد مدة الوسيط قد تخزن التخزين المؤقت الاستجابة. يتم استخدام الرأس 304 فقط مع التخزين المؤقت للتحقق عندما يتطابق ETag أو الطابع الزمني المعدّل الأخير مع الرمز من التطبيق الخاص بك. أنت مسؤول عن تنفيذ هذا المنطق. أنا على الهاتف المحمول ولا أريد البحث عن صفحة المستند ، ولكن يجب عليك مقارنة رؤوس الطلبات بالبيانات الحالية ، وإنشاء استجابة يدويًا ثم وضع علامة عليها على أنها غير معدلة. يجب أن تكون هناك أمثلة في المستندات ، ولكن لا تتردد في الاتصال بي إذا لم تتمكن من العثور عليها.

:مؤلف
0

شكرا دبرومان لإجابتك السريعة. لقد أضفت

//... $response->setEtag(md5($response->getContent())); $response->setPublic(); // make sure the response is public/cacheable $response->isNotModified($request);  return $response; 

والآن لدي إجابة 304. لكن ، الموقع ليس أسرع. لا يزال نفس الوقت كما كان من قبل. أيضا عندما ألقيت نظرة على symfony-demo

https://github.com/symfony/demo/blob/master/src/Controller/BlogController.php 

هنا فقط علامةCache (smaxage = "10"). وليس لديهم KernelCache في index.php

https://github.com/symfony/demo/blob/master/public/index.php 

أعتقد أن نهجي ليس هو الحل الصحيح ...

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام