Enfoque práctico para mantener jQuery actualizado?


Algunos de los proyectos en los que estamos trabajando tienen fuertes raíces en jQuery 1.4.2 o anterior, y en algún lugar entre la falta de la ventaja de rendimiento (o azúcar sintáctico) de las últimas versiones, la humillación de usar métodos ahora obsoletos, y la incomodidad de implementar una versión de más de 3 años de una biblioteca mantenida activamente, una actualización es ahora inminente.

¿ Cuáles son algunas prácticas populares en la comunidad que podríamos adoptar / volver a visitar para garantizar un despliegue sin problemas (es decir, centrarse en problemas de compatibilidad, recogiendo regresiones globales, re-factorizando parte del código antiguo...)? ¿Cómo se integrarían mejor en SDLC para futuras actualizaciones? ¿Cuál es un programa de actualización razonable para una biblioteca como jQuery (no preveo ganancias significativas o costos justificables para hacerlo con cada versión de punto, pero una vez cada 6-12 meses puede muy bien ser razonable)?

Author: o.v., 2013-03-11

6 answers

Para responder realmente a sus tres preguntas, aquí hay algunas cosas que he hecho o al menos recomiendo:

Mejores prácticas para una implementación de actualización fluida

  • Hágase pruebas. Estas pueden ser pruebas unitarias para su JS y / o pruebas de navegador. Estos deben cubrir al menos la funcionalidad más típica y compleja utilizada dentro de sus proyectos. Si no tienes pruebas, escríbelas. Si no quieres escribir pruebas, reconsidéralo. Si reeeeally no quiere escribir pruebas, al menos tenga una lista de casos de uso que alguien podrá ejecutar manualmente.
  • Asegúrese de que todas sus pruebas pasen antes de la actualización.
  • Lea las notas de la versión para cada versión (principal) entre la versión que usa ahora y la versión más reciente. Consulte también las categorías Removed y Deprecated en los documentos de la API. Si alguno de sus códigos utiliza la interfaz de usuario de jQuery, también consulte las notas de la versión y las guías de actualización para las versiones intersticiales. Como haga esto, tome nota de las cosas que probablemente tendría que cambiar en su base de código (posiblemente haciendo un uso intensivo de grep).
  • Si la versión actual de jQuery de su proyecto es >= 1.6.4, también considere usar el complemento jQuery Migrate para evaluar aún más el trabajo requerido.
  • Decida qué versión desea ser su objetivo de actualización, en función del trabajo necesario para llegar allí, si su proyecto está utilizando bibliotecas de terceros que requieren una determinada versión de jQuery, otros factores que solo usted puede considerar, etc.
  • Reúnase con su equipo para revisar la lista de cambios a realizar en su base de código, y divida/asigne el trabajo en consecuencia. Tal vez escribir algunos scripts u otras herramientas para ayudar. Si tiene uno, es posible que también tenga que actualizar la guía de estilo de codificación / el documento de mejores prácticas de su equipo. Decida sobre versiones de una sola vez (recomendadas) o actualizaciones continuas, si eso es posible+deseable. Idear una estrategia de lanzamiento adecuada. (Recomiendo no liberar el actualice como parte de otro gran cambio no relacionado a su base de código, por lo que es fácil retroceder si lo necesita.)
  • A lo largo del proceso de actualización, ejecute continuamente sus pruebas. Cuando realice pruebas manualmente, siempre supervise la consola del navegador para detectar nuevos errores. Escriba nuevas pruebas que cubran errores inesperados.
  • Cuando todas las pruebas pasen, decida cómo desea implementar roll si se trata de un sitio, todos los usuarios a la vez o un porcentaje a la vez, etc. Para una biblioteca u otro proyecto, tal vez usted lanzaría un versión beta / bleeding edge que puedes dejar que tus usuarios más ambiciosos prueben por ti en la naturaleza.
  • Documente todo lo que acaba de hacer para que sea más fácil para la próxima vez.
  • [Beneficio.]

