Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 服务器端延迟加载与客户端延迟加载_Javascript_Php_Hide_Lazy Loading_Infinite Scroll - Fatal编程技术网

Javascript 服务器端延迟加载与客户端延迟加载

Javascript 服务器端延迟加载与客户端延迟加载,javascript,php,hide,lazy-loading,infinite-scroll,Javascript,Php,Hide,Lazy Loading,Infinite Scroll,我一直在做一些关于无限滚动的研究,发现人们称之为“惰性加载”。现在,我已经在我的一个网站元素(聊天盒)上完成了这项工作,现在我有两种方法。但是我不能决定哪一个比另一个更有效。以下是我的方法: 假设我有1000000行来自数据库的数据,我需要获取所有这些数据 第一路: 从数据库加载内容,在服务器端代码(PHP)上截断它,然后只显示前50个。 当用户在页面上滚动时,将发送另一个请求以再次获取结果并显示下一个50,依此类推 第二条道路: 从数据库加载内容,在我的HTML中将其呈现为隐藏元素,但仅显示前

我一直在做一些关于无限滚动的研究,发现人们称之为“惰性加载”。现在,我已经在我的一个网站元素(聊天盒)上完成了这项工作,现在我有两种方法。但是我不能决定哪一个比另一个更有效。以下是我的方法:

假设我有1000000行来自数据库的数据,我需要获取所有这些数据

第一路
从数据库加载内容,在服务器端代码(PHP)上截断它,然后只显示前50个。 当用户在页面上滚动时,将发送另一个请求以再次获取结果并显示下一个50,依此类推

第二条道路
从数据库加载内容,在我的HTML中将其呈现为隐藏元素,但仅显示前50个,然后在用户滚动时,再显示50个隐藏元素

第一种方法是,每当需要显示更多结果时,从服务器请求。 第二种方法只是从服务器执行一个请求,然后隐藏结果,除了前几个应该显示的结果

我做这两件事都没有问题。 现在的困境是,第一种方法是发送更多的HTTP请求,而第二种方法(尽管只发送一个HTTP请求)是在单个请求中获取大量数据,这可能会很慢


哪种方法“更好”,如果还有其他选择,请告诉我。

我知道这是一个老问题,但我想给出我的意见:

第一路

总是首选,特别是对于如此多的行,仅请求设置数量的行更有效,如果用户希望看到更多,例如单击下一页,则向服务器发出另一个请求以获取下一页,响应时间将更好,如果在将列表返回给用户之前还需要进行其他处理,那么客户端也可以更容易地操作列表。 您还需要确保在DB查询中应用了限制,否则会将所有对象加载到内存中,这是不高效的

第二条道路

如果您一次获取1000000行,用户将不得不等待响应返回,这可能会导致糟糕的用户体验。同时,由于返回的行数不断增加,响应时间将不断增加,最终您可能会遇到超时,还应考虑在返回之前将所有这些对象加载到服务器中的内存中。
我看到的这种方法的唯一用例是,如果您有一个不随时间增长的列表,或者您有一组不影响响应时间的项目数。

我认为第一个选项看起来更好,除非您不截断获取的记录,我想您以后需要类似于在SELECT语句中使用LIMIT来返回数字结果(这里你提到的是50个)。当您的用户需要下50条记录时,执行AJAX调用仅获取下50条记录。不要一次加载所有1X10^6结果。您的两种方法可以获得整个结果集。只得到你需要的。尼克,你说得对。我会的。我想第1条路+SQL限制就是要走的路