¿Qué es un flujo de trabajo razonable para diseñar webapps?

9

Ha pasado un tiempo desde que hice un desarrollo web sustancial y me gustaría aprovechar las últimas prácticas, pero estoy luchando por visualizar el flujo de trabajo para incorporar todo.

Esto es lo que estoy buscando usar:

  • Marco de CakePHP
  • jsmin (JavaScript Minify)
  • SASS (Hojas de estilo sintacticamente impresionantes)
  • Git

CakePHP:

Bastante autoexplicativo, hacer modificaciones y actualizar la fuente.

jsmin:

Cuando modifica una secuencia de comandos, ¿ejecuta manualmente jsmin para generar el nuevo código minificado, o sería mejor ejecutar un enlace previo a la confirmación que genera automáticamente salidas jsmin de archivos javascript que han cambiado? Suponga que no tengo conocimiento de la implementación de commit hooks.

HABLAR CON DESCARO A:

Realmente me gusta lo que SASS tiene para ofrecer, pero también sé que el código SASS no es compatible con los navegadores de manera predeterminada, por lo que, en algún momento, el código SASS debe transformarse a CSS normal. En qué punto del flujo de trabajo se hace esto.

Git

Estoy aterrorizado de admitirlo, pero la última vez que realicé un desarrollo web sustancial, no utilicé el control de fuente SCM (es decir, utilicé el control de fuente pero consistía en un registro de cambios muy detallado con copias de seguridad).

Desde entonces, tengo mucha experiencia en el uso de Git (así como mercurial y SVN) para el desarrollo de escritorio, pero me pregunto cómo implementarlo mejor para el desarrollo web).

¿Es una práctica común implementar un repositorio remoto en el servidor web para que pueda enviar los cambios directamente al servidor de producción, o existe alguna herramienta multiplataforma (windows / linux) que facilite cargar solo los archivos modificados al servidor de producción? . ¿Existen empresas de alojamiento web que faciliten la implementación de un repositorio remoto, necesito acceso SSH, etc.?

Sé cómo lograr esto en mi propio servidor de prueba con un repositorio remoto con una rama de seguimiento remoto separada, pero nunca antes lo había hecho en un servidor de alojamiento web de producción remoto, así que todavía no conozco las opciones.

Extra:

Estaba considerando implementar un marco de JavaScript donde los archivos de JavaScript separados utilizados en una página se compilan en un solo archivo para cada página en el servidor de producción para limitar la cantidad de descargas de archivos necesarias por página.

¿Ya existe algo como esto? ¿Ya existe un proyecto de código abierto en la naturaleza que implementa algo similar que podría usar y contribuir?

Teniendo en cuenta lo paranoicos que están los desarrolladores web sobre el rendimiento (y el hecho de que la cantidad de solicitudes de archivos en un sitio web es un gran éxito para el rendimiento), supongo que hay algún hacker mago en la red que ya ha abordado este problema.

Evan Plaice
fuente

Respuestas:

2

Puede consultar la extensión PageSpeed ​​de Google para Apache : afaik, hay una opción para agregar y minimizar Javascript y CSS automáticamente y combinarlos con el almacenamiento en caché, esto se ajustaría a lo que menciona que está buscando al final de su publicación.

picos salvajes
fuente
1
Genial, no me di cuenta de que todo esto se podía hacer con un módulo Apache. Minificación de Javascript / CSS, concatenación de JavaScript / CSS, así como muchas otras mejoras de rendimiento opcionales. Después de buscar en Google, incluso descubrí que Dreamhost le proporciona su alojamiento compartido / VPN. Me sorprende que no haya más información al respecto en webmasters.stackexchange.com o stackoverflow.com.
Evan Plaice
5

jsmin

Si no tiene un montón de JS, puede configurar algo para minimizar cada vez que presione guardar. Si tiene muchos JS, hágalo parte de su proceso de implementación (consulte Git a continuación).

HABLAR CON DESCARO A

