Como facer PHP
  fodidamente rápido
Fran Diéguez – OpenHost && Mabishu
Sobre min




      Este traballo ten a licenza Creative Commons Atribución 3.0.
2     Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Fran Diéguez
    ●
        Traballo en OpenHost e na OSL da USC
    ●
        Desenvolvedor web de aplicativos con altas
        taxas de usuarios
        ●
            Traballei durante 3 anos con Ruby on Rails
        ●
            Agora mesmo estou traballando nunha plataforma
            editorial dixital para periódicos desenvolvida con
            PHP (Zend, Smarty, Doctrine)
    ●
        Estou perxudicado (as festas pérdenme)


             Este traballo ten a licenza Creative Commons Atribución 3.0.
3            Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Que imos ver?
    ●
        Consideracións que poucos saben e como
        atallalas
    ●
        Sistemas de cache
    ●
        Sistemas de plantillas: Smarty 3 (non 2)
    ●
        Clustering




           Este traballo ten a licenza Creative Commons Atribución 3.0.
4          Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Consideracións que poucos saben
    e como atallalas




      Este traballo ten a licenza Creative Commons Atribución 3.0.
5     Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Principais lugares de bottlenecks
    ●
        Sistemas de ficheiros
    ●
        Conexións simultáneas
    ●
        Memoria compartida
    ●
        Xestión de procesos do sistema
    ●
        Conexión a outros servidores




           Este traballo ten a licenza Creative Commons Atribución 3.0.
6          Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Sistemas de ficheiros
    ●
        Se usades Linux nos vosos servers tedes que
        ter en conta as restricións dos FS:
        ●
            Sempre son problemas derivados do sistema de
            nodos-i
        ●
            Normalmente os sistemas de ficheiros funcionan
            ben até os 1024 elementos dentro dun mesmo
            nodo-i
        ●
            Polo que sempre tentade que dentro dun cartafol
            haxa como máximo 1024 elementos
            –    Se vos pasades empregade aniñado de cartafoles.

             Este traballo ten a licenza Creative Commons Atribución 3.0.
7            Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Este traballo ten a licenza Creative Commons Atribución 3.0.
8   Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Problema de conexións
simultáneas
●   Se temos poucas conexións
    (usuarios concurrentes) o noso
    script PHP usará menos memoria
    compartida
●   Se temos moitas conexións
    simultáneas PHP non xestiona
    nada ben a memoria compartida e
    pode ocasionar perdas de
    rendemento incríbeis
●   SOLUCIÓN:
    ●   Usar sistemas de memoria
        compartida externa
    ●   Cachear a estáticos ou OpCode
    ●   Utilizar métodos de abstracción
        para usar servizos de terceiros

            Este traballo ten a licenza Creative Commons Atribución 3.0.
9           Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Como simulamos altas taxas de
usuarios?
 ●
     Hai moitas ferramentas
     ●
         Ab do Proxecto Apache
     ●
         Httperf de HP, un manual moi chulo
     ●
         ...
 ●
     PROBLEMA:
     ●
         Non representan de forma fidedigna as accións de
         usuarios (useflow completo do usuario)


           Este traballo ten a licenza Creative Commons Atribución 3.0.
10         Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Servidores de aplicativo vs
servidores de estáticos
 ●
     É moi importante ter ben diferenciados os
     servidores que serven ficheiros logo dun
     procesado (aplicativo) dos que son servidores
     de estáticos
     ●
         Eu recomendo que estean en distintas máquinas
         cando o proxecto creza dabondo
     ●
         Podedes empregar o que queirades pero:
         –    Apache: como server de aplicacións co módulo
              mod_php
         –    Nginx: como server de estáticos

          Este traballo ten a licenza Creative Commons Atribución 3.0.
11        Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Coding Standards
 ●
     Non teñen relación directa co rendemento da
     app
     ●
         Pero fallos pequenos poden incrementar as
         chamadas internas do parser de PHP
 ●
     Exemplo:
     ●
         Eliminando os ?> dos controladores e modelos
         obrigas a PHP a non pechar os streams de código
         o cal implica un incremento de rendemento dun
         0,4 % do script final.

          Este traballo ten a licenza Creative Commons Atribución 3.0.
12        Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Máis exemplos
●    Uso das funcións de expresións regulares de Perl
     ●   Preg_replace
     ●   Preg_match
     ●   Etc.
●    Uso de include vs require (*once)
●    Outro exemplo chorra:
         –   Impresión de texto con:
                ●   Print e non echo
                ●   Usade a nomenclatura “{$nome_do_usuario}” e non “$nome_do_usuario”
