To jest tylko wersja do druku, aby zobaczyć pełną wersję tematu, kliknij TUTAJ
phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

1.12.7 i starsze - Wyświetlenia profilu

NineX - 11-08-2010, 11:38
Temat postu: Wyświetlenia profilu
Wyświetlenia profilu


Cytat:
############################################################################
## MOD Title: Wyświetlenia profilu
## MOD Author: NineX
## MOD Description: Pokazuje ile razy profil został odwiedzony.
## MOD Version: 1.0.5
##
## Installation Level: Easy
## Installation Time: ~3 minuty
## License: GPL2
## Files To Edit: 4
## includes/constants.php
## includes/usercp_viewprofile.php
## language/lang_polish/lang_main.php
## templates/*/profile_view_body.tpl
##
############################################################################

sebul00000 - 11-08-2010, 12:07

A jak to się ma na odświeżanie? Blokuje to jakoś czy nie?
NineX - 11-08-2010, 12:26

sebul00000 napisał/a:
A jak to się ma na odświeżanie? Blokuje to jakoś czy nie?


Niestety nie, dopiero przy kolejnej aktualizacji będzie blokować.

sebul00000 - 11-08-2010, 13:41

NineX, no to czekam(y?) na tą aktualizację ;] Ogólnie dobrze by było, żeby blokowało tylko na jakiś określony czas, czyli, np. raz dziennie ten sam user wchodząc w dany profil dodawał by do licznika +1, ale jakby już, np. w jednym dniu wchodził dwa razy do profilu to i tak licznik zwiększył by się tylko o 1.
NineX - 11-08-2010, 15:36

sebul00000, gotowe, załącznik zaktualizowany.
sebul00000 - 11-08-2010, 16:16

No działa. Licznik poprawnie się wyświetla dopiero po drugim wejściu w profil. A co do paczki to popraw, bo dwa razy jest w folderze ;]

[ Dodano: Sro 11 Sie, 10 17:15 ]
Jeszcze co do tego poprawnego wyświetlania licznika... Zauważyłem, że zawsze trzeba drugi raz wejść w profil, żeby licznik pokazywał poprawne dane, bo nawet jeśli ktoś wejdzie w jakiś profil po czym wyjdzie, to później jak wejdzie się innym profilem do tego samego konta to licznik dalej pokazuje liczbę, jakby nikt wcześniej nie zaglądał do danego profilu.

NineX - 11-08-2010, 19:32

sebul00000, po prostu nie chciałem robić więcej zapytań.

Załącznik zaktualizowany.

sebul00000 - 12-08-2010, 01:22

No teraz już działa wszystko jak należy, tylko ciekawe jak z obciążeniem serwera... ale chyba nie jest aż tak źle :D
maminowiec - 12-08-2010, 10:52

Kod:
$sql1 = "SELECT time1, (SELECT count(*) FROM " . VISIT_TABLE . " WHERE to1=" . $profiledata['user_id'] . ") AS total FROM " . VISIT_TABLE . " WHERE from1=" . $userdata['user_id'] . " AND to1=" . $profiledata['user_id'] . " ORDER BY id DESC";
    $result1 = $db->sql_query($sql1);       
    $row1 = $db->sql_fetchrow($result1);

    if(time()-3600*24 > $row1['time1'])
        {   


    $sql = "INSERT INTO " . VISIT_TABLE . " (`from1`, `to1`, `time1`) VALUES (" . $userdata['user_id'] . ", " . $profiledata['user_id'] . ", " . CR_TIME . ")";
            if(!($result = $db->sql_query($sql)))
                {
                    message_die(GENERAL_ERROR, 'Couldnt Query user private gallery info', '', __LINE__, __FILE__, $sql);
                }
        if($result)
            {
                $sql1 = "SELECT time1, (SELECT count(*) FROM " . VISIT_TABLE . " WHERE to1=" . $profiledata['user_id'] . ") AS total FROM " . VISIT_TABLE . " WHERE from1=" . $userdata['user_id'] . " AND to1=" . $profiledata['user_id'] . " ORDER BY id DESC";
                    $result1 = $db->sql_query($sql1);       
                    $row1 = $db->sql_fetchrow($result1);
            }
        }


ja bym sie kłócił co do optymalizacji

czyli tak

najpierw wybieramy time1 , czyli czas
później dajemy kolejnego selcta do policzenia łącznie wizyt

i teraz sprawdzamy czy można dodać +1 do wyświetlenia

if(time()-3600*24 > $row1['time1'])
{
tu dodawanie kolejnego rekordu do bazy
}

zapytanie jest złe , po co pchać selecta w selecta ?
jesli czas sie zgadza to dodajemy kolejny rekord do bazy

teraz prosta matematyka

na forum jest 10 tys userów
niech by 100 osób odwiedzało ok 1000 profili więc do bazy leci 10000 rekordów

teraz 10000 * 31 = 31000 rekordów w bazie przez miesiąc

na localu przy 10000 tys rekordów

Kod:
Strona wygenerowana w 0,12 sekundy. Zapytań do SQL: 15


bez tego

Kod:
Strona wygenerowana w 0,07 sekundy. Zapytań do SQL: 12


dla 31000 tys rekordów

Kod:
Strona wygenerowana w 0,43 sekundy. Zapytań do SQL: 13


a dla miliona rekordów

Kod:
Strona wygenerowana w 1,85 sekundy. Zapytań do SQL: 13


wniosek , po roku czasu na forum nie wejdziemy ;)

jest to testowane na localu , a więc na dobrym sprzęcie , strach pomyśleć co by było na zwykłym serwerze gdzie do bazy na sekunde jest ładowane kilkanaście zapytań

NineX - 12-08-2010, 14:50

maminowiec, optymalizacja gotowa.

Załącznik zaktualizowany.

sebul00000 - 12-08-2010, 15:45

Działa, ale ja nie mam tego info w ile sekund wyświetla się strona i ile zapytań, więc co do działania optymalizacji się nie wypowiem.
maminowiec - 12-08-2010, 16:21

sebul00000, to sobie włącz w PA
NineX - 12-08-2010, 16:29

5 zapytań zamieniłem na 3, więc na pewno lepiej.
sebul00000 - 12-08-2010, 16:33

maminowiec, nie w każdym stylu włączenie w PA coś daje ;] Chyba wiesz o co chodzi... Jak dla mnie mod może iść już do gotowców, no chyba, że jest coś jeszcze do poprawienia.
maminowiec - 12-08-2010, 16:33

A czy nie lepiej zrobić to na plikach cookie ? ?


Powered by phpBB modified by Przemo © 2003 phpBB Group