9 puntos por xguru 2024-05-27 | 2 comentarios | Compartir por WhatsApp
  • PHP actualmente representa alrededor del 75% de los sitios web en internet
  • PHP no es precisamente el "chico sexy" de los lenguajes de programación, pero ha desempeñado un papel importante desde el nacimiento de internet
  • Ahora es posible ejecutar PHP por completo en Wasmer y Wasmer Edge (beta abierta)

La importancia de ejecutar PHP en WebAssembly

  • Gracias a las características de WebAssembly, se pueden limitar de forma segura los recursos a los que un programa puede acceder
  • Es posible ejecutar PHP de forma segura sin el overhead de la virtualización del sistema operativo o del hardware
  • El equipo de Wasmer invirtió muchísimo tiempo para lograr que PHP funcionara perfectamente y lo más rápido posible sobre WebAssembly
  • Al habilitar el caché de opcodes dentro de WebAssembly, lograron una velocidad hasta 3 veces mayor

Escalabilidad tipo serverless para apps PHP

  • Darle escalabilidad tipo serverless a todas las apps PHP puede desbloquear un valor enorme
  • Puedes ejecutar apps PHP en el edge y pagar solo una fracción de lo que cobran los proveedores de nube
  • Con Wasmer se pueden ejecutar todas las aplicaciones PHP sin tener que preocuparse de que la app rompa el sandbox o haga cosas dañinas que no debería hacer

Los frameworks PHP más populares ya pueden ejecutarse en Wasmer y Wasmer Edge

  • WordPress
  • Symfony
  • Laravel
  • Todas las plantillas PHP: https://wasmer.io/templates?language=php
  • Nota: el soporte de Wasmer Edge para volúmenes de sistema de archivos personalizados aún está en desarrollo. Las apps desplegadas que usan SQLite (como WordPress o Symfony) por ahora solo guardan los cambios en la base de datos en memoria y todavía no los persisten

Sacarle el máximo provecho a WebAssembly y PHP

  • Al habilitar el caché de opcodes, WordPress puede ejecutarse 3 veces más rápido sin modificaciones (de 600ms a 200ms)

Pruébalo tú mismo

  • Si normalmente ejecutas php -S localhost:8000 ., ahora puedes correrlo completamente en sandbox con Wasmer:
    wasmer run php/php --mapdir:/app:. -- /app -S localhost:8000  
    
  • WordPress también se puede ejecutar fácilmente en local. Después de clonar el repositorio de WordPress, ejecuta wasmer run . --net desde la raíz (requiere Wasmer 4.3.1)
  • Se ofrece un PHP CLI totalmente funcional que corre en el servidor y está completamente sandboxeado
  • Ya no tienes que preocuparte de que la app acceda a cosas como /etc/passwd

Una hazaña técnica

  • Hacer que PHP funcionara perfectamente en WebAssembly dentro de Wasmer no fue nada fácil
  • Siguieron el proceso y resolvieron muchos problemas:
    • Descubrieron un bug oscuro en la implementación de longjmp/setjmp necesaria para usar sentencias try/catch dentro de PHP, donde el stack se sobrescribía y no se restauraba correctamente
    • Descubrieron y corrigieron un bug que hacía que las llamadas HTTP salientes fueran 10 veces más lentas
    • Activaron PHP opcache por defecto para obtener tiempos hasta 3 veces más rápidos
    • Hicieron muchas correcciones pequeñas en la capa de virtualización del sistema de archivos y en networking (IPv6)
  • Si seguiste alguna publicación anterior del blog sobre ejecutar WordPress con Wasmer, sabrás que antes hacían falta muchísimas modificaciones de código (o sea, hacks) para cambiar el comportamiento de WordPress y evitar edge cases bloqueantes
  • En la versión más reciente de Wasmer, WordPress, Laravel y Symfony corren en Wasmer sin ninguna modificación de código

Velocidad

  • No bastaba con ejecutar PHP a velocidad base; querían que corriera lo más rápido posible sobre WebAssembly
  • PHP tiene el módulo Zend Opcache, que acelera muchísimo la ejecución
  • El módulo de caché de opcodes optimiza y cachea el bytecode al que se transforma el código fuente PHP, ahorrando tiempo en el análisis del AST de archivos ya procesados
  • El caché de opcodes puede acelerar hasta 3 veces la cantidad de solicitudes que una app puede procesar, así que habilitarlo en WebAssembly parecía una decisión obvia
  • Sin embargo, el caché de opcodes (y la carga de módulos Zend) estaba desactivado por defecto porque requiere dlopen, dlsym y similares, que no están disponibles en Wasm
  • Emprendieron una misión peculiar: habilitar el caché de opcodes en PHP
    • Tras investigar, encontraron una nueva forma de enlazar estáticamente, y aunque tuvieron que corregir muchísimas cosas en el proceso, al final lograron hacerlo funcionar
  • Tiempo de WordPress en Wasm sin Opcache: ~620ms
  • Tiempo de WordPress en Wasm con Opcache habilitado: ~205ms
  • ¡Solo con habilitar Opcache hubo una mejora de rendimiento de 3 veces!
  • Se dieron cuenta de que aún hay más mejoras posibles para acercar PHP a la velocidad nativa (¡manténganse atentos!)

Se abren más oportunidades

  • Esto abre más oportunidades para proyectos que hoy dependen de Emscripten para ejecutar PHP en el navegador, como WordPress playground
    • Estos proyectos podrían empaquetarse de modo que funcionen tanto en el navegador como en el edge
  • Están preparando un enfoque completamente revolucionario para el cold-start (¡Cloudflare y Fly.io, los estamos observando!)
  • Se vienen tiempos emocionantes para el mercado del edge

2 comentarios

 
tsboard 2024-05-28

Personalmente, me parece impresionante y hasta curioso que PHP siga usándose tanto. Jaja, dicen que ya cambió mucho después de aquella época en la que tenía tan mala fama, así que hasta me dan ganas de volver a probar PHP.

 
xguru 2024-05-29

Aunque tanto en Hacker News como en GeekNews hay muchas personas a las que no les gusta PHP jaja,
creo que se va a seguir usando mientras la tecnología llamada web no sea reemplazada por completo por otra cosa.
Pienso que no deberíamos enfocarnos en eso de “lenguaje”, sino verlo como una de las tecnologías que encajan con la “web”.