Я новичок в кодировании php и кодирую веб-сайт (с форумами), чтобы узнать.сообщений на форуме показ по загрузке медленно
В настоящее время у меня есть одна динамическая страница, которая обрабатывает все аспекты форума, отображая темы, все форумы, а затем каждое сообщение.
Все эти темы/форумы и сообщения хранятся в mySQL и доступны по мере необходимости.
первых двух разделов (Показать все темы и отобразить все форумы) загружается отлично, но когда мы добираемся до третьего раздела (Показать все сообщения для форума), загрузка происходит очень медленно. Моя тестовая страница содержит только 16 сообщений, и очень мало текста, однако требуется, чтобы загрузить.
У меня есть подкачка, поэтому каждая страница содержит только 25 сообщений, однако она медленна на 16 с небольшим текстом, так что трудно имитировать 25 сообщений с множеством текстов/изображений.
Спасибо за любую помощь и предложения заранее :).
Вот сниженный код на странице форума (только с указанием необходимых деталей):
<?php
$topicID = $_GET['topicID'];
$forumID = $_GET['forumID'];
include_once '../includes/forumsData.php';
sec_session_start();
$username = $_SESSION['username'];
include_once 'header.php';
include_once 'navbar.php';
?>
<div class="bg">
<!-- Body -->
<div class='body'>
<div class="forum-title">Forums</div>
<?php
// No topic chosen
// Display all topics
if(!isset($topicID)) {
for ($x = 0; $x < count($headers); $x++) {
echo '<div class="forum-header">' . $headers[$x][0] . '</div>';
for ($z = 0; $z < count($topics); $z++) {
if($topics[$z][6] == $headers[$x][1]) {
echo '<div class="forums">
<div class="topics">
<a href="?topicID=' . $topics[$z][7] . '">' . $topics[$z][0] . '</a></font>
<br>
' . $topics[$z][1] . '
</div>';
if ($topics[$z][3] == ""){
echo '<div class="info">No new Posts</div>';
}
else {
echo '<div class="info"><a href = "../profile/?profile=' . $topics[$z][4] . '"><img src="../images/profileA/' . $topics[$z][2] . '" height="45" width="45" /></a><p><a href="?topicID=' . $topics[$z][7] . '&forumID=' . $topics[$z][8] . '">' . $topics[$z][3] . '</a><br><a href="../profile/?profile=' . $topics[$z][4] . '">' . $topics[$z][4] . '</a> - ' . get_date_diff($mysqli, $topics[$z][5]) . '</p></div>';
}
echo '</div>';
}
}
}
}
// Topic has been chosen
// Display all the forum posts
if(isset($topicID) && check_topic_exists($mysqli, $topicID) && empty($forumID)) {
echo '<br><a href="./">Forums</a> > <a href="./?topicID='. $topicID . '">' . get_topic_name($mysqli, $topicID) . '</a><br><br>
<a href="posting.php?topicID='. $topicID . '&mode=post">Create New Topic</a><br>';
echo '<div class="forum-topicHeader">Topic</div>
<div class="forum-repliesHeader">Replies</div>
<div class="forum-lpHeader">Latest post</div>';
if (count($forums) > 0) {
for ($x = 0; $x < count($forums); $x++) {
$replies = $forums[$x][6] -1;
echo '
<div class="forums">
<div class="topics">
<a href="?topicID=' . $topicID . '&forumID=' . $forums[$x][0] . '">' . $forums[$x][2] . '</a><br><a href="../profile/?profile=' . $forums[$x][4] . '">' . $forums[$x][4] . '</a></td>
</div>
<div class="replies">
' . $replies . '
</div>
<div class="info">
<a href="../profile/?profile=' . get_latest_user_reply($mysqli, $topicID, $forums[$x][0]) . '">' . get_latest_user_reply($mysqli, $topicID, $forums[$x][0]) . '</a><br> ' . get_date_diff($mysqli, $forums[$x][5]) . '
</div>
</div>';
}
}
}
// Topic has been chosen
// Forum has been chosen
// Display all posts for the forum
if(isset($topicID) && check_topic_exists($mysqli, $topicID) && isset($forumID)) {
require '../BBCode/BBCodeParser.php';
$bbcode = new Golonka\BBCode\BBCodeParser;
echo '<br><a href="./">Forums</a> > <a href="./?topicID='. $topicID . '">' . get_topic_name($mysqli, $topicID) . '</a> > <a href="./?topicID='. $topicID . '&forumID=' . $forumID . '">' . get_forum_name($mysqli, $topicID, $forumID) . '</a>';
echo '<br><br>
<a href="posting.php?topicID='. $topicID . '&forumID=' . $forumID . '&mode=post">Post New Reply</a>
<div class="post-title ">' . get_forum_name($mysqli, $topicID, $forumID) . '</div><br>';
if (count($posts) > 0) {
for ($x = 0; $x < count($posts); $x++) {
echo '
<div class="post-header">' . $posts[$x][3] . '<text style="float:right">#' . ($x+1) . '</text></div>
<div class="post">
<div class="post-user ">';
if(login_check($mysqli) && (permission_check($mysqli) == 2 || permission_check($mysqli) == 3 || $username == $posts[$x][5])) {
echo '<a href="posting.php?topicID='. $topicID . '&forumID=' . $forumID . '&postID=' . $posts[$x][1] . '&mode=edit">Edit</a><br>';
}
echo '<a href="../profile/?profile="' . $posts[$x][5] . '">' . $posts[$x][5] . '</a>
<br>
<a href="#">Add img here soon</a>
<br>
Other user infos?
</div>
<div class="post-text">' . $bbcode->parse($posts[$x][4]) . '</div>
</div><br>';
}
}
echo '<a href="posting.php?topicID='. $topicID . '&forumID=' . $forumID . '&mode=post">Post New Reply</a><br><br>';
}
// If we have selected a topic that doesn't exist
if(!empty($topicID) && !check_topic_exists($mysqli, $topicID))
{
include_once 'topicnotfound.php';
}
?>
</div>
</div>
</body>
</html>
<?php
mysqli_close($mysqli);
В forumsData.php я получить доступ к базе данных и поместить данные в массивы в зависимости от TopicID и forumID. например:
$nquery = 'SELECT * FROM tableexample WHERE topicidcol = ' . $topicID . ' AND forumidcol = ' . $forumID;
$ndata = mysqli_query($mysqli, $nquery);
while($row = mysqli_fetch_array($ndata))
{
// insert date into array
$myarray[$z] = array($row['datacol1'], $row['datacol2']);
$z++
}
mmm ... что вы делаете при каждом вызове следующих функций: 'check_topic_exists()', 'get_topic_name()', 'login_check()', 'permission_check()' и т. Д. (Для всех них требуется '$ mysqli')? заключается в том, что функции получают данные непосредственно из mysql каждый раз? – Wizard
Он не решает вашу проблему, но является 'ORDER BY WHERE topicidcol ...' в вашем 2-м блоке кода действующим SQL или просто опечаткой? – PerlDuck
уверен? .. mysql не так быстро, для частых запросов (может быть, этого достаточно для этого примера из-за внутреннего кеша) .. но это плохая идея, вам нужно настроить флаги (и любые другие данные) перед выходом. – Wizard