Muy bien, solo llámame el encargado de la cripta en todo el necro que hago, pero nunca he sentido que el verdadero valor de esto se haya entendido correctamente. Históricamente, se ha afirmado que "JavaScript discreto" o, mantener su JS fuera del HTML a través de atributos de controlador de eventos HTML en línea y etiquetas de script que no se vinculan a un archivo tanto como sea posible es un gran elemento clave de:
- Problemas de accesibilidad
- SEO
- Y mejora progresiva
¡MENTIRAS! (bueno, ahora lo estarían)
La verdad del asunto es que usted podría hacer JavaScript técnicamente molesto y aún sacar los tres elementos anteriores. A menos que estuvieras creando contenido HTML dinámicamente, lo cual fue un gran no-no de SEO en el día.
Pero pare y piense ... ¡en USTED!
Realmente, el gran beneficio, la victoria más importante y menos vendida de mantener la separación siempre ha sido el beneficio directo que el desarrollador obtiene de ella. Puede tener tantos controladores de eventos como desee en el mismo elemento html para el mismo evento que sea conveniente. Eso significa que si una etiqueta con class="some_class"
siempre obtiene un cierto comportamiento pero también obtiene un comportamiento adicional cuando está dentro de un id="bonus_behavior"
div, no tenemos que comenzar a jugar con la lógica dentro de nuestro controlador de eventos permitido para ramificarse para eso. Simplemente podemos agregar o no agregar controladores dependiendo del contexto.
Fácil de leer también
Otro beneficio es la legibilidad. Esta fue una preocupación más crítica cuando las herramientas del navegador consistían en un mensaje de error exclusivo de IE que le decía que había algo mal [object]
pero IMO, todavía es un gran problema. CSS aquí, JS allá y HTML es el lugar donde se encuentran tanto ellos como el servidor. Con todas esas cosas reunidas en un solo lugar, tiene sentido confiar en los ganchos (los ID, las clases y la jerarquía) para crear una capa de abstracción que todo usa para conectarse al HTML.
En mi opinión, cuanto más pueda mantener su HTML, CSS y JS separados, más fácil será no solo leer sino también modificar y comprender lo que está sucediendo. Veo un div vacío con "dynamic_combo_box" como clase y tengo una buena idea de que algo está haciendo una selección elegante que carga datos dinámicamente. Tengo una idea de cómo encontrar eso en JS y CSS y si me encuentro con la clase en esas preocupaciones, tendré una buena idea de qué se trata y cómo encontrarlo en el HTML.
Demasiado fácil de hacer aún más descuidado
Y, por supuesto, la legibilidad tiende a ir de la mano con la mantenibilidad. Cuando simplemente hace las cosas directamente volcando todo en las etiquetas de script donde se encuentra el HTML relevante, la mayoría de las veces es más fácil para las personas simplemente cortar y pegar ese script en el HTML de otra página en la que están trabajando cuando quieren una funcionalidad similar, lo que significa que ahora tiene una cosa que probablemente se convertirá en dos cosas molestamente similares pero no 100% parecidas cuyo comportamiento puede volverse problemático con el tiempo al desafiar las expectativas y requerir la adición de más ramificaciones sin sentido para manejar las excepciones que uno necesita. otro no lo hizo.
Por lo tanto, el comportamiento de manipulación de esos enlaces HTML fomenta la reutilización del código de una manera inteligente. Si necesita ramificar el comportamiento para una implementación alternativa, simplemente vaya a la misma función y maneje allí con la jerarquía HTML o tal vez un att de datos que desencadene algún comportamiento alternativo. Es una parada para cualquiera que quiera entender cómo funcionan los elementos de la interfaz de usuario de un cierto tipo y esos tipos de corte y pegado despreciablemente perezosos harán lo correcto / más fácil de mantener solo porque es lo más fácil de hacer. hazlo ahora y esa es la mejor manera de hacer posible el mantenimiento. Conviértalo en lo más fácil "duh", incluso para alguien a quien no podría importarle menos si se debe al pánico o la apatía.
¿Pero qué hay de 2014?
Puede ser un punto legítimo que en las aplicaciones modernas de una sola página, algunas de estas cosas más rigurosas tal vez no deberían ser tan dogmáticas como lo han sido, pero créanme cuando digo que no creo que sea el único que se vendió porque finalmente facilita el trabajo. Soy flojo de una manera (espero) mayormente buena. Me gusta cuando solo tengo que cambiar las cosas en un lugar para obtener cambios en toda una aplicación, cuando solo tengo que mirar en un lugar para descubrir cuál es el error, y cuando me resulta fácil entender qué diablos es pasando y cómo reutilizar mejor ese código para hacer algo muy similar.
Es bueno como dividir una base de datos o una capa de datos es bueno. En última instancia, es un ahorro de tiempo por el que no hice eso, como tomar los cinco minutos para lavar la ropa la noche anterior, en lugar de pasar 10 minutos febrilizando sus bóxers y realizando controles de olores paranoicos a la mañana siguiente.
Para mí, son esas motivaciones egoístas las que siempre han sido el punto principal de por qué me aferro no solo a la discreta JS, sino a la separación de las preocupaciones de estilo / comportamiento / contenido tanto como sea posible, incluso cuando WHAT-freaking-WG hace todo lo posible para confundir esas preocupaciones de maneras comprensiblemente asombrosas y geniales / prácticas.
Ahora que todo el mundo está haciendo SPA y es casi tonto tratar de convencer a las empresas de que deberíamos preocuparnos por las personas que se ejecutan sin JS (la accesibilidad ahora se puede, supuestamente, manejar con contenido generado por JS), parece que la próxima generación de desarrolladores de JS se preocupa menos sobre esto, pero en mi opinión, todavía hay una victoria allí y es principalmente para usted, el desarrollador que escribe y mantiene estas cosas. Y realmente, esa victoria siempre debería haber sido el punto más subrayado, pero nunca lo ha sido por alguna razón, ya que finalmente lo beneficia a usted y también al producto por un feliz accidente en virtud de ser más fácil de modificar / modificar / depurar.
¿Alguna vez está bien?
Pues sí, supongo. En una aplicación desechable para un concurso o algo así. Pero todavía lo haría solo porque tengo la costumbre y no es realmente más difícil de hacer.