Dołącz do zespołu ekspertów! Backend lub Frontend Developer?

Sprawdź najnowsze oferty pracy naszego partnera - 8lines.io!

Analiza obciążenia i czasu generowania

Założony przez  meto.

mamy dużo grup userów i for, i to jest wąskie gardło skryptu;/
Uprawnienia są zapisywane w tablicy której wielkość to:
Ilość działów* Ilość grup użytkowników. co daje u mnie ponad 1500 indeksów.

Jak temu zaradzić? Używać domyślnych uprawnień dla jak największej liczby działów.
2. Co można zrobić to przyjrzeć się dokładniej systemowi Uprawnień i konsultować się z Teamem Mybb, jak pisałem wcześniej wydaje mi się że ten system ma gdzieś spory bug. Oraz szukać sposobu jak go przeprojektować.
No jak widzę to największy skok w czasie generowania strony jest przy generowaniu drzewa tematów na główną, a dokładniej te dwie linijki:
$forum_list build_forumbits();
$forums $forum_list['forum_list']; 
Ich generowanie zajmuje ok 200-300ms...

Update:
Udało mi się to scache'owach, nie powiem, po chamie trochę, ale nie chcialo mi się klas cache'ujących uczyć z MyBB.
if(xcache_isset('pgc_forum_list'))
    {
    
$forum_list unserialize(xcache_get('pgc_forum_list'));
    }
    else
    {
$forum_list build_forumbits();
    
xcache_set('pgc_forum_list'serialize($forum_list), 30);
    }
$forums $forum_list['forum_list']; 
Wygląda że to rozwiązuje problem dla indexu, mozna dać mniejszy TTL albo jakoś zagnieździć przeliczanie lub flush.

Update
Wygląda na to, że problem jest poważniejszy i fora na MyBB po prostu są oporne na rozbudowane działy i dużą ilość przywilejów. Nie wspomnę już o tym, że nie da się uruchomić kilku for na współdzielonym xCache...

Update2
Zwracam honor za xcache - my bad. ;) Resztę podtrzymuje. Czy ktoś z forum 50k+ postów może pochwalić się lepszą wydajnością?

Update3
Zauważyłem ciekawą rzecz - mianowicie zakomentowałem opcje z wyborem cache w config.php i strona zwolniła tylko nieznacznie - ok 20ms. Czy on faktycznie tak rzadko jest uzywany? xCache na pewno działa - inne fora i skrypty z niego korzystają.
Wydaje mi się, że to podstawowy problem optymalizacji w MyBB. Wystarczy zobaczyć ile jest ustawiania przy uprawnieniach w działach, poza tym nie da się ich "zagnieżdżać", czyli by były dziedziczone w dziale (teoretycznie powinno działać, ale jak zauważyłem jest tam sporo błędów...).

Może warto bezpośrednio napisać na Comm.?
Co do osób, które mogą pomóc w optymalizacji to najbardziej odpowiednim wyborem jest koziolek. Zajmuje się choćby forum magazynu PC Format: http://forum.pcformat.pl/

Już nieraz pisał na Comm., że organizacja w bazie i indeksowanie w MyBB naprawdę w kilku miejscach jest słaba, ale... chyba nie przypadło to do gustu Ryanowi, który najwięcej ma na ten temat do powiedzenia. Nie zawsze słusznie.
Co do takich zmian to niestety nie wiem jak dużo uda mi się zdziałać, bo nie jestem adminem forum lecz adminem z xGame.pl, wiec tylko mogę sugerować... Często trudno przemówić do rozsądku - ostatnio zgłosiłem problem ze jest dużo botów założonych na maila w domenie konkretnej bo mailingi nie dochodzą i wiszą w kolejce to usłyszałem, że usunięcie ich "popsuje statystyki"... No Comment.

Pytanie też czy Koziołek pomoże za free (rozumiem jak nie), bo nie jest to sprawa życia lub śmierci.

Po prostu wole optymalizować skrypty wcześniej niż przy DoS jak ruch wzrośnie o 300% ;)

Jak będę miał chwilkę to spróbuje łatki z http://www.kozik.net.pl/blog-web/684/kto...ierz-mybb/
Odnośnie tablicy forumpermision:
Tablica 2 wymiarowa która wygląda masakrycznie:

