想询问是否有人通过此库一起使用过PHP和Firebase: https://firebase-php.readthedocs.io/en/latest/
由于某种原因,firebase中的每个键都需要很长时间才能退出。每个项目约700-800ms。 10个项目大约8秒,等等。为什么这么慢?
foreach ($data as $key => $value){
$this->database->getReference()->getChild($this->dbname)->getChild($userID)->getValue();
}
如果对象中有100个项目,则此循环可能永远持续。为什么这么慢,我该如何解决?
答案 0 :(得分:1)
以这种方式从Firebase读取数据,这些是影响性能的主要因素:
每个项目的总时间显然为700毫秒。没有任何魔术开关可以使此过程变得更快,您将不必从数据库中请求更多信息,也可以在更少的呼叫中完成请求。
提高性能的最常用方法:
答案 1 :(得分:0)
减少运行时间的最快方法是获取整个数据库的快照。
这是数据库的层次结构
Database hierarchy in firebase
下面是使用自定义函数downloadDatabase()检索数据的基本代码。
require __DIR__.'/vendor/autoload.php';
use Kreait\Firebase\Factory;
use Kreait\Firebase\ServiceAccount;
class accountInfo{
protected $database;
protected $dbname = "users";
public function __construct(){
$serviceAccount = ServiceAccount::fromJsonFile(__DIR__.'/secret/yoursecret.json');
$firebase = (new Factory)
->withServiceAccount($serviceAccount)
->create();
$this->database = $firebase->getDatabase();
}
public function downloadDatabase(){
return $this->database->getReference($this->dbname)->getValue();
}
}
$users = new accountInfo();
$array = $users->downloadDatabase();
现在,您的$ array具有完整的数据库快照。您可以使用foreach循环轻松整齐地显示所有数据。
foreach ($array as $key => $value) {
echo $key."<br>";
if(is_array($value)){
$value2 = $value;
foreach ($value2 as $key2 => $value2) {
echo "----";
echo $key2." : ".$value2."<br>";
}
}
echo "<hr>";
}
要测试代码的速度,请在代码开头使用它。
$start = microtime(true);
然后在文档末尾使用此
$time_elapsed_in_microsecs = microtime(true) - $start;
echo "<hr>Runtime : ".$time_elapsed_in_microsecs;