我如何在不重写整个应用程序(Laravel + jQuery, SPA风格)的情况下块结果(延迟加载?)


How can I chunk results (lazy load?) without rewriting my whole application (Laravel + jQuery, SPA style)

我开发了一个带有单页应用概念的web应用程序,但没有使用任何现代技术和框架。所以我有一个jQuery页面,动态地请求数据到本地主机-一个Laravel实例,编译数据库中的条目(在给定的时间间隔内)。

所以客户端想要看到上周的所有条目,应用程序工作正常。但如果他想看上个月的结果…它们太多了,PHP的默认执行时间不足以处理所有数据(30秒)。当然,我可以很容易地覆盖这一点,但是随后jQuery客户端将循环遍历这些对象数组并对它们进行操作(排序、查找、求和……)。所以我甚至不确定jQuery是否能处理这么多数据。

所以我的问题可以分为两个:

  1. 可以使用laravel ->paginate(),以便jQuery的ajax请求也可以块数据?这是如何工作的(希望以一种不强迫我重写所有代码的方式)。

  2. 如何在客户端存储大量信息?这只是暂时的,但用户会在我的网页上逗留相当长的时间,我不希望他们每次按下按钮都要等5分钟

谢谢。

如果您希望为存储在备份的中的大量数据提供接口,则应该对数据进行分页。这是一种标准的方法,所以我相信你的客户会同意的。

使用分页是非常简单的-查看这里的文档为Laravel 5.0: http://laravel.com/docs/5.0/pagination

为了在后端分页结果,您需要在查询中调用paginate($perPage)而不是在控制器中调用get(),如下所示:

$users = User::whereIsActive(true)->paginate(15);

这将返回每页15条记录的分页结果。页码将从请求的 Page 参数中获取。为了获得第三个页面的用户,你需要你的前端jQuery应用程序发送一个请求到URL,如:

/users?page=3
我不建议在前端应用程序中缓存数据。数据可以被其他用户更改,而您甚至不会知道。有了分页,你的请求应该是轻量级的,不用再担心请求被发送去获取每一页的结果。

不确定你是否订阅了laravast,但Jeffery Way在解释Laravel的功能方面非常出色,我强烈推荐他的视频。

简而言之,您可以对结果进行分页,然后在视图中,当您对项目调用foreach时,您可以对结果进行array_chunk(),以便按照您需要的方式显示它们。但是分页的结果将在URL中使用查询来获取,我不确定这是你想要的,如果你已经使用了很多jQuery来保持在同一页面上的一切。

https://laracasts.com/lessons/crazy-simple-pagination

但是假设你已经用你已经为json数据编写的jQuery对结果进行了分页…

您还可以使用查询作用域来获取所需的数据,以便在一定时间内创建用于ajax的简单api。我想那可能就是你要找的。

假设你已经用你的javascript手动做了一些分页,我将会这样做。

  1. 创建几个查询范围以过滤不同时间长度的数据
  2. 创建简单的路由,使用查询范围
  3. 从URI获取结果
  4. 从执行ajax请求的路由获取json数据到创建的uri

查询范围的更多信息:http://laravel.com/docs/5.1/eloquent#query-scopes