Cómo integrar actualizaciones en el flujo de trabajo normal

  • De nuevo, pruebas. Asegúrate de tenerlos. Asegúrese de que sean buenos, se mantengan y cubran una gran parte de su base de código y casos de uso. Una configuración de integración continua para automatizar la ejecución de estos las pruebas son muy recomendables.
  • Considera hacer que tu equipo cree y acepte seguir una guía o estándar de estilo de codificación. Esto hará que sea más fácil en el futuro buscar llamadas a funciones o construcciones obsoletas, ya que todos seguirían patrones de codificación similares. Herramientas como scripts, commit hooks, utils de análisis estático, etc. para hacer cumplir el estilo de codificación bueno o malo podría ser útil (dependiendo del equipo).
  • Investigar y tal vez decidir utilizar un paquete administrador como NPM o bower para administrar las versiones de jQuery y otras bibliotecas de terceros que puede utilizar que dependen de él. (Usted todavía necesita para mantener su propio código JS y pasar por prácticamente el mismo proceso que el anterior.)
  • Nuevamente, una vez que haya pasado la versión 1.6.4, asegúrese de que el complemento Migrar sea parte de su flujo de trabajo de actualización.
  • Evalúe qué funcionó desde el proceso inicial de la gran actualización, qué no funcionó y extraiga un proceso general de esto que funcione mejor con su flujo de trabajo actual. Ya sea que planee actualizar o no cada vez que haya una nueva versión, habrá tareas y hábitos de mantenimiento continuos que probablemente querrá mantener como prácticas recomendadas de desarrollo general.

Calendario de actualización razonable

Eso es esencialmente una cuestión de CBA/gestión de riesgos. Tendrás que sopesar algunas cosas:

  • Allí debe no se rompen los cambios de API dentro de la misma versión principal, por lo que generalmente debe ser capaz de actualizar a la versión menor más reciente con el mínimo esfuerzo, no se requiere refactorización. Esto supone que tiene y mantiene buenas pruebas, que puede ejecutar en sus proyectos antes de decidir que todo está lo suficientemente bien para una implementación.
  • Las actualizaciones de versiones principales requieren más investigación, más refactorización y más pruebas. Después del paso de investigación, debe hacer un análisis de costo-beneficio de la actualización.
  • Esto puede no importar mucho, pero si alguno de sus proyectos es un sitio web que tiene muchos usuarios, ¿cuál sería el costo de hacer que todos sus usuarios tengan que descargar esencialmente todos los archivos JS modificados en su sitio la próxima vez que lo visiten (en lugar de quedarse con las versiones anteriores que probablemente todavía estén almacenadas en caché en sus navegadores)?
  • La decisión de actualizar siempre debe ser subjetiva. Menor o mayor, todavía tendrá que justificar cada vez si alguna actualización valdría la pena. Siempre lea las notas de la versión. ¿Corrige una seguridad vulnerabilidad o un error relacionado con problemas que usted o sus usuarios están experimentando actualmente? ¿Mejoraría significativamente el rendimiento de su proyecto (asegúrese de tener puntos de referencia para verificarlo más adelante)? ¿Simplifica en gran medida un patrón de codificación que ha estado utilizando, permitiendo que su código se escriba de manera más limpia y fácil? ¿Hay una biblioteca de terceros que desee utilizar que dependa de esta versión más reciente? ¿Hay bibliotecas de terceros que ya utiliza que dependen de la ¿versión anterior? (Si es así, ¿es probable que estas bibliotecas se actualicen pronto para funcionar con la versión más reciente?) ¿Está tan seguro en sus pruebas y procesos de control de calidad de que una actualización requerirá una cantidad razonable de recursos de desarrollo y no causará regresiones importantes? ¿Estabas pensando en cambiar eventualmente jQuery con algo más de todos modos? Sucesivamente.

Por supuesto, este es solo mi consejo. Hay algunos temas recurrentes en él, y espero que sean claros. En cualquier caso, espero que alguien encuentre esto útil!

 11
Author: Noyo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-25 12:00:06

Siempre estará desactualizado. Una vez que haya terminado de actualizar a la última versión, una más nueva saldrá unos meses más tarde.