●    O mito de que o uso de Orientación a obxectos é máis lento
     xa non se cumpre
     ●   A partires de PHP 5.3 isto mellorou moitísimo
             Este traballo ten a licenza Creative Commons Atribución 3.0.
13           Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Standard Public Library
●    Se queredes facer que PHP vaia máis rápido
     ●   POR FAVOR USADE O SPL DE PHP
     ●   Son APIs escritas en C e compiladas en lingua máquina polo que
         vai ir moi rápido
●    Ten API para moitas das tarefas comúns cando queremos
     acceder a elementos do sistema a baixo nivel:
     ●   Iteradores de Obxectos, Arrays, Ficheiros, Directorios
     ●   Parseo de XML optimizado
     ●   Sistema de excepcións máis extenso que o incluído no core.
●    Vantaxe: todo orientado a obxectos


           Este traballo ten a licenza Creative Commons Atribución 3.0.
14         Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Usade proffiling
●    O proffiling é analizar as chamadas internas da linguaxe e o uso de
     memoria de cada unha delas
●    Para PHP usade Xdebug, basicamente porque non hai outro
     ●   Permite proffiling e debugging de forma moi cómoda
●    Para consultar os resultados empregade Kcachegrind ou webgrind.
●    Se sabedes interpretar de forma correcta os resultados podedes
     saber onde están os bottlenecks nos vosos apps.




            Este traballo ten a licenza Creative Commons Atribución 3.0.
15          Para ver unha copia da licenza visite http://tinyurl.com/2v352h
En resumo, atacamos así
 ●
     Gardando todo en memoria compartida
 ●
     Crear estáticos
 ●
     Balancear carga entre varios servers
     ●
         Sistemas cache distribuídas
 ●
     Problema de conexións simultáneas




          Este traballo ten a licenza Creative Commons Atribución 3.0.
16        Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Sistemas de caché




       Este traballo ten a licenza Creative Commons Atribución 3.0.
17     Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Sistemas de caché
 ●
     Hai dous tipos
     ●
         Sistemas de caché interna
     ●
         Sistemas de caché externa
 ●
     Para cada un salientamos
     ●
         Interna: APC
     ●
         Externa: Memcache




          Este traballo ten a licenza Creative Commons Atribución 3.0.
18        Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Sistemas de caché e II
 ●
     O realmente interesante é ter unha
     infraestrutura escalonada de sistema de Cache
     ●
         Zend Framework fornece un sistema de varias capas
         onde podes aniñar distintos sistemas de caché
         segundo a súa velocidade: Zend_Cache
         –   APC
         –   Memcache
         –   Base de datos
         –   Cache de sistema de ficheiros
         –   Personalizadas


          Este traballo ten a licenza Creative Commons Atribución 3.0.
19        Para ver unha copia da licenza visite http://tinyurl.com/2v352h
APC (Alternative PHP Caché)
 ●   A partir de PHP 5.4 será
     incluído no paquete
     base de PHP polo que
     podedes empregalo sen
     instalación algunha
     ●   Para todo lo demás:
         usade pecl
 ●   Api moi sinxela:
     ●   apc_exists()
     ●   apc_add()
     ●   apc_fetch()
           Este traballo ten a licenza Creative Commons Atribución 3.0.
20         Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Memcache
●    Agnóstico á lingua de programación
●    Sistema totalmente distribuído
●    Permite ter un banco de memoria (pares chave-valor)
     do tamaño que queirades nunha máquina externa que
     comparte recursos a varios servers
●    Permite multiserver e multiclientes
●    Api moi sinxela:
     ●   Memcache::connect, conexión inicial ao porto 11211
     ●   Memcache::set
     ●   Memcache::get
           Este traballo ten a licenza Creative Commons Atribución 3.0.
21         Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Sistemas de plantillas




       Este traballo ten a licenza Creative Commons Atribución 3.0.
22     Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Sistemas de plantillas
 ●
     Hai moita controversia co sistema de plantillas
     ●
         Moitas persoas prefiren empregar PHP misturado
         con HTML
     ●
         Outras moitas empregan un sistema de plantillas
 ●
     Todo depende das vosas necesidades porén eu
     prefiro empregar un sistema de plantillas
     ●
         Vantaxes: sistemas de caching e compilación a
         opcode das plantillas, etc, etc, etc
     ●
         Desvantaxes: obrigan a aprender unha nova sintaxe
         e distintas API.
          Este traballo ten a licenza Creative Commons Atribución 3.0.
