![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 54 Pomógł: 0 Dołączył: 20.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Mam kilka pytan odnosnie optymalizacji kodu php. Chcialem sie spytac o jakies porady dot. zoptymalizownia kodu, bo imo moje skryptu do najszybszych nie naleza. A i jeszcze takie pytanko. Co bedzie szybsze? miec jedna tabele 'comments' i w niej wszystko komentarze, do wszystkiego (obrazkow, newsow, artow, sondy itp.) czy do newsow osobna tabele np. news_comments, do plikow tez inna, i tak dalej. Bo wlasnie nie wiem co zrobic, moim zdaniem szybsze byloby to drugie roziwazanie (mniej rekordow do przeszukiwania), ale wole sie spytac was o zdanie i druga podobna sprawa, co jest szybsze ?
czy
Dzieki Pozdr |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 406 Pomógł: 9 Dołączył: 24.07.2005 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Myslę że osobne tabelę dla komentarzy to lepszy pomysł ponieważ jest mniej rekordów do pobrania, a co do przykładów to raczej ie różnią się one szybkością...
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 54 Pomógł: 0 Dołączył: 20.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
ok dzieki. i mam jeszcze jedno pytanie. co jest szybsze, gdy nie wiadomo ile elementow ma jakas tablica (inaczej mowiac ile razy ma sie petla wykonac), uzycie foreach, czy zliczenie count() ilosc elementow i pozniej petla for?
|
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
foreach jest szybszy od zwykłaego for'a, w końcu jest zaprojektowany specjalnie do obsługi tablic.
A co do tabel. Jeżeli komentarze do tych wszystkich rzeczy są semantycznie takie same (tytuł,treść,data,podpis, czy jakoś tam) to z perspektywy projektowania baz damych powinno sie trzymać je w jednej tabeli a nie w kilku. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 54 Pomógł: 0 Dołączył: 20.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
struktura kazdej bedzie taka sama, ale jesli stworzenie kilku moze przyspieszyc strone to jednak wole zrobic kilka tabel, a nie jedna
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 111 Pomógł: 0 Dołączył: 27.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
Moim zdaniem lepiej jest stworzyc jedna tabele. Dla kilku tabel bedziesz musial dodawac osobne SELECTY albo dodatkowe ify tudziez case. Wiecej kodu - wiecej czasu na wykonanie skryptu.
Z 1 tabela to bedzie sie zmienial tylko parametr rodzaju komentarza np 1-dla plikow 2-dla newsow itp. A to, ze bedziesz mial duzo rekordow w jednej tabeli, zacznie miec znaczenie jak tych komentarzy bedzie juz naprawde duuuzo. takze jestem za 1 tabela ![]() |
|
|
![]()
Post
#7
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Kilka tabel jest najgorszym wyjściem, ponieważ przeszukiwanie dużej tabeli jest lepsze od wykonywania kilku zapytań na mniejszych tabelach. A poza tym skoro komentarze sa takie same (składniowo) to powinny być trzymane w jednej tabeli.
Szybkośc skryptu nie gra tutaj roli, bo nie zaoszczędzimy tutaj wiele, ale chodfzi o fakt poprawnego merytorycznie zaprojektowania bazy danych. A klika tebael jest złe. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Cytat(mike_mech @ 2005-08-05 19:05:44) foreach jest szybszy od zwykłaego for'a, w końcu jest zaprojektowany specjalnie do obsługi tablic. A sprawdzales? Bo ja tak i wyniki mowia same za siebie. Legenda: count - for ($i = 0; $i < count($loop); $i++) foreach - foreach ($loop as $v) isset - for($i = 0; isset($loop[$i]); $i++) size - for ($i = 0, $n = count($loop); $i < $n; $i++) while - while (list($k, $v) = each($loop)) Wyniki sa powtarzalne. -------------------- Brak czasu :/
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 54 Pomógł: 0 Dołączył: 20.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
aha i zapomnialbym czy istnieje pomiedzy tym
a tym jaka roznica w szybkosci wyswietlania ? bo nie wiem czy zmieniac to (w wypadu wiecej html nie generuje go przy uzyciu echo) Ten post edytował Majcok12 6.08.2005, 20:54:04 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 111 Pomógł: 0 Dołączył: 27.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
w szybkosci działania nie ma żadnej różnicy. ale jest różnica w estetyce pisania skryptów. ja bym to tak napisał:
Ten post edytował Jim 6.08.2005, 21:32:24 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
czy
odpowiedz
uzywaj ' zamiast " jesli piszesz:
to wynikiem bedzie zawartosc zmiennej $asd jesli napiszesz
to wynikiem bedzie Kod $asd Jim, post nademna zle napisał. Cytat moim zdaniem szybsze byloby to drugie roziwazanie (mniej rekordow do przeszukiwania) Poczytaj o indexach mysqla Nie uzywaj 'SELECT * ..', pobieraj tylko to czego potrzebujesz FiDO - bardzo fajny benchmark. Człowiek uczy sie całe życie. tak czy siak i tak bede uzywac foreach'a dla moich tablic o size ~~20. a czasem nawet 100. Znikoma różnica. Większych sie raczej nie uzywa, przynajmniej żadko. |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 111 Pomógł: 0 Dołączył: 27.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(ActivePlayer @ 2005-08-06 21:45:07) jesli piszesz:
to wynikiem bedzie zawartosc zmiennej $asd jesli napiszesz
to wynikiem bedzie Kod $asd ![]() nawet o tym nie wiedzialem bo zwykle uzywam innej skladni Kod "<table><tr><td>" . $txt . "</td></tr></table>" przepraszam za ewentualne wprowadzenie kogos w blad. |
|
|
![]()
Post
#13
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#14
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(FiDO @ 2005-08-06 02:41:30) Cytat(mike_mech @ 2005-08-05 19:05:44) foreach jest szybszy od zwykłaego for'a, w końcu jest zaprojektowany specjalnie do obsługi tablic. A sprawdzales? Bo ja tak i wyniki mowia same za siebie. Legenda: count - for ($i = 0; $i < count($loop); $i++) foreach - foreach ($loop as $v) isset - for($i = 0; isset($loop[$i]); $i++) size - for ($i = 0, $n = count($loop); $i < $n; $i++) while - while (list($k, $v) = each($loop)) Wyniki sa powtarzalne. Faktycznie. Chylę czoła. Ale ... żadnym z powyższych sposobów nie przejdziesz po tablicy o np. takich indeksach: 1,2,5,6,7,10,12,56,57,58,59,100, ... ani po tablicy asocjacyjnej. Więc pomimo że w, bądź co bądź, specyficznych sytuacjach foreach() nie jest najszybszy, to jednak zawsze najbardziej funkcjonalny i elastyczny. Ale i tak benchmarki ciekawe i kształcące ![]() |
|
|
![]()
Post
#15
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Cytat Ale ... żadnym z powyższych sposobów nie przejdziesz po tablicy o np. takich indeksach: 1,2,5,6,7,10,12,56,57,58,59,100, ... ani po tablicy asocjacyjnej. No wlasnie zapomnialem napisac, ze to sie tyczy tylko "zwyklych" tablic ![]() edit: Tak cos czulem.. mozna jeszcze tak: $keys = array_keys($loop); for ($i = 0, $n = count($keys); $i < $n; $i++) { i jest to ok 20% szybsze niz foreach, ale ze wzgledu na mocno zmniejszona czytelnosc nie ma sensu sie w to bawic. -------------------- Brak czasu :/
|
|
|
![]()
Post
#16
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(FiDO @ 2005-08-07 21:15:28) (...) musze cos sprawdzic jeszcze ;] Kiedys widzialem jeszcze jedną konstrukcję, podobno bardzo szybką, ale za cholere nie moge sobie przypomnieć jak to szło. Wyglądało to mniej więcej tak:
no i nie pamietam co było w srodku :/ i nie pamietam gdzie to widzialem. Ale pamietam że mówili że jest bardzo szybkie. Ach ta skleroza ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 11:14 |