A menos que esté dispuesto a poner horas/días/semanas de desarrollo, pruebas y corrección de errores, con la posibilidad de romper la funcionalidad orientada al usuario, no debería estar actualizando solo para usar la forma más reciente de declarar controladores de eventos. No te hará daño. Y normalmente esto es algo arriesgado. Esto se traduce en costos del equipo de desarrollo. Ya lo sabes. La refactorización, especialmente cuando no hay un riesgo evidente para el proyecto, es en general difícil de justificar ante los gerentes. Y usted debe comprobar dos veces sus pensamientos para estar seguro de si tener el nuevo jQuery en el código que ya está funcionando hará alguna diferencia.

Ahora, si está trabajando en la creación de nuevas páginas en un sitio existente, podría incluir una nueva versión en esas áreas. Pero, esto tendrá una consecuencia: asumamos que tú y tu equipo, aparte de desarrollar la nueva parte del sitio, también tienen que mantener la parte que está utilizando la antigua. Todo el mundo tendrá que ser consciente de la versión específica de jQuery que están escribiendo su código en contra.

Así que, para cerrar, diría algo como esto. A menos que haya un riesgo real justificable para que el proyecto se retrase o se bloquee técnicamente debido a una versión anterior de jQuery, se va a meter en problemas por romper algo que ya está funcionando y tendrá que poner horas adicionales solo para hacer todo funciona tan bien como funcionaba antes.

De todos modos, este enfoque no significa que pueda comenzar a separar las 'nuevas secciones' de las antiguas, y usar las bibliotecas más recientes en las nuevas áreas.

 12
Author: DanC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-11 03:31:18

Esto vale la pena investigar: https://github.com/jquery/jquery-migrate/#readme

Este plugin se puede utilizar para detectar y restaurar API o características que han sido obsoletos en jQuery y eliminados a partir de la versión 1.9. Ver el página de advertencias para obtener más información sobre los mensajes del plugin generar. Para más información sobre los cambios realizados en jQuery 1.9, consulte la guía de actualización y la publicación del blog .

 6
Author: ktm5124,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-12 09:32:43

Los chicos de Twitter han resuelto este problema bastante bien.

Http://github.com/twitter/bower

Hace lo que dice en el tin: es un administrador de paquetes para la web (y eso incluye mantener actualizados los archivos JS como jQuery)

 1
Author: Daniel Levin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-19 17:04:10

Para mantenerse actualizado en su árbol de desarrollo, recomiendo usar src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js" (la versión completa sin minificar que permite una depuración más fácil)

Luego, cuando vaya a publicar, simplemente reemplácelo con la versión minificada específica que se encuentra en el comentario del encabezado (actualmente http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js ) Esto tiene la ventaja de permitir un mejor almacenamiento en caché del lado del cliente y usar el ancho de banda de otra persona.

Si el almacenamiento en caché es menos preocupante además de asegurarse de que obtendrá automáticamente correcciones de errores para esa versión menor, puede usar solo la versión mayor y menor, como: http://ajax.googleapis.com/ajax/libs/jquery/1.9/jquery.min.js (Nota: Google aún no tiene la serie 1.9; sin embargo, la serie 1.8 es hasta 1.8.3) Ya que estos se actualizan periódicamente para las versiones de corrección de errores que no se almacenan en caché como las versiones específicas de la versión

 0
Author: technosaurus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-19 04:07:48

En esta era no podemos ser predecibles acerca de la estabilidad de cualquier versión de software. Pocos años antes de las versiones de software y servicios lanza después de un año o dos años. Pero en este momento las versiones de los servicios se están actualizando rápida y frecuentemente.

Por lo tanto, si está utilizando cualquier servicio con su servicio, debe usar Agile Development. Mediante este método de desarrollo puede realizar fácilmente cambios en los nuevos requisitos y cambiar los métodos requeridos de acuerdo con usted.

Y por favor no utilice métodos depreciados porque no son adecuados para versiones de servicio de larga duración. Y hacer bibliotecas de los servicios usados de biblioteca de su propia función de servicio que están utilizando otros servicios para que pueda cambiarlos fácilmente de acuerdo a su nueva versión.

Por ejemplo : al igual que tiene un nombre de método update_var();, está llamando a otro método de otro servicio como $a = newlib::check_update();. A continuación, mediante la creación de bibliotecas que tiene que cambiar la biblioteca principal de la función de su biblioteca y de la biblioteca central del servicio involucrado

 0
Author: keshu_vats,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-19 04:41:02