Je suis nouveau au codage php et je suis en train de coder un site web (avec des forums) pour apprendre.messages du forum affichage chargement lent
Actuellement, j'ai une page dynamique qui gère tous les aspects du forum d'affichage des sujets, tous les forums, puis chaque message lui-même.
Chacun de ces sujets/forums et messages sont conservés dans mySQL et sont accessibles en cas de besoin.
les deux premières sections (Voir tous les sujets et Afficher tous les forums) charges parfaitement bien cependant lorsque nous arrivons à la troisième section (Afficher tous les messages du forum) le chargement est très lent. Ma page de test a seulement 16 messages et très peu de texte prend du temps à charger.
J'ai pagination de sorte que chaque page ne contient que 25 messages, mais il est lent à 16 avec peu de texte si difficile à l'image de 25 messages avec beaucoup de textes/images.
Merci pour toute aide et suggestions à l'avance :).
Voici un code réduit de la page des forums (Afficher uniquement les pièces nécessaires):
<?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);
Dans le forumsData.php j'accéder à la base de données et mettre les données dans des tableaux en fonction de la TopicID et ForumID. par exemple:
$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 ... que faites-vous tous les appels des fonctions suivantes: 'check_topic_exists()', 'get_topic_name()', 'login_check()', 'permission_check()' et etc (tous nécessitent '$ mysqli')? est-ce que les fonctions obtiennent des données directement à partir de mysql à chaque fois? – Wizard
Il ne résout pas votre problème, mais est 'ORDER BY WHERE topicidcol ...' dans votre 2ème bloc de code valide SQL ou juste une faute de frappe? – PerlDuck
sûr? .. mysql n'est pas si rapide, pour des requêtes fréquentes (peut-être cela suffit pour cet exemple en raison d'un cache interne) .. mais c'est une mauvaise idée, vous devez paramétrer des flags (et d'autres données) avant la sortie. – Wizard