23        Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Smarty 3
 ●
     Para min e a unha solución definitiva
 ●
     Baixo as miñas probas
     ●
         Incremento de rendemento do 30% fronte a
         Smarty 2
     ●
         Incremento de rendemento do 15% fronte a uso
         de PHP embembed
         –    Logo de que Smarty compile as vistas a PHP
     ●
         Incremento de rendemento do 40% fronte a uso
         de PHP Embembed
         –    Logo que Smarty compile as vistas a OpCode
          Este traballo ten a licenza Creative Commons Atribución 3.0.
24        Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Smarty 3 características
●    Olvidádevos de Smarty 2 (cousa do pasado, 3 meses)
●    Características:
     ●   Template inheritance
     ●   Sistema de cache por grupos
     ●   Compilación a OpCode
     ●   Compilación a PHP optimizado
     ●   Totalmente extensíbel
     ●   Facilita a reutilización de partials
     ●   Sistema bastante bo de plugins (non orientado a obxectos!!!)


           Este traballo ten a licenza Creative Commons Atribución 3.0.
25         Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Caché, caché, caché
 ●
     Para o caso das plantillas con partes dinámicas
     ●
         Tipico: Hola {$nome_do_usuario}
     ●
         Tentade compilar a OpCode con servers
         especializados como Zend Server (aviso $$$)
 ●
     Para o caso de plantillas estáticas
     ●
         Compilade todo a html estático escribindo en
         filesystem ou memcache
     ●
         Incluso podedes empregar este sistema para
         cachear fragmentos (partials)

          Este traballo ten a licenza Creative Commons Atribución 3.0.
26        Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Clustering




      Este traballo ten a licenza Creative Commons Atribución 3.0.
27    Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Sistemas de clustering
 ●
     Sodes desenvolvedores, non perdades tempo
     en administración de sistemas
 ●
     O mellor é empregar sistemas que poidan
     autoescalar
     ●
         Eu recomendo EC2 combinado con S3 de Amazon
     ●
         E se o presuposto o permite empregade Akamai.




          Este traballo ten a licenza Creative Commons Atribución 3.0.
28        Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Apps na nube
 ●
     Como fago que o meu App poida empregar
     clustering ou poida correr na nube?
     ●
         Realmente non cambia moito da infraestrutura
         que tes sempre que empregues as anteriores
         suxestións
         –    Caches distribuídas
         –    Conversión a estáticos e Opcode
         –    Diferencia de servidores de aplicativos
              vs servidores de estáticos



          Este traballo ten a licenza Creative Commons Atribución 3.0.
29        Para ver unha copia da licenza visite http://tinyurl.com/2v352h
Preguntas




       Este traballo ten a licenza Creative Commons Atribución 3.0.
30     Para ver unha copia da licenza visite http://tinyurl.com/2v352h

