Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.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
Php 显示大量数据的最佳方式_Php_Javascript_Mysql - Fatal编程技术网

Php 显示大量数据的最佳方式

Php 显示大量数据的最佳方式,php,javascript,mysql,Php,Javascript,Mysql,处理网页上大量数据项的最佳方法是什么? 假设我有一个数据库,表中有5000条记录,其中包含song_姓名、作者姓名、song_id、发布人;我想在一个页面上建立一个包含所有歌曲的播放列表。该页面上还有一个播放器,可以根据页面上显示的播放列表条目播放歌曲。 我试图从该表中提取所有5000个条目,并用它们构建一个javascript对象,然后处理该对象,我构建了播放列表、在播放列表中搜索等等。但是这需要用户端大量的资源和大量的页面加载时间,因为有很多条目!而且页面速度很慢。 是否最好将所有数据加载到

处理网页上大量数据项的最佳方法是什么? 假设我有一个数据库,表中有5000条记录,其中包含song_姓名、作者姓名、song_id、发布人;我想在一个页面上建立一个包含所有歌曲的播放列表。该页面上还有一个播放器,可以根据页面上显示的播放列表条目播放歌曲。 我试图从该表中提取所有5000个条目,并用它们构建一个javascript对象,然后处理该对象,我构建了播放列表、在播放列表中搜索等等。但是这需要用户端大量的资源和大量的页面加载时间,因为有很多条目!而且页面速度很慢。 是否最好将所有数据加载到一个对象中,并使用JavaScript对播放列表的每100条记录进行分页,还是从数据库中获取分页结果并更新播放列表更好?考虑到这样一个事实,即如果播放器激活了“随机播放”按钮,它可能会随机播放到用户数据库中的任何歌曲,而不仅仅是可见播放列表中的当前歌曲,请尝试以下操作:


我想知道,但也许它是有效的。

我认为分页是你最好的选择。例如,只需创建一个100的限制,并使用AJAX提取下一个100。如果客户端打开了shuffle,只需向服务器发送另一个请求,并让它调用执行以下操作的函数:

统计数据库中的行总数 使用随机函数获得100个随机数 现在创建一个稍微复杂的查询,从基于数据库的数据库中获取记录 在他们的行号上: 函数getRandomTracks$limit{

  $total = $this->db->count_all('table_tracks');

  //Get random values. Speed optimization by predetermine random rownumbers using php

  $arr = array();
  while (count($arr) < $limit) { 
    $x = mt_rand(0, $total); //get random value between limit and 0
    if (!isset($arr[$x])) { //Random value must be unique
      //using random value as key and check using isset is faster then in_array
      $arr[$x] = true; 
    }
  }

  //Create IN string
  $in = implode(',', array_keys($arr));

  //Selection based on random rownumbers
  $query = $this->db->query('SELECT * FROM
      (SELECT  @row := @row + 1 as row, t.*
         FROM `table_tracks` t, (SELECT @row := 0) r) AS tracks
     WHERE `row` IN(' . $in . ')');

  return $query->result();
}


我正在使用一个类似的功能,也将处理超过300.000大量的曲目,所以我相信这将工作

使用ajax以100步或更多步加载数据,只需尝试一下

在记录集上循环并每次增加限制:

<?php
$Step = 100;
$u_limit = 0;
$sql = "SELECT song_id FROM $MySQL_DB.songs";
$data = mysql_query($sql, $dblk);
$numer_of_entries = mysql_num_rows($data);
while($o_limit < $numnumer_of_entries)
{
    $o_limit = u_limit + $Step;
    $sql = "SELECT * FROM $MySQL_DB.songs order by id DESC LIMIT $u_limit, $o_limit";
    $data = mysql_query($sql, $dblk);
    while($row = mysql_fetch_array($data))
    {
        // built an array and return this to ajax
    }
    $u_limit += $Step;
}

即使您使用jQuery或其他库,也很难将整个数据加载到客户端程序,因为关键因素不是您使用的代码/sdk,而是浏览器本身! 顺便说一下,chrome是最快的,而IEVER.10是最低的

您可以参考以下链接:

因此,您应该做的是将客户端逻辑移动到服务器端,就像其他人建议的那样


正如您所提到的,对所有数据进行分页,但只使用javascript,本质上与无分页相同。

您当然会从服务器获得分页响应。是的,您不可能一次获得5000条记录并将它们全部加载到本地内存中。我会从服务器获得分页结果。如果“随机播放”模式打开,而下一首歌曲不在本地列表中,则从服务器获取它。但首先,我需要从服务器获取所有行,并为“随机播放”选项构建整个播放列表。在这之后,是否最好获得分页条目?如果我只是从已经创建的jquery对象中获取结果,然后设置分页偏移量并更新页面html,速度不会更快吗?我会使用MySQL的限制功能,并在每次调用时增加索引。@SajjanSarkar我明白了。所以最好是获得条目计数,如果洗牌模式是活动的,那么我只会得到一个介于0和计数之间的随机条目;然后从该偏移位置的播放列表中提取歌曲。对吗?请让我检查一下。这对于我所需要的东西可能非常有用为什么代码标记在我的示例中不起作用。。试图把它放在代码标签之间:/Not它正在工作。克里斯,我知道这是个好办法。我考虑过这个问题,我认为这是最好的使用方法。但每次新歌开始时,我都会称之为洗牌。这在任何情况下都可以使用,对吗?是的,如果您只需要1条随机记录,您可以跳过数组并分解部分。谢谢。这使我的申请比以前顺利多了。谢谢你的回复。我会这样做。我只是想知道如何正确处理洗牌函数。我不喜欢在循环中使用查询。100首歌可以接受100个查询,但1000首歌将产生1000个查询,以此类推。。我建议使用我的答案进行洗牌,并使用我的答案进行普通查询,以获得100条记录,因为这要快得多。试试看,你不需要1000条查询。在这种情况下,您需要5000/100=50!或者您尝试使用步骤500,5000/500=10。或者您执行一次查询,将其添加到存储在会话全局var$\u会话中的数组中,并在步骤100中迭代该数组。这只是我看到的另一种可能性。谢谢你的帖子!这对我来说是一个很好的信息。