hbarquero Posted September 11, 2009 at 02:59 PM Report Share #286464 Posted September 11, 2009 at 02:59 PM Boas pessoasl, A ver se alguem te alguma explicação lógica porque eu não consigo entender 🙂 O caso é o seguinte, tenho uma pagina onde necessito fazer um select de uma tabela que tem uma listagem de cursos (neste momento mais de 4000). aqui esta: <select id="course_id" name="course_id"> <? $query_courses=sqlquery("SELECT id, titulo from courses where school_id='$school_id' "); while ($res=mysql_fetch_assoc($query_courses)) { ?><option value="<?=$res["id"]?>"><?=$res["titulo"]?></option><? } ?> </select> a questão é que isto torna o carregar da pagina, na minha opinião muito, muito lento, no PHP demora - PHP 0.458961 O problema já sei que esta no proprio ciclo pois fazendo o mesmo sem o while: <select id="course_id" name="course_id"> <? $query_courses=sqlquery("SELECT id, titulo from courses where school_id='$school_id' "); /*while ($res=mysql_fetch_assoc($query_courses)) { ?><option value="<?=$res["id"]?>"><?=$res["titulo"]?></option><? }*/ ?> </select> demora apenas - PHP 0.000627 Alguem tem uma explicação ou sugestão para melhorar este tempo? Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
scorch Posted September 11, 2009 at 03:02 PM Report Share #286465 Posted September 11, 2009 at 03:02 PM Sim, divides isso em páginas de 20-30. Assim sendo, ele só carrega 20-30 de cada vez, tornando o carregamento da página muito mais rápido. PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
hbarquero Posted September 11, 2009 at 03:03 PM Author Report Share #286466 Posted September 11, 2009 at 03:03 PM correção: O tempo que coloquei primeiro esta errado, ou seja, em vez de PHP 0.458961 é acima de PHP 0.961746 Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
hbarquero Posted September 11, 2009 at 03:03 PM Author Report Share #286468 Posted September 11, 2009 at 03:03 PM Não posso dividir em páginas visto que tenho que colocar tudo num único Select Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
scorch Posted September 11, 2009 at 03:04 PM Report Share #286469 Posted September 11, 2009 at 03:04 PM Não posso dividir em páginas visto que tenho que colocar tudo num único Select Porquê num único select? PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
hbarquero Posted September 11, 2009 at 03:08 PM Author Report Share #286470 Posted September 11, 2009 at 03:08 PM Porque isso é para ser inserido numa pagina que contem uma listagem de pedidos de informação para cada um dos cursos, e esse select serve para fazer o filtro, ou seja, se tiveres 100 cursos, o select tem de os ter todos, mas se tiveres 1000, continua a ter que apresentar todos os cursos de forma a poderes fazer o filtro. O numero de 4000 cursos, eu sei que é muito, apenas está como teste, nunca vou ter de usar tantos, mas ao fazer os testes deparei-me com esse problema. Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
hbarquero Posted September 11, 2009 at 03:13 PM Author Report Share #286471 Posted September 11, 2009 at 03:13 PM Já agora, mesmo colocando un limit a apenas 500 cursos no select, tenho um tempo sempre acima dos PHP 0.14774 (este foi dos melhores) mas tive tempos como PHP 0.553174 e acima disto. Lógico que tambem depende do servidor, do numero de visitas, etc..., mas de qualquer forma eu acho que é muito tempo para um simples query e select. Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
edsousa Posted September 11, 2009 at 03:19 PM Report Share #286472 Posted September 11, 2009 at 03:19 PM experimenta usar mysql_fetch_row.. é apenas ligeiramente mais rápido, mas duvido que consiga trazer o tempo do script para menos de 0.7 ou 0.8 seg. Alternativa: Cria uma tabela/ficheiro/etc.. que guarde o html do select, gerando-o de novo quando a lista de cursos mudar. P.S.: Actualmente, cada fetch tá a demorar 0,240 ms... Até está bem rápido, o problema é mesmo a quantidade. Tharis Fan ClubMay Tharis bless you Link to comment Share on other sites More sharing options...
hbarquero Posted September 11, 2009 at 03:24 PM Author Report Share #286473 Posted September 11, 2009 at 03:24 PM o mysql_fetch_row pouco muda o tempo. A sugestão de criar um html que apenas mude quando os cursos mudarem é uma ideia, a questão é que sendo usado como filtro o campo que escolhes varia no select ou seja, a cada chamada tenho de mudar o <option value="" selected>nome</option> Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
hbarquero Posted September 11, 2009 at 03:58 PM Author Report Share #286479 Posted September 11, 2009 at 03:58 PM Já agora 🙂 Fiz o teste a criar um ficheiro com todo o conteudo do Select tal como sugerido pelo edsousa $text=""; $query_courses=sqlquery("SELECT id, titulo from courses where school_id='$school_id' "); while ($res=mysql_fetch_row($query_courses)) { $text .='<option value="'.$res["0"].'">'.$res["1"].'</option>'; } $file=dirroot."/cache/courses/course_select" $fh = fopen($file, 'w'); fwrite($fh, $text); fclose($fh); e depois chamar o ficheiro ler o conteudo e fazer o echo. <select id="course_id" name="course_id"> <? $file=dirroot."/cache/courses/course_select"; if (is_file($file)) { $fh = fopen($file, 'r') or die("can't open file"); $datos = fread($fh, filesize($file)); fclose($fh); echo $datos; } ?> </select> O resultado é melhorou algo mas continuo com tempos acima de PHP 0.36839 Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
hbarquero Posted September 11, 2009 at 04:29 PM Author Report Share #286480 Posted September 11, 2009 at 04:29 PM Bem por vezes andamos algo distraidos fiz uma coisa muito simples ob_start(); no inicio do ficheiro e ob_end_flush(); no fim e passou os tempos para PHP 0.006717 Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
softklin Posted September 11, 2009 at 05:02 PM Report Share #286483 Posted September 11, 2009 at 05:02 PM Atenção que isso dos tempos pode não ser muito fiável, porque se fizeres a mesma operação consecutivamente, podes obter tempos (bastantes) diferentes. Tem a ver com o sistema. Mas não cheguei a perceber se o problema seria da query ou dos conteúdos da páginas. E btw, a solução do edsousa está boa, se os cursos não mudarem com frequência, é o ideal, fazer uma pequena cache do HTML a ser gerado para a combobox. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
hbarquero Posted September 11, 2009 at 05:11 PM Author Report Share #286485 Posted September 11, 2009 at 05:11 PM a questão de fazer a cache é que temos cursos por empresas, ou seja, cada empresa que esta com login feito, apenas ve os pedidos de informação para os cursos que ela tem. Se imaginarmos que temos mais de 2000 empresas cada uma com os seus cursos, teria de andar a criar 2000 ficheiros, 1 para cada empresa. As querys estão bem feitas porque a nivel de tempos de SQL, é bastante bom, a melhoria foi mesmo com o uso do ob_start(); e do ob_end_flush(); mesmo em outras paginas do sistema, a melhoria foi substancial. Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
yoda Posted September 11, 2009 at 08:31 PM Report Share #286522 Posted September 11, 2009 at 08:31 PM hbarquero, se estás a executar essas queries localmente, desengana-te acerca dos valores de benchmark .. A razão dos "servidores dedicados" é mesmo a de serem dedicados a essas tarefas .. Um pc comum onde se tem outros programas pesados a ocupar a memória faz com que os valores de benchmark do php / mysql sejam insconstantes. before you post, what have you tried? - http://filipematias.info sense, purpose, direction Link to comment Share on other sites More sharing options...
Darthx Posted September 12, 2009 at 11:46 PM Report Share #286688 Posted September 12, 2009 at 11:46 PM o problema aparenta estar resolvido, mas recomendo a utilizar a extensao mysqli (Mysql Improved) ao invés da velha extensão mysql. Tem maior desempenho e, ao contrario da mysql que está a ser apenas mantida, está a ser actualizada e melhorada. http://pt2.php.net/manual/en/book.mysqli.php Link to comment Share on other sites More sharing options...
yoda Posted September 13, 2009 at 12:02 AM Report Share #286692 Posted September 13, 2009 at 12:02 AM o problema aparenta estar resolvido, mas recomendo a utilizar a extensao mysqli (Mysql Improved) ao invés da velha extensão mysql. Tem maior desempenho e, ao contrario da mysql que está a ser apenas mantida, está a ser actualizada e melhorada. http://pt2.php.net/manual/en/book.mysqli.php Atenção com o uso disso. MySQLi ainda não é perfeito, e tem muitos problemas .. Tem vantagens, sim, mas mais vale usar uma library que está testada e funciona, ainda que pouco "à frentex", do que uma instável e que pode criar problemas no seu uso. before you post, what have you tried? - http://filipematias.info sense, purpose, direction Link to comment Share on other sites More sharing options...
hbarquero Posted September 13, 2009 at 06:04 PM Author Report Share #286798 Posted September 13, 2009 at 06:04 PM hbarquero, se estás a executar essas queries localmente, desengana-te acerca dos valores de benchmark .. A razão dos "servidores dedicados" é mesmo a de serem dedicados a essas tarefas .. Um pc comum onde se tem outros programas pesados a ocupar a memória faz com que os valores de benchmark do php / mysql sejam insconstantes. os valores que mostrei são de um servidor dedicado Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
Darthx Posted September 14, 2009 at 11:15 PM Report Share #287055 Posted September 14, 2009 at 11:15 PM Atenção com o uso disso. MySQLi ainda não é perfeito, e tem muitos problemas .. Tem vantagens, sim, mas mais vale usar uma library que está testada e funciona, ainda que pouco "à frentex", do que uma instável e que pode criar problemas no seu uso. que género de problemas se refere? Não o deveria estar a fazer neste tópico mas deixou-me um pouco curioso. ? posso não ter dado um uso extensivo ao mysqli mas este até agora nos meus projectos não me deixou mal. Link to comment Share on other sites More sharing options...
yoda Posted September 15, 2009 at 12:35 AM Report Share #287062 Posted September 15, 2009 at 12:35 AM que género de problemas se refere? Não o deveria estar a fazer neste tópico mas deixou-me um pouco curioso. ? posso não ter dado um uso extensivo ao mysqli mas este até agora nos meus projectos não me deixou mal. A maioria dos problemas são coisas com que o comum programador nunca vai dar (erros do motor relacionados com coisas mais complexas) .. Ainda assim, são erros, e deparar-se com um deles é tramado 😉 before you post, what have you tried? - http://filipematias.info sense, purpose, direction Link to comment Share on other sites More sharing options...
infopc Posted September 15, 2009 at 02:25 AM Report Share #287066 Posted September 15, 2009 at 02:25 AM Pelo que eu tenho lido, (corrijam-me se estiver errado) os únicos stresses do mysqli têm haver com coisas muito complexas (raramente usadas na web, ou nunca mesma), coisas do tipo ligações com named pipes / replications ainda não vi ninguém queixar-se das situações mais comuns em web, alias no que diz respeito a CRUD, li um artigo há uns dias que falava muito bem do mysqli tanto a nível de desempenho como estabilidade. Mas posso estar enganado... O que não tem solução, solucionado esta... Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now