Salut.
Folosesc Ajax, PHP, MySQL sa contorizez cat timp e deschisa o anumita pagina ( citesc contorul din BD, il incrementez, il scriu in BD - in fiecare secunda ).
Problema e ca daca deschid doua sau mai multe pagini contorul creste de atatea ori mai repede. Cum as putea sa limitez numarul de pagini ce pot fi deschise ? Sau cum altfel as putea rezolva problema ?
Ajax - Limitare pagini deschise
Moderator: Moderatori
Salut,
Nu stiu exact ce vrei tu sa obtii dar din ce ma citit eu tu te duci cu ajax'u in server la fiecare secunda ?!?!? Foarte gresit !
Imagineaza-ti 200 de vizitatori in acelasi timp pe site (un numar deloc mare) si inmulteste cu interogarile care le faci tu in BD.
Uite parerea mea:
1. pentru salvarea in BD fa'o la vreo 10, 15 secunde ... cu cat mai mult cu atat mai bine. (la cate secunde o faci cu atat incrementezi)
2. pentru afisare foloseste-te de JS.
3. pentru a nu iti incrementa de mai multe ori in cazul in care are mai multe pagini deschise trebui sa incrementezi timpul stat pe fiecare pagina separat, deci cand deschide o noua pagina faci o noua inregistrare in BD, unde spui ip/id_user , pagina pe care este, time stamp pentru cand a intrat pe pagina (asta in cazul in care vrei cumva sa stii cat timp a stat in totalitate pe site) si timpul care il incrementezi.
Intrebarea mea este urmatoarea: pe tine ce anume te intereseaza sa ii afisezi vizitatorului timpul care il petrece pe o pagina (live) sau sa stii tu cat timp a stat fiecare ? Daca este prima varianta foloseste numai JS, daca este a doua varianta foloseste google analitycs sau ceva asemanator.
Nu stiu daca o sa te ajute la ceva pentru ca nu prea stiu ce vrei sa obtii. Bafta !
Nu stiu exact ce vrei tu sa obtii dar din ce ma citit eu tu te duci cu ajax'u in server la fiecare secunda ?!?!? Foarte gresit !
Imagineaza-ti 200 de vizitatori in acelasi timp pe site (un numar deloc mare) si inmulteste cu interogarile care le faci tu in BD.
Uite parerea mea:
1. pentru salvarea in BD fa'o la vreo 10, 15 secunde ... cu cat mai mult cu atat mai bine. (la cate secunde o faci cu atat incrementezi)
2. pentru afisare foloseste-te de JS.
3. pentru a nu iti incrementa de mai multe ori in cazul in care are mai multe pagini deschise trebui sa incrementezi timpul stat pe fiecare pagina separat, deci cand deschide o noua pagina faci o noua inregistrare in BD, unde spui ip/id_user , pagina pe care este, time stamp pentru cand a intrat pe pagina (asta in cazul in care vrei cumva sa stii cat timp a stat in totalitate pe site) si timpul care il incrementezi.
Intrebarea mea este urmatoarea: pe tine ce anume te intereseaza sa ii afisezi vizitatorului timpul care il petrece pe o pagina (live) sau sa stii tu cat timp a stat fiecare ? Daca este prima varianta foloseste numai JS, daca este a doua varianta foloseste google analitycs sau ceva asemanator.
Nu stiu daca o sa te ajute la ceva pentru ca nu prea stiu ce vrei sa obtii. Bafta !
Pentru fiecare user vreau un contor cu timpul total in care a avut o anumita pagina deschisa. Contorul asta apare undeva pe pagina si creste in timp real in fiecare secunda ( userul il vede in permanenta ). Asta-i tot. M-am gandit la mai multe variante si cu Ajax mi s-a parut cel mai indicat.
Acum ca zici, partea cu mai multi useri chiar am omis-o; nu m-am gandit ca ar fi o problema pentru BD sa gestioneze atata trafic ... probabil ca trebuie sa gasesc o alternativa la scrierea in fiecare secunda in BD.
Acum ca zici, partea cu mai multi useri chiar am omis-o; nu m-am gandit ca ar fi o problema pentru BD sa gestioneze atata trafic ... probabil ca trebuie sa gasesc o alternativa la scrierea in fiecare secunda in BD.
Yes in did.
Din punctul meu de vedere ai 3 variante:
1. Folosesti un tool de genul google analitycs care iti ofera un "average time on site". (cea mai putin exacta dar cea mai putin costisitoare ca resurse);
2. Folosesti o bucata de JavaScript care sa faca scrierea in baza de date la 10, 15 secunde (este mai exact ... dar daca cineva va parasii pagina in intervalul de 10 secunde vei pierde acele secunde din contor, este si destul de costisitoare ca resurse);
3. Apelezi AJAX'ul cu o functia "onbeforeunload" (sau ceva de genul). Functia asta de JS se apelesaza cand este detectata parasirea paginii (inchidere de browser, de tab, dat refresh la pagina, navigare pe alta pagina). Eu am lucrat acum un an de zile la asa ceva pentru un chat insa atunci oricat m-am chinuit nu am reusit sa fac nimic pentru Opera. Acum poate au mai facut si baietii de la opera ceva modificari sau poate nu ai vizitatori prea multi care folosesc opera. De asemenea apelarea AJAX'ului va trebui sa o faci SINCRON si nu ASINCRON cum o faci acum (exactitatea este in functie de vizitatorii care folosesc opera si consuma si foarte putine resurse).
Bafta!
1. Folosesti un tool de genul google analitycs care iti ofera un "average time on site". (cea mai putin exacta dar cea mai putin costisitoare ca resurse);
2. Folosesti o bucata de JavaScript care sa faca scrierea in baza de date la 10, 15 secunde (este mai exact ... dar daca cineva va parasii pagina in intervalul de 10 secunde vei pierde acele secunde din contor, este si destul de costisitoare ca resurse);
3. Apelezi AJAX'ul cu o functia "onbeforeunload" (sau ceva de genul). Functia asta de JS se apelesaza cand este detectata parasirea paginii (inchidere de browser, de tab, dat refresh la pagina, navigare pe alta pagina). Eu am lucrat acum un an de zile la asa ceva pentru un chat insa atunci oricat m-am chinuit nu am reusit sa fac nimic pentru Opera. Acum poate au mai facut si baietii de la opera ceva modificari sau poate nu ai vizitatori prea multi care folosesc opera. De asemenea apelarea AJAX'ului va trebui sa o faci SINCRON si nu ASINCRON cum o faci acum (exactitatea este in functie de vizitatorii care folosesc opera si consuma si foarte putine resurse).
Bafta!
Bun, am rezolvat problema asa cum mi-ai zis. Salvez datele in BD doar cand se inchide fereastra si afisez contorul in real-time cu JavaScript. Mersi pentru hint
Acum am o alta mini-problema: folosesc event-ul onBeforeUnload; problema e ca nu se apeleaza functia de scriere in BD de fiecare data, si nu reusesc sa-mi dau seama care ar putea fi problema.
De ex: deschid pagina - o inchid, nu scrie in BD nimic; o redeschid - o inchid, iar nu scrie nimic; o redeschid - o inchid, scrie modificarile in BD.
Idei ?
Acum am o alta mini-problema: folosesc event-ul onBeforeUnload; problema e ca nu se apeleaza functia de scriere in BD de fiecare data, si nu reusesc sa-mi dau seama care ar putea fi problema.
De ex: deschid pagina - o inchid, nu scrie in BD nimic; o redeschid - o inchid, iar nu scrie nimic; o redeschid - o inchid, scrie modificarile in BD.
Idei ?
Yes in did.
Salut,
Asa cum ti-am zis sin in post-ul anterior ... ar trebui sa verifici daca e compatibil cu Opera (daca ai vizitatori care folosesc opera) si trebuie sa folosesti call de AJAX SINCRON nu ASINCRON cum probabil folosesti si sunt majoritatea exemplelor de AJAX. Daca pelezi ajax-ul in acest fel, "blocheaza" browser-ul user-ul pentru ca acesta sa nu se inchida pana nu se face update in BD. (blocat este mult spus ... nu se va simtii de catre utilizator). Cauta mai multe pe google despre asta.
Bafta!
Asa cum ti-am zis sin in post-ul anterior ... ar trebui sa verifici daca e compatibil cu Opera (daca ai vizitatori care folosesc opera) si trebuie sa folosesti call de AJAX SINCRON nu ASINCRON cum probabil folosesti si sunt majoritatea exemplelor de AJAX. Daca pelezi ajax-ul in acest fel, "blocheaza" browser-ul user-ul pentru ca acesta sa nu se inchida pana nu se face update in BD. (blocat este mult spus ... nu se va simtii de catre utilizator). Cauta mai multe pe google despre asta.
Bafta!
Înapoi la “Librarii Javascript”
Cine este conectat
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 20 vizitatori