第一个函数recentlyModified()
完全在1秒内运行,即使它正在轮询两个节目。我承认,它的参数要少很多,但每次演出大约需要0.5秒。PHP/MySQL很慢,想不明白为什么?
然而,第二个功能myList()
在4秒左右运行16秒,2秒钟运行11秒,1秒运行6秒。这当然是平均的。
<?php
include_once './php/loadanime.php';
function crunchyrollNews() {
echo('<iframe class="rss fullwidth fullheight" src="http://feeds.feedburner.com/crunchyroll/animenews?format=xml"></iframe>');
}
function recentlyModified($count) {
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;
$animedb = new mysqli("localhost", "animedeck", "W8a7fs5gu");
$query = $animedb->query("SELECT id, img, name, description FROM animedeck.animelist ORDER BY modified DESC LIMIT " . $count . "");
if($query) {
$result = $query->fetch_all();
echo '<div class="recentanimemodule">';
echo '<h1 class="h1 borderb">AnimeDeck Recent</h1>';
foreach($result as $id) {
echo '<div class="recentanimepiece">';
echo '<img class="recentanimeposter" src="';
echo $id[1];
echo '" />';
echo '<a class="recentanimeurl" href="'; //a href start
echo './viewanime.php?id=' . $id[0];
echo '">';
echo '<div class="recentanimename">';
echo $id[2];
echo '</div>';
echo '</a>'; //a href end
echo '<div class="recentanimedes">';
echo $id[3];
echo '</div>';
echo '</div>';
}
echo '</div>';
} else {
echo "Failed to retrieve entries.";
}
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
echo "This module was created in ".$totaltime." seconds";
}
function myList($status, $sort, $startindex, $count) {
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;
$animedb = new mysqli("localhost", "animedeck", "W8a7fs5gu");
$orderby;
$title = "Recent";
$rstatus = ", status='" . $status . "'";
if($status == "all") {
$rstatus = null;
}
if($startindex == null) {
$startindex = 0;
}
switch ($sort) {
case "recent":
$sort = "DESC";
$orderby="modified";
$title = "Recent";
break;
case "oldest":
$sort = "ASC";
$orderby="modified";
$title = "Oldest";
break;
case "az":
$sort = "ASC";
$orderby="animename";
$title = "A to Z";
break;
case "za":
$sort = "DESC";
$orderby="animename";
$title = "Z to A";
break;
}
$query = $animedb->query("SELECT animeid FROM animedeck.mylist WHERE userid='" . $_SESSION['userid'] . "' " . $rstatus . " ORDER BY " . $orderby . " " . $sort . " LIMIT " . $startindex . ", " . $count . "");
if($query) {
$result = $query->fetch_all();
echo '<div class="myanimemodule">';
echo '<h1 class="h1 borderb">MyList ' . $title . '</h1>';
foreach($result as $id) {
$info = loadSemiAnime($id[0]);
echo '<div class="animeid">' . $id[0] . '</div>';
echo '<div class="myanimepiece">';
echo '<img class="myanimeposter" src="';
echo $info['img'];
echo '" />';
echo '<a class="myanimeurl" href="'; //a href start
echo './viewanime.php?id=' . $id[0];
echo '">';
echo '<div class="myanimename">';
echo $info['name'];
echo '</div>';
echo '</a>'; //a href end
echo '<div class="myanimedes">';
echo $info['description'];
echo '</div>';
echo '</div>';
echo '<div class="animelistoptions">';
echo '<span onClick="setStatus(' . $id[0] . ', \'';
echo loadAnime($id[0], "name") . "'";
echo ', 0)" id="stowatch' . $id[0] . '" class="bluebutton">To Watch</span>';
echo '<span onClick="setStatus(' . $id[0] . ', \'';
echo loadAnime($id[0], "name") . "'";
echo ', 1)" id="swatching' . $id[0] . '" class="bluebutton">Watching</span>';
echo '<span onClick="setStatus(' . $id[0] . ', \'';
echo loadAnime($id[0], "name") . "'";
echo ', 2)" id="swatched' . $id[0] . '" class="bluebutton">Seen</span>';
echo '<span onClick="setStatus(' . $id[0] . ', \'';
echo loadAnime($id[0], "name") . "'";
echo ', 3)" id="srewatching' . $id[0] . '" class="bluebutton">Re-Watching <i class="fa fa-heart"></i></span>';
echo '</div>';
echo '<script>getStatus(' . $id[0] . ');</script>';
}
echo '</div>';
} else {
echo "Failed to retrieve entries. Error: " . $animedb->errno . " --- " . $animedb->error;
}
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
echo "This module was created in ".$totaltime." seconds";
}
?>
所以我的问题是,我不知道我的代码是什么造成它需要这么久?只需一次迭代6秒?它是PHP吗?我认为MySQL执行得非常快,所以我认为这是PHP。但是哪一部分?
我不熟悉什么是PHP的好和坏的做法,所以我不知道是什么真的放慢了我的功能。
这里是我的loadAnime()和loadSemiAnime()函数:
<?php
function loadAnime($id, $toload) {
$animedb = new mysqli("localhost", "animedeck", "W8a7fs5gu");
$load = $animedb->query("SELECT " . $toload . " FROM animedeck.animelist WHERE id=" . $id . "");
if($load) {
$result = $load->fetch_assoc();
echo $result[$toload];
}
}
function loadSemiAnime($id) {
$animedb = new mysqli("localhost", "animedeck", "W8a7fs5gu");
$load = $animedb->query("SELECT img, name, description FROM animedeck.animelist WHERE id=" . $id . "");
if($load) {
$result = $load->fetch_assoc();
return $result;
}
}
?>
尝试“解析SELECT animeid FROM animedeck.mylist WHERE userid = ...”并发布其结果 –
loadAnime()和loadSemiAnime()函数做了什么。 – Kickstart
圣...非常感谢你Kickstart。我知道每次需要一个变量时运行一个完整的查询是不好的,所以我让loadSemiAnime类加载了我需要一次的三个变量,然后重用这些变量。但是,我忘了将那些删除。 我现在正式下降到4秒,这是1秒/每场演出。这很棒。但现在我认为我可以在一般表现上做得更好。目前我的数据库运行良好,因此我猜想下一步的实际工作是尝试优化代码,然后再优化数据库。 – revofire