Pergunta

Eu estou construindo um site PHP, mas por agora o único PHP que estou usando é uma meia-dúzia ou mais inclui em determinadas páginas. (Eu provavelmente usará algumas consultas de banco de dados, eventualmente.)

São declarações include() simples uma preocupação para a velocidade ou descamação, ao contrário de HTML estática? Que tipo de coisas tendem a causar um site para atolar?

Foi útil?

Solução

A rigor, HTML reta servirá sempre mais rápido do que uma abordagem do lado do servidor uma vez que o servidor não tem que fazer qualquer interpretação do código.

Para responder a grande questão, há são uma série de coisas que fará com que seu site para atolar; simplesmente não há limite específico para quando seu código está causando o problema vs PHP. (Tenha em mente que muitos dos locais do Yahoo são PHP-driven, por isso não acho que o PHP pode não escala).

Uma coisa que notei é que os sites-driven PHP que são os mais lentos são os que incluem mais do que é necessário para exibir uma página específica. OSCommerce (oscommerce.com) é um dos mais carrinhos de compras orientada para o PHP populares. Ele tem um mau hábito, no entanto, de incluir toda a sua funcionalidade principal (apenas no caso de que seja necessário) em cada página. Assim, mesmo se você não precisa exibir uma 'caixa de informações', a função é carregado. Por outro lado, há muitos frameworks PHP lá fora (como CakePHP, Symfony e CodeIgniter) que dê uma 'carregá-lo como você precisar dele' abordagem.

Gostaria de aconselhar o seguinte:

  1. Não inclua mais funcionalidades do que você precisa para uma página específica
  2. Mantenha funções base separada (usar uma abordagem MVC quando possível)
  3. Use require_once em vez de incluir, se você acha que vai ter aninhados inclui (por exemplo, página A inclui arquivo B que inclui arquivo C). Isso irá evitar incluindo o mesmo arquivo mais de uma vez. Ele também irá parar o processo se um arquivo não pode ser encontrado; contribuindo assim para o processo de resolução de problemas;)
  4. páginas estáticas cache como HTML se possível - para evitar ter de reanalisar quando as coisas não mudam

Outras dicas

Certamente include () é mais lento do que páginas estáticas. No entanto, com sistemas modernos que você não é provável que você veja isso como um gargalo por um longo tempo - se alguma vez. Os benefícios de usar inclui manter partes comuns do seu site atualizado superam o pequeno impacto na performance, na minha opinião (com navegação diferente em uma página porque você se esqueceu de atualizá-lo leva a uma má experiência do usuário e, assim, sentimentos ruins sobre o seu site / empresa / whatever).

Usando cache não vai realmente quer ajudar - caching código vai ser mais lento do que apenas um include (). A única caching tempo vai beneficiar você é se você estiver fazendo cálculos computacionalmente intensivas (muito raro, em páginas da web), ou pegar dados a partir de um banco de dados.

Parece que você está participando de um pouco de otimização prematura. Se a aplicação não é construído, enquanto as preocupações de desempenho são bom estar ciente de, a sua principal preocupação deve estar recebendo o aplicativo escrito.

Inclui são um fato da vida. Não se preocupe sobre o número, a preocupação sobre como manter o código bem organizado (estrutura de pastas PERA é uma coisa adorável, se você não sabe o que eu estou falando sobre olhar para a estrutura dos arquivos de classe do Zend Framework).

Em foco em obter o pedido por escrito, com uma quantidade razoável de abstração. Grupo todas as suas chamadas DB em uma classe (ou classes) para que você minimizar a duplicação de código (keep it simple e tudo) e quando chega a hora de refatorar e otimizar suas consultas estão localizados centralmente. Também começar a fazer alguns testes unitários para evitar regressão.

Uma vez que o aplicativo está instalado e funcionando, não pergunte-nos o que é mais rápido ou melhor, uma vez que depende de cada aplicação que o gargalo será. Pode acontecer que, mesmo que você tem muita inclui, seus loops estão comendo o seu tempo, ou o que quer. Use XDebug e perfil de seu código uma vez que sua instalado e funcionando. Olhe para os segmentos de código que está comendo uma quantidade desproporcional de tempo, em seguida, refatorar. Se você se concentrar demais agora no acerto de desempenho entre incluir e include_once você vai acabar perseguindo um fantasma quando esses pedidos onda rodando em sincronia estão comendo o seu pequeno-almoço.