Como facer PHP fodidamente rápido

  • 1.
    Como facer PHP fodidamente rápido Fran Diéguez – OpenHost && Mabishu
  • 2.
    Sobre min Este traballo ten a licenza Creative Commons Atribución 3.0. 2 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 3.
    Fran Diéguez ● Traballo en OpenHost e na OSL da USC ● Desenvolvedor web de aplicativos con altas taxas de usuarios ● Traballei durante 3 anos con Ruby on Rails ● Agora mesmo estou traballando nunha plataforma editorial dixital para periódicos desenvolvida con PHP (Zend, Smarty, Doctrine) ● Estou perxudicado (as festas pérdenme) Este traballo ten a licenza Creative Commons Atribución 3.0. 3 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 4.
    Que imos ver? ● Consideracións que poucos saben e como atallalas ● Sistemas de cache ● Sistemas de plantillas: Smarty 3 (non 2) ● Clustering Este traballo ten a licenza Creative Commons Atribución 3.0. 4 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 5.
    Consideracións que poucossaben e como atallalas Este traballo ten a licenza Creative Commons Atribución 3.0. 5 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 6.
    Principais lugares debottlenecks ● Sistemas de ficheiros ● Conexións simultáneas ● Memoria compartida ● Xestión de procesos do sistema ● Conexión a outros servidores Este traballo ten a licenza Creative Commons Atribución 3.0. 6 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 7.
    Sistemas de ficheiros ● Se usades Linux nos vosos servers tedes que ter en conta as restricións dos FS: ● Sempre son problemas derivados do sistema de nodos-i ● Normalmente os sistemas de ficheiros funcionan ben até os 1024 elementos dentro dun mesmo nodo-i ● Polo que sempre tentade que dentro dun cartafol haxa como máximo 1024 elementos – Se vos pasades empregade aniñado de cartafoles. Este traballo ten a licenza Creative Commons Atribución 3.0. 7 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 8.
    Este traballo tena licenza Creative Commons Atribución 3.0. 8 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 9.
    Problema de conexións simultáneas ● Se temos poucas conexións (usuarios concurrentes) o noso script PHP usará menos memoria compartida ● Se temos moitas conexións simultáneas PHP non xestiona nada ben a memoria compartida e pode ocasionar perdas de rendemento incríbeis ● SOLUCIÓN: ● Usar sistemas de memoria compartida externa ● Cachear a estáticos ou OpCode ● Utilizar métodos de abstracción para usar servizos de terceiros Este traballo ten a licenza Creative Commons Atribución 3.0. 9 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 10.
    Como simulamos altastaxas de usuarios? ● Hai moitas ferramentas ● Ab do Proxecto Apache ● Httperf de HP, un manual moi chulo ● ... ● PROBLEMA: ● Non representan de forma fidedigna as accións de usuarios (useflow completo do usuario) Este traballo ten a licenza Creative Commons Atribución 3.0. 10 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 11.
    Servidores de aplicativovs servidores de estáticos ● É moi importante ter ben diferenciados os servidores que serven ficheiros logo dun procesado (aplicativo) dos que son servidores de estáticos ● Eu recomendo que estean en distintas máquinas cando o proxecto creza dabondo ● Podedes empregar o que queirades pero: – Apache: como server de aplicacións co módulo mod_php – Nginx: como server de estáticos Este traballo ten a licenza Creative Commons Atribución 3.0. 11 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 12.
    Coding Standards ● Non teñen relación directa co rendemento da app ● Pero fallos pequenos poden incrementar as chamadas internas do parser de PHP ● Exemplo: ● Eliminando os ?> dos controladores e modelos obrigas a PHP a non pechar os streams de código o cal implica un incremento de rendemento dun 0,4 % do script final. Este traballo ten a licenza Creative Commons Atribución 3.0. 12 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 13.
    Máis exemplos ● Uso das funcións de expresións regulares de Perl ● Preg_replace ● Preg_match ● Etc. ● Uso de include vs require (*once) ● Outro exemplo chorra: – Impresión de texto con: ● Print e non echo ● Usade a nomenclatura “{$nome_do_usuario}” e non “$nome_do_usuario” ● O mito de que o uso de Orientación a obxectos é máis lento xa non se cumpre ● A partires de PHP 5.3 isto mellorou moitísimo Este traballo ten a licenza Creative Commons Atribución 3.0. 13 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 14.
    Standard Public Library ● Se queredes facer que PHP vaia máis rápido ● POR FAVOR USADE O SPL DE PHP ● Son APIs escritas en C e compiladas en lingua máquina polo que vai ir moi rápido ● Ten API para moitas das tarefas comúns cando queremos acceder a elementos do sistema a baixo nivel: ● Iteradores de Obxectos, Arrays, Ficheiros, Directorios ● Parseo de XML optimizado ● Sistema de excepcións máis extenso que o incluído no core. ● Vantaxe: todo orientado a obxectos Este traballo ten a licenza Creative Commons Atribución 3.0. 14 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 15.
    Usade proffiling ● O proffiling é analizar as chamadas internas da linguaxe e o uso de memoria de cada unha delas ● Para PHP usade Xdebug, basicamente porque non hai outro ● Permite proffiling e debugging de forma moi cómoda ● Para consultar os resultados empregade Kcachegrind ou webgrind. ● Se sabedes interpretar de forma correcta os resultados podedes saber onde están os bottlenecks nos vosos apps. Este traballo ten a licenza Creative Commons Atribución 3.0. 15 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 16.
    En resumo, atacamosasí ● Gardando todo en memoria compartida ● Crear estáticos ● Balancear carga entre varios servers ● Sistemas cache distribuídas ● Problema de conexións simultáneas Este traballo ten a licenza Creative Commons Atribución 3.0. 16 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 17.
    Sistemas de caché Este traballo ten a licenza Creative Commons Atribución 3.0. 17 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 18.
    Sistemas de caché ● Hai dous tipos ● Sistemas de caché interna ● Sistemas de caché externa ● Para cada un salientamos ● Interna: APC ● Externa: Memcache Este traballo ten a licenza Creative Commons Atribución 3.0. 18 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 19.
    Sistemas de cachée II ● O realmente interesante é ter unha infraestrutura escalonada de sistema de Cache ● Zend Framework fornece un sistema de varias capas onde podes aniñar distintos sistemas de caché segundo a súa velocidade: Zend_Cache – APC – Memcache – Base de datos – Cache de sistema de ficheiros – Personalizadas Este traballo ten a licenza Creative Commons Atribución 3.0. 19 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 20.
    APC (Alternative PHPCaché) ● A partir de PHP 5.4 será incluído no paquete base de PHP polo que podedes empregalo sen instalación algunha ● Para todo lo demás: usade pecl ● Api moi sinxela: ● apc_exists() ● apc_add() ● apc_fetch() Este traballo ten a licenza Creative Commons Atribución 3.0. 20 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 21.
    Memcache ● Agnóstico á lingua de programación ● Sistema totalmente distribuído ● Permite ter un banco de memoria (pares chave-valor) do tamaño que queirades nunha máquina externa que comparte recursos a varios servers ● Permite multiserver e multiclientes ● Api moi sinxela: ● Memcache::connect, conexión inicial ao porto 11211 ● Memcache::set ● Memcache::get Este traballo ten a licenza Creative Commons Atribución 3.0. 21 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 22.
    Sistemas de plantillas Este traballo ten a licenza Creative Commons Atribución 3.0. 22 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 23.
    Sistemas de plantillas ● Hai moita controversia co sistema de plantillas ● Moitas persoas prefiren empregar PHP misturado con HTML ● Outras moitas empregan un sistema de plantillas ● Todo depende das vosas necesidades porén eu prefiro empregar un sistema de plantillas ● Vantaxes: sistemas de caching e compilación a opcode das plantillas, etc, etc, etc ● Desvantaxes: obrigan a aprender unha nova sintaxe e distintas API. Este traballo ten a licenza Creative Commons Atribución 3.0. 23 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 24.
    Smarty 3 ● Para min e a unha solución definitiva ● Baixo as miñas probas ● Incremento de rendemento do 30% fronte a Smarty 2 ● Incremento de rendemento do 15% fronte a uso de PHP embembed – Logo de que Smarty compile as vistas a PHP ● Incremento de rendemento do 40% fronte a uso de PHP Embembed – Logo que Smarty compile as vistas a OpCode Este traballo ten a licenza Creative Commons Atribución 3.0. 24 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 25.
    Smarty 3 características ● Olvidádevos de Smarty 2 (cousa do pasado, 3 meses) ● Características: ● Template inheritance ● Sistema de cache por grupos ● Compilación a OpCode ● Compilación a PHP optimizado ● Totalmente extensíbel ● Facilita a reutilización de partials ● Sistema bastante bo de plugins (non orientado a obxectos!!!) Este traballo ten a licenza Creative Commons Atribución 3.0. 25 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 26.
    Caché, caché, caché ● Para o caso das plantillas con partes dinámicas ● Tipico: Hola {$nome_do_usuario} ● Tentade compilar a OpCode con servers especializados como Zend Server (aviso $$$) ● Para o caso de plantillas estáticas ● Compilade todo a html estático escribindo en filesystem ou memcache ● Incluso podedes empregar este sistema para cachear fragmentos (partials) Este traballo ten a licenza Creative Commons Atribución 3.0. 26 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 27.
    Clustering Este traballo ten a licenza Creative Commons Atribución 3.0. 27 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 28.
    Sistemas de clustering ● Sodes desenvolvedores, non perdades tempo en administración de sistemas ● O mellor é empregar sistemas que poidan autoescalar ● Eu recomendo EC2 combinado con S3 de Amazon ● E se o presuposto o permite empregade Akamai. Este traballo ten a licenza Creative Commons Atribución 3.0. 28 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 29.
    Apps na nube ● Como fago que o meu App poida empregar clustering ou poida correr na nube? ● Realmente non cambia moito da infraestrutura que tes sempre que empregues as anteriores suxestións – Caches distribuídas – Conversión a estáticos e Opcode – Diferencia de servidores de aplicativos vs servidores de estáticos Este traballo ten a licenza Creative Commons Atribución 3.0. 29 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 30.
    Preguntas Este traballo ten a licenza Creative Commons Atribución 3.0. 30 Para ver unha copia da licenza visite http://tinyurl.com/2v352h