U mnie dla 158 forum powtarza się 158 razy
158 => 
  array (
    
'disporder' => '7',
    
'isbannedgroup' => '0',
    
'canview' => '1',
    
'canviewthreads' => '1',
    
'canviewprofiles' => '1',
    
'candlattachments' => '1',
    
'canpostthreads' => '1',
    
'canpostreplys' => '1',
    
'canpostattachments' => '1',
    
'canratethreads' => '1',
    
'caneditposts' => '1',
    
'candeleteposts' => '1',
    
'candeletethreads' => '1',
    
'caneditattachments' => '1',
    
'avatarmaxsize' => '20',
    
'avatarmaxdimensions' => '150x150',
    
'sigmaxchars' => '2500',
    
'signumimages' => '10',
    
'sigallowmycode' => '1',
    
'sigallowimgcode' => '1',
    
'sigallowsmilies' => '1',
    
'sigallowhtml' => '1',
    
'canpostpolls' => '1',
    
'canvotepolls' => '1',
    
'canusepms' => '1',
    
'cansendpms' => '1',
    
'cantrackpms' => '1',
    
'candenypmreceipts' => '1',
    
'pmquota' => 0,
    
'maxpmrecipients' => 0,
    
'cansendemail' => '1',
    
'maxemails' => 0,
    
'canviewmemberlist' => '1',
    
'canviewcalendar' => '1',
    
'canaddevents' => '1',
    
'canbypasseventmod' => '1',
    
'canmoderateevents' => '1',
    
'canviewonline' => '1',
    
'canviewwolinvis' => '1',
    
'canviewonlineips' => '1',
    
'cancp' => '1',
    
'issupermod' => '1',
    
'cansearch' => '1',
    
'canusercp' => '1',
    
'canuploadavatars' => '1',
    
'canuploadprofilepics' => '1',
    
'canratemembers' => '1',
    
'canchangename' => '1',
    
'showforumteam' => '1',
    
'usereputationsystem' => '1',
    
'cangivereputations' => '1',
    
'reputationpower' => '2',
    
'maxreputationsday' => 0,
    
'candisplaygroup' => '1',
    
'attachquota' => 0,
    
'cancustomtitle' => '1',
    
'canhtmlintitle' => '1',
    
'canwarnusers' => '1',
    
'canreceivewarnings' => '1',
    
'maxwarningsday' => 0,
    
'canmodcp' => '1',
    
'modcanannouncements' => '1',
    
'modcanviewmodlogs' => '1',
    
'modcanmanagevms' => '1',
    
'modcanmanageprofiles' => '1',
    
'modcanbanusers' => '1',
    
'canviewusermap' => '1',
    
'canaddusermappin' => '1',
    
'canmanagecomments' => '1',
    
'myplaza_rate' => '1',
    
'myplaza_income_rate' => '1',
    
'showreputationwarning' => '1',
    
'title' => 'Administrator',
    
'description' => 'Użytkownicy którzy posiadają największe uprawnienia na forum.',
    
'namestyle' => '{username}',
    
'usertitle' => '',
    
'stars' => '0',
    
'starimage' => '',
    
'image' => '/images/groupimages/admin.png',
  ), 

90% tego powinno znajdować się tylko raz w innej tablicy...

Edit:

Zasadne wg mnie wydaje się zostawienie w tej tablicy
array(
    
'canview' => '1',
    
'canviewthreads' => '1',
    
'canviewprofiles' => '1',
    
'candlattachments' => '1',
    
'canpostthreads' => '1',
    
'canpostreplys' => '1',
    
'canpostattachments' => '1',
    
'canratethreads' => '1',
    
'caneditposts' => '1',
    
'candeleteposts' => '1',
    
'candeletethreads' => '1',
    
'caneditattachments' => '1'
To zasadniczo da się coś z tym zrobić? Czy konieczne jest przeprojektowanie systemu MyBB?
http://crossreference.mybboard.de/nav.ht...r.php.html 1175 linia. Jutro jak będę miał czas pomyślę nad patchem.
(18.07.2009, 20:49)taxido16 napisał(a): http://crossreference.mybboard.de/nav.ht...r.php.html 1175 linia. Jutro jak będę miał czas pomyślę nad patchem.
Hmm... Możesz troszkę się rozwinąć? Plik nie ma tyle lini, chyba ze pomyliłeś link.
Faktycznie http://crossreference.mybboard.de/inc/fu...s.php.html 1175 linia.
Jaka wtopa... bo dokumentacja na Ajaxie bazuje ;P

A dokładniej: Jeżeli forum ma zdefiniowane dla danego usera niedomyślne ustawienia, to do tablicy lądują dane z tabeli forumpermissions
czyli:

canview canviewthreads candlattachments canpostthreads canpostreplys canpostattachments canratethreads caneditposts candeleteposts candeletethreads caneditattachments canpostpolls canvotepolls cansearch

Jeżeli nie to lądują dane z usergroups

w moim przypadku:

title description namestyle usertitle stars starimage image disporder isbannedgroup canview canviewthreads canviewprofiles candlattachments canpostthreads canpostreplys canpostattachments canratethreads caneditposts candeleteposts candeletethreads caneditattachments avatarmaxsize avatarmaxdimensions sigmaxchars signumimages sigallowmycode sigallowimgcode sigallowsmilies sigallowhtml canpostpolls canvotepolls canusepms cansendpms cantrackpms candenypmreceipts pmquota maxpmrecipients cansendemail maxemails canviewmemberlist canviewcalendar canaddevents canbypasseventmod canmoderateevents canviewonline canviewwolinvis canviewonlineips cancp issupermod cansearch canusercp canuploadavatars canuploadprofilepics canratemembers canchangename showforumteam usereputationsystem cangivereputations reputationpower maxreputationsday candisplaygroup attachquota cancustomtitle canhtmlintitle canwarnusers canreceivewarnings maxwarningsday canmodcp modcanannouncements modcanviewmodlogs modcanmanagevms modcanmanageprofiles modcanbanusers canviewusermap canaddusermappin canmanagecomments myplaza_rate myplaza_income_rate showreputationwarning

spora różnica...

ogólnie sens całej tablicy jest dość znikomy...

Nie bardzo chce mi się teraz myśleć...
Mam rozwiązanie: wystarczy wybrać dane w jednej z funkcji, ale nie satysfakcjonuje mnie jak narazie... bo ta tablica mnie dość mocno irytuje...

Opisze jutro

Edit: 1.5mb śmiecia...
To nie lepiej zmienić silnik forum na coś innego? :) Potem spore problemy będą z aktualizacją do nowych wersji, jeśli dokonasz takich zmian w kodzie.
No właśnie, tym bardziej że niebawem zobaczymy phpBB 3.0.6, a wraz z nim obsługę systemów takich jak APC, eAccelerator itp. To dopiero będzie rakieta :)
Zaciekawiła mnie tabela "PREFIX_forumpermissions", która ma ponad 2800 wpisow, gdzie ponad 90% wersów ma te same, domyślne wartości... Jak to u Was wygląda?
(19.07.2009, 09:21)BlueMan napisał(a): To nie lepiej zmienić silnik forum na coś innego? :) Potem spore problemy będą z aktualizacją do nowych wersji, jeśli dokonasz takich zmian w kodzie.

