gpt4 book ai didi

php - 为什么循环不能均匀缩放?

转载 作者:行者123 更新时间:2023-11-29 08:25:04 25 4
gpt4 key购买 nike

我不相信这是重复的,我已经寻找过它,但真的不知道该怎么调用它。

我想知道为什么一个比另一个循环大十倍的循环运行时间不会长十倍。

我正在做一些测试,试图弄清楚如何使我的网站更快、更具 react 性,因此我在函数之前和之后使用了 microtime()。在我的网站上,我不确定如何在不遍历整个表的情况下提取具有某些属性的表行列表,我想知道这是否是拖慢我速度的原因。

因此使用以下循环:

echo microtime(), "<br>";
echo microtime(), "<br>";
session_start();
$connection = mysqli_connect("localhost", "root", "", "") or die(mysqli_connection_error());;
echo microtime(), "<br>";
echo microtime(), "<br>";
$x=1000;
$messagequery = mysqli_query($connection, "SELECT * FROM users WHERE ID='$x'");
while(!$messagequery or mysqli_num_rows($messagequery) == 0) {
echo('a');
$x--;
$messagequery = mysqli_query($connection, "SELECT * FROM users WHERE ID='$x'");
}
echo "<br>";
echo microtime(), "<br>";
echo microtime(), "<br>";

我得到以下输出和类似的输出:

0.14463300 1376367329
0.14464400 1376367329
0.15548900 1376367330
0.15550000 1376367330 < these two
[a's omitted, for readability]
0.33229800 1376367330 < these two
0.33230700 1376367330

~18-20 微秒,还不错,没有人会注意到。所以我想知道随着我的网站的发展会发生什么。如果我要搜索 10 倍(10,000)个表行,会发生什么?

0.11086600 1376367692
0.11087600 1376367692
0.11582100 1376367693
0.11583600 1376367693
[lots of a's]
0.96294500 1376367694
0.96295500 1376367694

~83-88 微秒。为什么不是 180-200 微秒?启动和停止循环需要时间吗?

更新:为了查看是否是mySQL添加变量,我在没有mySQL的情况下进行了测试:

echo microtime(), "<br>";
echo microtime(), "<br>";
session_start();
$connection = mysqli_connect("localhost", "root", "W2072a", "triiline1") or die(mysqli_connection_error());;
echo microtime(), "<br>";
echo microtime(), "<br>";
$x=1000000;
while($x > 10) {
echo('a');
$x--;
}
echo "<br>";
echo microtime(), "<br>";
echo microtime(), "<br>";

现在看来,在 100 万时,需要约 100 毫秒(对吗?),在 1000 万时,需要约 480 毫秒。所以,我的问题仍然存在。为什么较大的循环移动得更快?这并不重要,我不会以此为基础来规划我的整个网站设计,但我很感兴趣。

最佳答案

通常,循环会线性缩放。

可能的错误:如果您还没有这样做,请考虑如果没有 id 900 的记录可能会发生什么。

我强烈建议使用 MySQL 通过 WHERE 子句来完成过滤工作,而不是通过这种方式对信息进行排序。它并不是真正可扩展的。

坦白说,这条线

while(!$messagequery or mysqli_num_rows($messagequery) == 0) {

对我来说没有意义。 $messagequery如果发生故障,并且您希望循环运行 mysqli_num_rows($messagequery) ,则为 false我认为不等于零。然而,上面的代码并不是这么做的。

如果mysqli_num_rows($messagequery)等于零,循环将继续。

如果mysqli_num_rows($messagequery)不等于零,循环将停止。

查看运算符优先级:http://php.net/manual/en/language.operators.precedence.php

这有助于回答您的问题吗?

关于php - 为什么循环不能均匀缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18200651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com