Hallo!

Ik vroeg me af of het schadelijk is voor mijn database, als ik elke 10 seconde een ajax request doe om te kijken of er een nieuwe melding is, waarbij dus elke keer in de database wordt gekeken.

Alvast bedankt!
Opsich niet, helemaal niet als je nog eens een cachelaag er tussenin gebruikt.
Hoe doe ik dat?
het lijkt me dat je die 10 seconden nu juist gebruikt om snel te weten of er nieuwe berichten zijn.
Als je dat antwoord dan vervolgens 2 minuten cachet, dan kun je ook net zo goed om de 2 minuten die ajax - call doen.

ik ga dan even er vanuit dat het persoonlijk antwoord van de gebruiker is, en niet een bericht dat voor alle gebruikers van toepassing is.

Wel zou ik iets inbouwen dat als het een keer 23 seconden duurt voor je antwoord hebt, je niet de volgende 2 requests ook al afvuurt.

Bedenk ook, dat het dus niet om een request elke 10 seconden gaat, maar als er 100 man de pagina open hebben staan, je 100 requests krijgt elke 10 seconden = 10 requests per seconde.

Met een simpele query is dat geen probleem, maar vaak denkt men alleen per-persoon en niet voor meerdere gebruikers gelijktijdig
Je zou ook kunnen kijken naar sockets.
Ik heb nu dat hij het om de 20 seconden bekijkt,


<a class="dropdown-toggle" data-toggle="dropdown">
                                    <i class="fa fa-envelope-o"></i>
                                    
                                    <?php
                                        $selectNewConvoSql = $mysqli->query(
                                                                            "SELECT *
                                                                            FROM `panel_convo`
                                                                            WHERE `participants` LIKE '%\"" . $mysqli->real_escape_string($_SESSION['user']['id']) . "\"%'
                                                                            AND `readed` NOT LIKE '%\"" . $mysqli->real_escape_string($_SESSION['user']['id']) . "\"%'"
                                                                           );
                                    
                                        if (
                                            $selectNewConvoSql
                                            && $selectNewConvoSql->num_rows > 0)
                                        {
                                            $newConvo = $selectNewConvoSql->num_rows;
                                            ?>
                                                <span class="label label-success">
                                                    <?php
                                                        echo $newConvo;
                                                    ?>
                                                </span>
                                            <?php
                                        }
                                    ?>
                                </a>
                                
                                <ul class="dropdown-menu">
                                    <li class="header">
                                        Je hebt
                                        <?php
                                            if (isset($newConvo))
                                            {
                                                echo $newConvo;
                                            }
                                            else
                                            {
                                                echo '0';
                                            }
                                        ?>
                                        nieuwe conversatie(s)
                                    </li>
                                    
                                    <li>
                                        <ul class="menu">
                                            <?php
                                                $selectAllConvoSql = $mysqli->query(
                                                                                    "SELECT *
                                                                                    FROM `panel_convo`
                                                                                    WHERE `participants` LIKE '%\"" . $mysqli->real_escape_string($_SESSION['user']['id']) . "\"%'
                                                                                    OR `starter_id` = '" . $mysqli->real_escape_string($_SESSION['user']['id']) . "'"
                                                                                   );
                                            
                                                if (
                                                    !$selectAllConvoSql
                                                    || $selectAllConvoSql->num_rows == 0
                                                    )
                                                {
                                                    ?>
                                                        <div class="box-body">
                                                            Geen conversaties gevonden
                                                        </div>
                                                    <?php
                                                }
                                                else
                                                {
                                                    while ($convo = $selectAllConvoSql->fetch_assoc())
                                                    {
                                                        ?>
                                                            <li>
                                                                <a href="#">
                                                                    <div class="pull-left">
                                                                        <img src="" class="img-circle" alt="Afbeelding van gebruiker">
                                                                    </div>

                                                                    <h4>
                                                                        <?php
                                                                            if (in_array($_SESSION['user']['id'], json_decode($convo['readed'])))
                                                                            {
                                                                                echo $convo['title'];
                                                                            }
                                                                            else
                                                                            {
                                                                                echo '<b>' . $convo['title'] . '</b>';
                                                                            }
                                                                        ?>

                                                                        <small>
                                                                            <i class="fa fa-clock-o"></i>

                                                                            <?php
                                                                                echo date('H:i', $convo['created_on']);
                                                                            ?>
                                                                        </small>
                                                                    </h4>

                                                                    <p>
                                                                        <?php echo $convo['description']; ?>
                                                                    </p>
                                                                </a>
                                                            </li>
                                                        <?php
                                                    }
                                                }
                                            ?>
                                        </ul>
                                    </li>
                                    
                                    <li class="footer">
                                        <a href="#">
                                            Zie alle conversaties
                                        </a>
                                    </li>
                                </ul>

Hierboven staan de querys
Als je queries snel uitvoeren,d an kan het geen kwaad. Hoewel een cachinglaag wel handig kan zijn.
Dat scheelt weer een hoop queries die je moet uitvoeren.
als je dit een beetje snel wilt houden, zou ik die LIKE eruit halen.

Of ben je zo handig geweest om bij de kolom participants meerdere id's op te slaan?

In dat geval heb je een probleem als user 10 iets zoekt, want dan komen de berichten van users 100 101 102 110 etc ook allemaal binnen

[size=xsmall]Toevoeging op 03/04/2017 20:12:12:[/size]

en bovenstaand script levert altijd output.

Doe eerst de query,
check dan of er *nieuwe* resultaten zijn

en als dat zo is: dan de berichten sturen naar de aanroepende ajax caller.

En in javascript: check OF er berichten zijn, en zo ja dan iets doen, zo nee: laten gaan
Oké bedankt voor de reactie!

Nu even een vraag over hashen van wachtwoorden, is het niet het slimst om wachtwoorden zo te hashen:


$password = md5($password);
$password = sha1($password);
$password = hash('sha256', $password);
$password = password_hash($password, PASSWORD_DEFAULT);

want zo kunnen ze volgensmij bijna niet het wachtwoord achterhalen *WINK*
>> Nu even een vraag over hashen van wachtwoorden, is het niet het slimst om wachtwoorden zo te hashen:

Kun je hier aub een nieuw topic voor openen? Anders is het voor bezoekers totaal niet duidelijk waar een topic over gaat.

Reageren