Jestem przy Mybb bo to moim zdaniem najlepszy OpenSource silnik forum. A ten topik ma na celu zastanowienie się co można poprawić w Mybb i wytknięcie błędów twórcom, a także pomoc w łataniu wycieków pamięci.

(21.07.2009, 11:08)lukasamd napisał(a): No właśnie, tym bardziej że niebawem zobaczymy phpBB 3.0.6, a wraz z nim obsługę systemów takich jak APC, eAccelerator itp. To dopiero będzie rakieta :)

CryptoReklama?

(23.07.2009, 19:06)meto napisał(a): Zaciekawiła mnie tabela "PREFIX_forumpermissions", która ma ponad 2800 wpisow, gdzie ponad 90% wersów ma te same, domyślne wartości... Jak to u Was wygląda?

Właśnie o niej pisałem kilka postów temu.

Zauważyłem też że u mnie mybb nie potrafi korzystać z Xcache...
Zdaje się że nie bez powodu w komentarzu config.php nie jest wyszczególniony ten system cache...
(24.07.2009, 11:58)taxido16 napisał(a): CryptoReklama?

Nie, ale to, że jesteśmy na supporcie MyBB nie oznacza, iż nie można krytykować niektórych elementów tego silnika czy porównywać ich z innymi.

Gdy zakładam / pomagam komuś w zakładaniu forum zawsze wybieram z tego duetu: phpBB3 i MyBB. Oba mają swoje zalety i wady, zaś SMF w ogóle nie przypada mi do gustu.

W kwestii wydajności MyBB zostało poprawione w stosunku do 1.2 (przypomnijcie sobie pracę licencjacką BlueMan'a), ale jak widać, nadal nie jest z tym dobrze.
(24.07.2009, 12:21)lukasamd napisał(a): /.../
W kwestii wydajności MyBB zostało poprawione w stosunku do 1.2 (przypomnijcie sobie pracę licencjacką BlueMan'a), ale jak widać, nadal nie jest z tym dobrze.

No właśnie - dlatego trzeba szukać rozwiązań :) MyBB jest stosunkowo młodym skryptem i dlatego będzie posiadać błędy lub niezoptymalizowane rozwiązania. Takie życie.
Najważniejsze jednak jest to, że np. phpBB istnieje od grudnia 2000 roku, kiedy wyszła stabilna wersja 1.0.0, natomiast pierwsza stabilna wersja MyBB wyszła w grudniu 2006. Jakby nie było 6 lat różnicy, a tempo rozwoju... niezbyt porównywalne :D

Wróćmy jednak do tematu - z tą tabelą perm wydaje mi się, że wreszcie ktoś coś zrobi. Dla mnie bardzo uciążliwe jest ustawianie tych reguł za każdym razem, co oczywiście również wpływa na ilość wpisów, a co za tym idzie, ilość pamięci oraz czas generacji odpowiedzi.



Użytkownicy przeglądający ten wątek:

7 gości