Embora nesse meio tempo, as melhores sugestões são olhar através do php.net manual e certifique-se há um construído em função de fazer algo que você está tentando fazer, usá-lo! extensões baseadas-C do PHP será sempre mais rápido do que qualquer código PHP que você pode escrever, e você ficará surpreso como muito do que você está tentando fazer já está feito.

Mas, novamente, eu não posso forçar este bastante, otimização prematura é MAU !!! Apenas obter o seu aplicativo do chão com bons níveis de abstração, o perfil dele, em seguida, corrigir o que realmente está comendo seu tempo em vez de consertar o que você acha que pode comer o seu tempo.

Nah inclui estão bem, nada para se preocupar lá.

Você pode querer pensar sobre beliscar seus cabeçalhos de cache um pouco em algum momento, mas a menos que você está recebendo sucessos significativos que não deve ser problema. Assumindo que este é todos os dados estáticos, você pode até considerar a conversão todo o site para estático HTML (maneira mais fácil: escrever um script que agarra cada página através do servidor web e despeja-lo em uma estrutura dir correspondência)

A maioria das aplicações web são limitados pela velocidade da sua base de dados (ou qualquer que seja seu armazenamento externo é, mas 9/10 vezes que vai ser um banco de dados), o código da aplicação raramente é motivo de preocupação, e não soa como você está fazendo qualquer coisa que você precisa se preocupar com ainda.

Antes de tomar qualquer decisão de longa duração sobre como estruturar o código para o seu site, eu recomendo que você faça alguma leitura sobre o MVC padrão de design. Enquanto há outros este parece estar a ganhar uma grande quantidade de terra nos círculos de desenvolvimento web e certamente será em torno de um tempo. Você pode querer dar uma olhada em alguns dos outros padrões de projeto sugerido por Martin Fowler em suas Padrões de Enterprise Application Arquitetura antes de tomar decisões finais sobre que tipo de projeto que melhor atender às suas necessidades.

Dependendo do tamanho e escopo do seu projeto, você pode querer ir com uma estrutura pronta para PHP como o Zend Framework ou PHP Em Trax ou você pode decidir construir sua própria solução.

Especificamente em relação a renderização do conteúdo HTML eu recomendo fortemente que você use alguma forma de templates, a fim de manter a sua lógica de negócios separada da sua lógica de exibição. Descobri que esta regra simples no meu desenvolvimento me salvou horas de trabalho quando um ou o outro precisava ser mudado. Eu usei http://www.smarty.net/">Smarty e eu sei que a maioria dos quadros lá fora, quer ter um sistema de modelo próprio ou fornecer uma arquitetura plug-in que permite que você use seu próprio preferido método. Como você olhar para possíveis soluções, eu recomendo que você olhar para aquele que é capaz de criar versões em cache.

Por último, se você está preocupado com a velocidade no back-end, então eu recomendo que você olhar para formas de minimizar as suas chamadas seu armazenamento de dados back-end (seja ele um banco de dados ou sistema de arquivos apenas). Tente evitar o carregamento e renderização muito conteúdo (digamos, um grande relatório armazenado em uma tabela que contém centenas de registros) de uma só vez. Se possível olhar para formas de fazer pedaços a carga interface de usuário menores de dados de cada vez. E se você está especialmente preocupada com o tempo de carregamento real do seu conteúdo html e seu CSS, Javascript ou outras dependências Eu recomendaria que você reveja estas sugestões dos indivíduos em Yahoo!.

Para adicionar sobre o que Jaytee mencionado - funcionalidade de carregamento quando você precisar dele. Se você não está usando qualquer uma das estruturas que fazem isso automaticamente, você pode querer olhar para a funcionalidade __autoload () que foi introduzido em PHP5 - basicamente, sua própria lógica pode ser invocado quando você instancia uma classe particular se não é já carregado. Isso lhe dá uma chance de include () um arquivo que define essa classe on-demand.

A maior coisa que você pode fazer para acelerar o seu aplicativo é usar um cache Opcode, como APC . Há uma excelente lista e descrição disponível em Wikipedia .

Quanto simples inclui estão em causa, tenha cuidado para não incluir muitos arquivos em cada solicitação como o disco I / O pode causar o aplicativo para não escala bem. Algumas dezenas inclui deve ser fino, mas é geralmente uma boa idéia para embalar seus arquivos mais comumente incluídos em um único script para que você só tem uma incluir. O custo na memória de ter algumas aulas aqui e ali você não precisa carregado será melhor do que o custo do disco I / O para a inclusão de centenas de arquivos menores.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top