Betovsky Posted October 16, 2007 at 10:50 AM Report Share #140405 Posted October 16, 2007 at 10:50 AM If a method can be static, declare it static. Speed improvement is by a factor of 4. echo is faster than print. Use echo's multiple parameters instead of string concatenation. Set the maxvalue for your for-loops before and not in the loop. Unset your variables to free memory, especially large arrays. Avoid magic like __get, __set, __autoload require_once() is expensive Use full paths in includes and requires, less time spent on resolving the OS paths. If you need to find out the time when the script started executing, $_SERVER[’REQUEST_TIME’] is preferred to time() See if you can use strncasecmp, strpbrk and stripos instead of regex str_replace is faster than preg_replace, but strtr is faster than str_replace by a factor of 4 If the function, such as string replacement function, accepts both arrays and single characters as arguments, and if your argument list is not too long, consider writing a few redundant replacement statements, passing one character at a time, instead of one line of code that accepts arrays as search and replace arguments. It's better to use select statements than multi if, else if, statements. Error suppression with @ is very slow. Turn on apache's mod_deflate Close your database connections when you're done with them $row[’id’] is 7 times faster than $row[id] Error messages are expensive Do not use functions inside of for loop, such as for ($x=0; $x < count($array); $x) The count() function gets called each time. Incrementing a local variable in a method is the fastest. Nearly the same as calling a local variable in a function. Incrementing a global variable is 2 times slow than a local var. Incrementing an object property (eg. $this->prop++) is 3 times slower than a local variable. Incrementing an undefined local variable is 9-10 times slower than a pre-initialized one. Just declaring a global variable without using it in a function also slows things down (by about the same amount as incrementing a local var). PHP probably does a check to see if the global exists. Method invocation appears to be independent of the number of methods defined in the class because I added 10 more methods to the test class (before and after the test method) with no change in performance. Methods in derived classes run faster than ones defined in the base class. A function call with one parameter and an empty function body takes about the same time as doing 7-8 $localvar++ operations. A similar method call is of course about 15 $localvar++ operations. Surrounding your string by ' instead of " will make things interpret a little faster since php looks for variables inside "..." but not inside '...'. Of course you can only do this when you don't need to have variables in the string. When echoing strings it's faster to separate them by comma instead of dot. Note: This only works with echo, which is a function that can take several strings as arguments. A PHP script will be served at least 2-10 times slower than a static HTML page by Apache. Try to use more static HTML pages and fewer scripts. Your PHP scripts are recompiled every time unless the scripts are cached. Install a PHP caching product to typically increase performance by 25-100% by removing compile times. Cache as much as possible. Use memcached - memcached is a high-performance memory object caching system intended to speed up dynamic web applications by alleviating database load. OP code caches are useful so that your script does not have to be compiled on every request When working with strings and you need to check that the string is either of a certain length you'd understandably would want to use the strlen() function. This function is pretty quick since it's operation does not perform any calculation but merely return the already known length of a string available in the zval structure (internal C struct used to store variables in PHP). However because strlen() is a function it is still somewhat slow because the function call requires several operations such as lowercase & hashtable lookup followed by the execution of said function. In some instance you can improve the speed of your code by using an isset() trick. Ex. if (strlen($foo) < 5) { echo "Foo is too short"; } vs. if (!isset($foo{5})) { echo "Foo is too short"; } Calling isset() happens to be faster then strlen() because unlike strlen(), isset() is a language construct and not a function meaning that it's execution does not require function lookups and lowercase. This means you have virtually no overhead on top of the actual code that determines the string's length. When incrementing or decrementing the value of the variable $i++ happens to be a tad slower then ++$i. This is something PHP specific and does not apply to other languages, so don't go modifying your C or Java code thinking it'll suddenly become faster, it won't. ++$i happens to be faster in PHP because instead of 4 opcodes used for $i++ you only need 3. Post incrementation actually causes in the creation of a temporary var that is then incremented. While pre-incrementation increases the original value directly. This is one of the optimization that opcode optimized like Zend's PHP optimizer. It is a still a good idea to keep in mind since not all opcode optimizers perform this optimization and there are plenty of ISPs and servers running without an opcode optimizer. Not everything has to be OOP, often it is too much overhead, each method and object call consumes a lot of memory. Do not implement every data structure as a class, arrays are useful, too Don't split methods too much, think, which code you will really re-use You can always split the code of a method later, when needed Make use of the countless predefined functions If you have very time consuming functions in your code, consider writing them as C extensions Profile your code. A profiler shows you, which parts of your code consumes how many time. The Xdebug debugger already contains a profiler. Profiling shows you the bottlenecks in overview mod_gzip which is available as an Apache module compresses your data on the fly and can reduce the data to transfer up to 80% Fonte : http://reinholdweber.com/?p=3 "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk Link to comment Share on other sites More sharing options...
M6 Posted October 16, 2007 at 11:47 AM Report Share #140419 Posted October 16, 2007 at 11:47 AM Excelente link... Pelas explicações das dicas faz parecer que o PHP é lento ou que a sua implementação não é tão rápida quanto poderia... 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to comment Share on other sites More sharing options...
pedrotuga Posted October 16, 2007 at 12:06 PM Report Share #140423 Posted October 16, 2007 at 12:06 PM O php na verdade é rápido. Na verdade é de longe mais rápido que as tecnologias concorrentes que aí andam. Os problemas com o php podem prendem-se com a escalabilidade pois não está muito desenhado para sites com grande porte de tráfego, se bem que se aguente bem... basta olhar para o yahoo que é o site mais visitado de todos e usa php. O grande problema é que cada visitante acede a um script que é executado individualmente. Se tivermos mil visitantes simultaneos... são mil interpretações de um script. Isto não é grande estratégia para sites de grande trafego. Pode mitigar-se este problema com o uso de fastcgi mas isso não vai resolver os problemas todos. Por outras palavras, o php não está concebido para sites de grande trafego mas acaba por se desenrascar. Mas na área para a qual foi desenhado não tenham dúvidas que é incrivelmente rápido. As dicas são válidas mas algumas são coisas um pouco xonés que lá estão... tipo... um programador com alguma experiencia nunca ia cometer os erros referidos em praí metade delas. Ainda assim é uma boa leitura, pode iluminar muito boa gente. Muita coisa valida para outras linguagens tambem. Link to comment Share on other sites More sharing options...
djthyrax Posted October 16, 2007 at 01:51 PM Report Share #140464 Posted October 16, 2007 at 01:51 PM Para comparação pedrotuga, temos por exemplo o deviantART. Solução deles? PHP (source code em C) alterado à medida, balanceamento de processamento e uso de caching. E só têm 29 servidores a interagir directamente com os clientes (http://admin.deviantart.com/setserver). 😉 PS: Ainda não li o link. EDIT: Depois de ler o link, fiquei a saber coisas que ainda não sabia, e de facto são pequenas coisas que podem fazer a diferença. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
Triton Posted October 16, 2007 at 03:32 PM Report Share #140518 Posted October 16, 2007 at 03:32 PM Na verdade é de longe mais rápido que as tecnologias concorrentes que aí andam. Isso não é verdade. Só mesmo Ruby é que consegue ser mais lento que o PHP... <3 life Link to comment Share on other sites More sharing options...
djthyrax Posted October 16, 2007 at 04:01 PM Report Share #140536 Posted October 16, 2007 at 04:01 PM Na verdade é de longe mais rápido que as tecnologias concorrentes que aí andam. Isso não é verdade. Só mesmo Ruby é que consegue ser mais lento que o PHP... Dá-me um exemplo de uma linguagem mais rápida no domínio web. E só aceito mais rápidas se elas fizerem o mesmo que o PHP, o que inclui controlo/buffering de output, gestão de sessões, etc. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
Triton Posted October 16, 2007 at 04:07 PM Report Share #140541 Posted October 16, 2007 at 04:07 PM Dá-me um exemplo de uma linguagem mais rápida no domínio web. E só aceito mais rápidas se elas fizerem o mesmo que o PHP, o que inclui controlo/buffering de output, gestão de sessões, etc. Eu não tenho de fazer o teu trabalho de casa... vai tu procurar porque elas existem. Não comecem mais uma guerrinha de linguagens... <3 life Link to comment Share on other sites More sharing options...
djthyrax Posted October 16, 2007 at 04:08 PM Report Share #140543 Posted October 16, 2007 at 04:08 PM Dá-me um exemplo de uma linguagem mais rápida no domínio web. E só aceito mais rápidas se elas fizerem o mesmo que o PHP, o que inclui controlo/buffering de output, gestão de sessões, etc. Eu não tenho de fazer o teu trabalho de casa... vai tu procurar porque elas existem. Não comecem mais uma guerrinha de linguagens... Tu é que começaste a dizer que havia mais rápidas, eu estou-te a perguntar se estás a ter em conta os factores que eu enumerei. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
pedrotuga Posted October 16, 2007 at 04:38 PM Report Share #140555 Posted October 16, 2007 at 04:38 PM Podem perguntar ao vosso amigo google e vão chegar à mesma conclusão que eu. http://www.google.com/search?q=php%20vs%20pytohn%20speed http://www.google.com/search?q=php%20vs%20ruby%20speed http://www.google.com/search?q=php%20vs%20perl%20speed http://www.google.com/search?q=php%20vs%20java%20speed http://www.google.com/search?q=php%20vs%20asp%20speed Sempre que os problemas de velocidade do php aparecem estão ligados a grandes volumes de tráfego. Mas como eu já disse isso é por causa da forma como o PHP funciona. Não está feito para essas andanças, ainda que se safe mais ou menos. Link to comment Share on other sites More sharing options...
Battousai Posted November 26, 2007 at 11:43 AM Report Share #150413 Posted November 26, 2007 at 11:43 AM Só mais uma para a lista: Se usarem recorrentemente uma ligação à base de dados, mais vale usar uma conecção persistente. Link to comment Share on other sites More sharing options...
eMineiro Posted March 25, 2008 at 04:20 PM Report Share #175247 Posted March 25, 2008 at 04:20 PM Bem que poderiam traduzir isto xD Dúvida # Use echo's multiple parameters instead of string concatenation Nao entendi xD Link to comment Share on other sites More sharing options...
pedrosorio Posted March 25, 2008 at 04:25 PM Report Share #175250 Posted March 25, 2008 at 04:25 PM http://www.w3schools.com/php/func_string_echo.asp que ou eu muito me engano ou é igual ao 29: # When echoing strings it's faster to separate them by comma instead of dot. Note: This only works with echo, which is a function that can take several strings as arguments. Não respondo a dúvidas por mensagem. Link to comment Share on other sites More sharing options...
djthyrax Posted March 25, 2008 at 06:57 PM Report Share #175278 Posted March 25, 2008 at 06:57 PM Bem que poderiam traduzir isto xD Dúvida # Use echo's multiple parameters instead of string concatenation Nao entendi xD Em vez de fazeres echo "ois".$oi."oix";, fazes echo "ois",$oi,"oix"; Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
pedrosorio Posted June 24, 2009 at 09:20 AM Report Share #274559 Posted June 24, 2009 at 09:20 AM Olha outra: Set the maxvalue for your for-loops before and not in the loop. Do not use functions inside of for loop, such as for ($x=0; $x < count($array); $x) The count() function gets called each time. 40 dicas de optimização... lol Não respondo a dúvidas por mensagem. Link to comment Share on other sites More sharing options...
softklin Posted June 24, 2009 at 11:31 AM Report Share #274582 Posted June 24, 2009 at 11:31 AM Por ser uma linguagem interpretada, não existe esse problema de estar sempre a aceder à função count() nos ciclos? Sempre pensei que assim fosse. 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...
Guest id194 Posted June 24, 2009 at 01:32 PM Report Share #274599 Posted June 24, 2009 at 01:32 PM Este tópico tinha-me passado completamente ao lado e achei-o interessante... Só acho que perde bastante "credibilidade" (não é bem esta a palavra ideal mas está escapar-me uma melhor) porque apesar de em alguns pontos até diz que "forma X é mais rápido que Y por um factor Z" em outros diz "evitem isto" sem qualquer razão a explicar porquê. Como tal, foi à procura de algo melhor e apesar de não ler tudo (nem este tópico li) penso que deve incluir todos os pontos que estão neste tópico (e mais alguns) com explicações para cada um deles: http://www.hm2k.com/posts/50-php-optimisation-tips-revisited Link to comment Share on other sites More sharing options...
pedrosorio Posted June 24, 2009 at 06:54 PM Report Share #274675 Posted June 24, 2009 at 06:54 PM Por ser uma linguagem interpretada, não existe esse problema de estar sempre a aceder à função count() nos ciclos? Sempre pensei que assim fosse. O problema de chamar uma função num ciclo é igual para linguagens interpretadas ou compiladas (claro que no caso de uma linguagem compilada em que count() fosse uma macro e o array tivesse tamanho definido em compile-time esse problema não existiria). Não respondo a dúvidas por mensagem. 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