Json获取队列

时间:2016-05-04 14:52:43

标签: php mysql json ajax twitter-bootstrap

我在这里的第一篇文章,所以我希望我的要求很明确: - )

我有一个从远程网站读取JSON的php页面。 这个JSON包含一个名称列表,对于每个名称,我需要读取另一个包含这些ppl详细信息的JSON页面。

整个事情运行得很好但是很慢。在第一页中有大约100条记录,总共页面大约需要一分半钟。

我真的不认为有办法让它更快,我可以缓存数据,但第一次运行它仍然很慢。

我在想,如果我能以某种方式将整个过程放在后台,让用户在获取数据时继续做他的事情。

另外,如果我有更多用户做同样的事情(c的不同jsons页面),我想知道是否可以创建一个进程队列。

我的网站在linux服务器上运行,我不能把手放在服务器上,除了上传文件:( 该网站是用php + bootstrap编写的,我有一个mysql数据库。

提前感谢您提供任何可能的帮助:)

3 个答案:

答案 0 :(得分:0)

  

我在想,如果我能以某种方式将整个过程放在后台,让用户在获取数据时继续做他的事情。

在使用网络服务器时无法做到这一点,没有请求就无法发送数据。

或者@nerdylist说你可以使用ajax从服务器获取数据,同时向用户显示内容。

  

另外,如果我有更多的用户做同样的事情(c的不同jsons页面)我想知道是否以某种方式创建一个进程队列。

你可以做到这一点,但我认为用PHP不可能。然而,对我来说这似乎很难,因为你应该进行一些进程间的沟通。

最好的答案是使用线程+缓存系统,因为这里的瓶颈是用于获取json文件的I / O.线程允许您同时加载它们而不是顺序加载它们。但PHP在线程方面非常糟糕(没有内置支持),但有library这样做,但我不确定如果你无法访问服务器就可以使用它。

也许您可以将使用JSON的代码移植到客户端,方法是将其移植到javascript,这样您就不会因请求而浪费服务器的badwidth ...

Anoter解决方案是将JSON请求委托给另一个进程(用另一种支持线程的语言编写脚本并同时加载JSON)并通过exec或其他一些subprocess-call-magic调用它,然后读取输出那个过程......

答案 1 :(得分:0)

如果您正在获取JSON数据,我会完全从解决方案中删除PHP中间人,并使用来自Javascript的Ajax请求将数据直接导入网页。这些可以异步执行,因此如果花费一点时间就无所谓了。

当然,假设您可以安全地使用Javascript对您正在访问的任何服务进行身份验证(例如,如果您不能/不会向最终用户公开凭据,则可能会出现问题)。

答案 2 :(得分:0)

我不能公开我用来检索json的身份验证密钥,不幸的是......

您可以在此页面查看=> http://www.guyonwow.eu/grm/test.php 获取json并将其打印在屏幕上的速度有多慢。

以上是上述页面的超级简单代码:

<pre>
<?
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
@$json = file_get_contents("https://json.url");
if($json == false) {
    die('Error!');
}   
$decode = json_decode($json, true);
print_r($decode);
$mtime = explode(' ', microtime());
$totaltime = $mtime[0] + $mtime[1] - $starttime;
printf('<center>Page loaded in %.3f seconds.</center><br />', $totaltime);
?>
</pre>

如果我至少可以启动请求并让用户执行其他操作,并且在完成所有json的提取后,在他的通知框中显示一条消息,该消息也可以修复它。 关键是我不知道我怎么能让ajax在后台处理它。我想我可以尝试这样的东西(见另一篇文章)

$('.button').on('click', function() {
    $.ajax({
      url: "import.php",
      data: { id: $('#json_id').val(), param_2: $('#param_2').val() }
    }).done(function() {
      alert('Done importing');
    });
});

这会成功吗?