Use el Marco de Compass . Incluye SASS, además de un pequeño script que "vigila" su directorio SASS y compila los archivos en CSS (incluido CSS minificado, si lo desea) cada vez que guarda. Está construido con RoR en mente, pero puede usarlo fácilmente con cualquier marco web creando un archivo de configuración de Compass y ejecutando el comando "compass watch". Compass también incluye muchas otras herramientas útiles como Blueprint , mixins útiles y generación automática de sprites a través del complemento Lemonade (que debe integrarse en Compass en la próxima versión ).

Git

Dependiendo del tamaño / complejidad del sitio, considere seguir el Capistranomodelo de despliegue. No estoy seguro si puede usar Capistrano directamente con CakePHP, pero la esencia es esta: cada servidor de producción tiene una carpeta "actual" que contiene todo el código que se está ejecutando en producción en ese momento. Cada vez que desea implementar un nuevo código, ejecuta un script que es ssh en cada servidor de producción y hace que (a) copie el contenido de la carpeta "actual" en una carpeta de respaldo (con el nombre de la versión / marca de tiempo), ( b) verifique el último código de Git en la carpeta "actual" y (c) comience a publicar este nuevo código desde la carpeta "actual". De esta manera, puede volver a cualquier versión anterior si es necesario y puede saber exactamente qué revisión está en vivo en producción. Capistrano también le permite agregar todo tipo de tareas personalizadas como parte del proceso de implementación, incluida la minifacción JS / CSS,

Extra

Sí, hay muchos. Google para algo como "CSS / JS concat". Aquí hay uno rápido que encontré para CakePHP: Asset Packer .

Yevgeniy Brikman
fuente
Muchas gracias por el aporte. Realmente me gusta lo que vi con Compass Framework. Solo desearía saber una manera de implementarlo en PHP. Busqué en Google pero no puedo encontrar una alternativa. Capistrano también se ve muy interesante, pero en lugar del modelo de copia de archivos costoso y frágil, solo usaría ssh para decirle al cliente git en todos los servidores remotos que haga una rápida 'git pull --rebase' después de verificar que funcionó en una prueba servidor primero.
Evan Plaice
(cont) El empacador de activos también se ve muy interesante. La única razón por la que elegí la otra respuesta sobre la suya fue que lo contenía todo de una vez con el procesamiento realizado en el servidor (por lo que no se necesitan scripts adicionales). El único inconveniente que veo en la velocidad de las páginas es el procesamiento agregado de contenido estático (que se aborda fácilmente mediante el almacenamiento en caché de contenido estático y / o CDN. Realmente desearía poder aceptar 2 porque su respuesta tiene mucha información valiosa.
Evan Plaice,
No "despliega" el marco de Compass con PHP. Simplemente lo ejecuta mientras codifica, compila sus archivos CSS cada vez que presiona guardar, y los archivos CSS son los que realmente se implementan. Para "ejecutar" la brújula, primero debe generar su archivo de configuración (compass.rb): use esto para generar las opciones de línea de comando: jsfiddle.net/chriseppstein/PG46q/3 . Una vez que tenga la configuración del archivo de configuración con todas sus rutas, simplemente ejecute "compass watch" en la misma carpeta que el archivo de configuración, y la brújula comenzará a recompilar su SASS cada vez que presione guardar. Pruébelo en algún proyecto paralelo: es MUY fácil y rápido.
Yevgeniy Brikman
Además, que yo sepa, Capistrano no copia mucho. Cada vez que implementa, comprueba el último código y simplemente intercambia los nombres de las carpetas. La ventaja es que siempre puede volver a una versión anterior simplemente intercambiando los nombres de las carpetas nuevamente.
Yevgeniy Brikman
Encontré un artículo sobre cómo ponerlo en funcionamiento en PHP. Es más fácil de usar fuera de un proyecto Ruby de lo que esperaba. Rasca mi último comentario sobre Capistrano. Pensé que se usaba para enviar un comando distribuido a varios servidores. Si tengo acceso ssh a los servidores remotos, preferiría descartar un cliente git como un medio para extraer los últimos cambios de la rama de producción. En mi humilde opinión, el intercambio de carpetas es una mala idea. Preferiría etiquetar las revisiones en el ciclo de lanzamiento y simplemente retirar una etiqueta anterior si la actual tiene problemas.
Evan Plaice