当前位置: 首页 > 知识库问答 >
问题:

Laravel 5.1面向对象的ajax响应缓存

巫马越彬
2023-03-14

我正在从事一个Laravel5.1项目,使用大量返回html块的ajax调用。

为了优化网站的速度,我想实现私人和公共响应缓存。

        return response()
        ->json($result)
        ->header('Cache-Control', 'public, max-age=300');

然而,以这种方式使用它不会保存在300秒内更新的帐户对象中。

是否有可能允许我清除请求的响应缓存,当且仅当返回的对象已经更新?

共有2个答案

高博涉
2023-03-14

如其他所述,客户端浏览器需要一个请求来知道数据已经被更新。在你的情况下,我会考虑以下一些解决方案:

服务器端缓存(数据仍然需要网络传输):

>

  • 根据您的环境,我将使用过时和更新策略设置Nginx FastCGI缓存。所以缓存总是服务(快速),缓存总是刷新。因此,在代码更新后,只有少数请求(一个或多个,取决于刷新缓存的时间)被提供过时的数据。此缓存是基于URL的,所以如果您的内容是基于cookie/会话的,它可能会变得棘手。

    正如@ZachRobichaud所说,您可以使用Laravel缓存并设置较低的缓存保留时间。比如说10秒,这意味着在您的内容更新后,请求将过期最多10秒。我不知道在laravel上有一种“过时且更新”的方式,但它可以通过队列来完成。

    客户端缓存(无需数据传输):

    如我所说,客户端需要知道数据已被更新以使缓存无效。

    >

  • 通常,对于资产,我们通过向文件URL添加GET参数来进行“缓存爆破”。比如“资产”?版本=1234,每次部署都会更改版本。由于标头缓存基于URL(和标头),URL更改将强制网络加载文件。未使用text/HTML内容类型响应进行测试,但如果您可以使用可以在中更改的参数更新URL,则值得一试。以env`为例。如果您有CD/CI或其他可在部署时触发的内容,则可以动态执行。在这种情况下,您可以“无限”缓存这些内容,因为“刷新”将通过更改URL参数来完成。

    您可以查看stale while revalidate缓存控制标题值,该值似乎工作相同:始终为缓存提供服务,如果缓存过期,则刷新缓存(还可以查看其他参数,可以为您提供一些想法)。注意兼容性(没有IE或Safari)。

    Laravel缓存可能是实现和测试最快的,看看结果是否适合您。这还取决于负载大小,如果负载很大,浏览器缓存确实更好。如果带宽不是问题,主要是服务器响应时间:在这种情况下,Laravel缓存就可以解决这个问题。

  • 黄永怡
    2023-03-14

    也许您可以尝试使用下面这样的服务器端缓存。对不起,这太粗鲁了

    function sometest(User $user)
    {
    
        /** . . .conditions to check if some data has changed . . . **/
    
    
        $jsonResponse = Cache::remember(Auth::id() . "_sometest", 300, function () use ($user)
        {
            $result = $user->all(); //get result here
    
            return $result;
        });
    
        return response()->json($jsonResponse);
    }
    

    您可以在这里阅读缓存

    你也可以试试

    • 配置缓存:php artisan配置:缓存
     类似资料:
    • 我有从我的网页生成的AJAX POST请求,可能有多个POST请求具有相同的POST数据。但是响应可能会有所不同,我希望确保我没有得到这些请求的缓存响应。我需要每个请求点击网页。 我假设对POST请求的响应不会被缓存,这对吗?

    • 我调用服务器数据通过使用ajax在index.html.它是完美的获取这些数据。现在,我正在和服务人员一起工作。我可以缓存所有的静态资产(图像,js,css),并在Chrome开发工具的应用程序选项卡中的缓存存储中检查这些缓存的资产。我可以在网络选项卡中看到这些资产也被缓存(磁盘缓存)。 现在,我想使用ServiceWorker缓存这些ajax响应(图像文件数组)。在“网络”选项卡中,我可以看到它

    • 面向对象是一种符合人类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。 提到面向对象,自然会想到面向过程,面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一一实现,使用的时候依次调用就可以了。面向对象则是把构成问题的事务按照一定规则划分为多个独立的对象,

    • 本文向大家介绍js实现对ajax请求面向对象的封装,包括了js实现对ajax请求面向对象的封装的使用技巧和注意事项,需要的朋友参考一下 AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。 在js中使用ajax请求一般包含三个步骤:               1、创建X

    • 问题内容: 我有这段HT​​ML: 我通过一个简单的.ajax调用来获取 如果我用它过滤: 它工作正常,我得到整个div的id =“ 1”, 但是如果使用: htmlFiltered变量是一个空对象。我不知道我在做什么错。 问题答案: 您应该这样存储它: 编辑:您获取html的方式有效,但是不建议这样做。 您无法获取最后一个元素,因为您正在使用而不是,因此您应该具有: 代替 另外,W3C建议不要使

    • 面向对象 程序设计方法 程序设计描述系统如何通过程序来实现的过程,其为一种设计方法与语言实现无关。常见的设计方法有面向流程与面向对象。 面向过程 以程序的过程为中心,采用自定而下逐步细化的方法来实现。常见的面向过程语言有 C、Fortran、Pascall。 面向对象 将对象作为程序的基本单元,将程序分解为数据和操作的集合。常见的面向过程语言有 smalltalk(也是 Objective-C 的