¿Alguna vez está molesto JavaScript?


9

Estaba pensando que si se requiere que todos los usuarios de un sitio web tengan habilitado JavaScript, ¿está bien usar JavaScript molesto?

Estoy a favor de la mejora progresiva, pero ¿cuál es el punto cuando una aplicación web avanzada despide a los usuarios en la puerta si tienen un navegador antiguo o JavaScript deshabilitado?

Tenemos un público objetivo muy reducido, y podemos decirle a nuestro público objetivo qué navegador y complementos / funcionalidades deben tener. Entonces mi pregunta es, ¿está bien mezclar JS y HTML en ese caso? Como usar atributos onclick.


1
"Si se requiere que todos los usuarios de un sitio web tengan habilitado JavaScript ... si lo han hecho ... ¿JavaScript deshabilitado?" <- Esto es una contradicción, y no estoy seguro de cómo dar una respuesta útil sin resolver.
HedgeMage

3
Tenga en cuenta que dependiendo de su público objetivo y mercado, puede haber leyes de accesibilidad que exijan que sus sitios web sean accesibles para todos los usuarios, incluidas las personas con discapacidad. Lo que eso significa en la práctica para JS no lo sé. AFAIK (IINAL) donde estoy tenemos tales leyes, pero aún no ha habido casos de prueba para resolver los detalles.
James

16
¿Qué quieres decir con javascript "molesto"? No estoy familiarizado con el término.
Macke

2
Entonces, su pregunta básicamente es: ¿Está bien escribir código malo? Sí, para prototipos y proyectos que son lo suficientemente pequeños y no requieren mantenimiento / actualizaciones una vez finalizados. De lo contrario, solo se palmeará la cara medio año después, porque le lleva una hora descubrir qué podría haber sido plausible si hubiera invertido unos segundos más cuando lo puso en su lugar.
back2dos

3
Pensé que esta pregunta iba a preguntar si había terminado bien cambiar el tamaño de la ventana del navegador de alguien o tener toneladas de ventanas emergentes.
cuál es

Respuestas:


17

Esta es una decisión comercial en lugar de una decisión de diseño.

Hay un costo por proporcionar una versión del sitio web que funcione sin JavaScript (o Flash, o Silverlight). El negocio tiene que decidir si la pérdida de ingresos / visitantes vale la pena o no.

Entonces, si cuesta $ 10,000 escribir esta versión (el número puede estar en el lado grande, pero está allí solo para este ejemplo), ¿recuperará la empresa ese desembolso durante la vida útil del sitio? Si no, entonces no proporcione esa versión.

Sin embargo, si solo cuesta $ 100 escribir esta versión, entonces tendría sentido proporcionar la degradación elegante.

Habiendo tomado la decisión comercial de apuntar solo a los navegadores habilitados para JavaScript y esperar que sus usuarios tengan habilitado JavaScript, entonces tiene mucho sentido hacer que su aplicación aproveche las funciones que ahora tiene disponibles. Lo único que tendrá que hacer es (como lo hace Stack Overflow en sí) colocar una advertencia de que el sitio no funcionará correctamente si el usuario no lo tiene habilitado.


2
Creo que me estás malentendiendo.
Petah

55
Debe decirnos amablemente que WTF "JS intrusivo" significa evitar el malentendido. ¡Ya te han pedido que lo hagas (votado 7 veces)!
maaartinus

1
En el pasado, he creado algunas páginas degradantes y he encontrado que el html y el javascript son mucho menos transparentes, si aún desea ofrecer a los visitantes habilitados con JS la mejor experiencia de usuario. Las páginas fueron MUCHO más difíciles de construir y creo que el tipo que mantiene la página tendrá algunas dificultades para seguir su código. Por lo tanto, hay que tener en cuenta un costo de mantenimiento a largo plazo al estimar el costo de hacer que su sitio se degrade con gracia. Me pareció muy tentador comprometer la experiencia de usuario habilitada para JS ...
Thomas Stock

1
@maaartinus, javascript intrusivo es lo opuesto a javascript discreto en.wikipedia.org/wiki/Unobtrusive_JavaScript
Petah

1
Bien, entonces solo puedo decir ... html + js es una plaga (implementaciones rotas que ignoran estándares extraños) y minimizaría el esfuerzo tal como escribió Thomas Stock. Intente hacer que funcione perfecto en el navegador elegido (y no elija IE6: D) ay sea soportable en otros. En lugar de solucionar todos los problemas, dedique su tiempo a la funcionalidad.
maaartinus

20

Algo que nadie más ha mencionado todavía ...

El 99% de los sitios web dan la bienvenida a un visitante en particular, uno con poco o nada de JavaScript. Ese visitante tiene un nombre: Googlebot .

Una gran razón por la que todos deberían preocuparse por los visitantes ciegos, también ...

Si eres uno de los pocos que no se preocupa en absoluto por el tráfico de los motores de búsqueda, bueno, esa es tu prerrogativa, pero ciertamente no es una regla general.


44
En efecto. Mejoramos uno de nuestros sitios para hacerlo más accesible para los ciegos y, como consecuencia (no intencional), el tráfico que recibimos de Google se multiplicó por casi un factor de 10 en un año.
Kris

1
Sí, pero el sitio web no es para el público. Por lo tanto, las clasificaciones de búsqueda no se aplican.
Petah

3
@Petah: ¿Ha considerado declarar clara y sucintamente cuáles son sus requisitos, situaciones y restricciones precisas en la pregunta en lugar de agregar pequeños fragmentos de información aquí y allá en los comentarios?
SOLO MI OPINIÓN correcta

1
Ya no tienes razón. Desde hace bastante tiempo, Googlebot ejecuta bien JavaScript (no es de extrañar, dado que Google funciona tanto en el motor V8 como en angularjs).
maaartinus

8

Las personas que escriben cosas para entornos internos específicos son una gran razón por la que IE6 todavía existe.

Piénsalo


4

Si está haciendo un sitio solo para JS (tal vez 'aplicación' en este caso es una palabra mejor), la llamada 'discreción' de JS no importa tanto como en el caso, cuando necesita degradarse con gracia a Versión JS.

Sin embargo: JavaScript escrito de una manera discreta es en general más fácil de escribir (y al menos lo encuentro así) y mantener. Es más fácil introducir cambios en el diseño HTML que no rompan JS, y cambia a JS sin preocuparse por romper HTML.


4

Si está construyendo un sitio web, mantendría JavaScript discreto. Sin embargo, si está creando algún tipo de aplicación (como Google Docs), JavaScript será bastante molesto.

JavaScript y HTML5 son excelentes para crear aplicaciones si esa es su necesidad, pero realmente es una opción comercial.


Sí, se parece más a los documentos de Google que a un sitio web. Y usamos HTML5 en gran medida.
Petah

Corríjame si me equivoco, pero creo que aún puede utilizar la mayoría de los conceptos en JavaScript discreto sin crear necesariamente un desorden en el código. Ese es el concepto que se destaca y hace más ruido para mí. ¿Quizás se refiera a otros aspectos de JavaScript discreto que debería evitar mediante el uso de HTML5, como la compatibilidad con versiones anteriores de usuarios que no utilizan JavaScript? Debe elegir qué es lo mejor para usted y el proyecto, siempre que pueda justificar inteligentemente las razones y analizar el riesgo, entonces creo que todo está bien :) +1
jmort253

De lo que estoy hablando es de cómo funcionará el sitio si Javascript está desactivado. Hay algunas ocasiones en que será completamente funcional (si no es tan agradable) y otras en las que fallará por completo. No me preocupan los navegadores antiguos que no admiten JavaScript (Netscape 1). Por supuesto, en cualquier caso, no hay razón para escribir JavaScript MALO
Zachary K

2

La mayoría de los usuarios (mis usuarios, no sé sobre sus usuarios) tienen JavaScript disponible y habilitado. Ofrezcamos a esos usuarios una excelente experiencia de usuario. Sin embargo, aún debe proporcionar una versión de su sitio que funcione sin Javascript. Sé que es complicado crear 2 versiones, pero así es como funciona el desarrollo web. (En realidad, es posible que deba crear varias versiones, una tercera podría ser una versión móvil de su sitio).

Lo que no desea hacer es diseñar para el denominador menos común: "Bueno, hay algunos usuarios que tienen Javascript deshabilitado, por lo que vamos a diseñar nuestro sitio para que funcione bien para ellos, sin Javascript, acceda al servidor para todo ". Esto solo penaliza a la mayoría de los usuarios que tienen Javascript.


Lo que digo es que ninguno de los usuarios tiene JavaScript deshabilitado. Si lo hacen, no pueden acceder al sitio.
Petah

@Petah, bueno, eso tampoco es genial. No desea hacer rebotar a los usuarios sin Javascript. Entonces, ¿qué es lo que estás preguntando? Ya que estoy expulsando a los usuarios sin Javascript, ¿puedo poner el JS en el mismo archivo con mi HTML?
Marcie

Tenemos un público objetivo muy reducido, y podemos decirle a nuestro público objetivo qué navegador y complementos / funcionalidades deben tener. Entonces, mi pregunta es si está mezclando JS y HTML bien en ese caso. Como usar atributos onclick.
Petah

44
@Petah, hay otras razones para evitar mezclar JS y HTML. Son las mismas razones por las que evitamos mezclar estilos y HTML: separación de preocupaciones. Si su estilo se mezcla con su estructura, que se mezcla con su comportamiento, tiene algo muy difícil de mantener. Después de hacerlo durante un tiempo de forma "discreta", verá lo elegantes que son sus archivos y lo fácil que es hacer cambios.
Marcie

2
@Petah, ¿tiene un enorme archivo JS para todo su sitio y todo va allí? Tengo aproximadamente un archivo JS por página, y eso me funciona bien. Las cosas verdaderamente "comunes" son todo lo que se incluye en el archivo JS compartido.
Marcie

2

Usted mencionó el uso de atributos onlick. ¿Está planeando usar un controlador de eventos de JavaScript para la navegación de la página?

Recomendaría contra esto por una sola razón: rompe el clic central .

Para hacer clic regularmente en el enlace, suponiendo que JavaScript esté habilitado, estos serán funcionalmente equivalentes:

<a href="#" onclick="window.location = 'myPage.htm';">Click here</a>
<a href="myPage.htm">Click here</a>

Si intenta hacer clic con el botón central en el primer ejemplo, obtendrá una página en blanco en lugar de myPage.htm.

Además de este ejemplo, creo que está bien usar JavaScript molesto si tiene sentido comercial para usted. Lleva menos tiempo escribir (pero no necesariamente mantener) JavaScript en línea, y la pérdida de la mejora progresiva puede no ser importante en su situación.


En este caso no es para la navegación, es para botones como 'Actualizar', 'Eliminar', 'Crear', etc.
Petah

En ese caso, sugeriría que es un estilo personal. Encuentro que el método intrusivo es más rápido / fácil de comenzar, pero la forma "correcta" de ser más limpio y más fácil de mantener. Definitivamente hay un factor de sensación difusa de hacer lo correcto.
GavinH

+1: es más fácil mantener el código limpio desde el principio si es discreto. Me parece que si me pongo demasiado desordenado al principio, puede ser demasiado difícil tratar de solucionar los problemas más adelante. Me siento abrumado Prefiero hacer el mejor trabajo posible para que cuando regrese, no sea tan malo refactorizar.
jmort253

2

El molesto JavaScript estaba bien hace 10 años. También está bien si eres un aficionado, o si estás construyendo un prototipo desechable, o si hay alguna circunstancia que lo requiera, como la dependencia del código heredado o el código impulsado por datos y simplemente costaría mucho demasiado para arreglar todo

Si está construyendo algo desde cero, siga los estándares, escriba un código bueno, limpio y fácil de mantener. Escribe algo de lo que estarás orgulloso y que no te enfermará dentro de un año cuando un pobre imbécil te pida ayuda porque no entienden un truco que hiciste. Escriba algo que garantice que sus diseñadores web puedan intercambiar fácilmente CSS sin tener que buscar en HTML y JavaScript desordenados.

Cree la aplicación para que tenga espacio para crecer, de modo que cualquier desarrollador pueda entrar y mantenerla. El tiempo invertido ahora ahorrará tiempo en el futuro, si no su tiempo, el de otra persona.

Asegúrese de que JavaScript se pueda reutilizar en otro contexto. Asegúrese de que un rediseño completo del sitio web puede ser solo eso, un rediseño y no una reconstrucción completa de algo que ya existe pero que no fue construido de manera dura.

Imagine lo vergonzoso que sería tener que pasar la misma cantidad de tiempo en un rediseño que en su construcción original.

Confíe en mí por experiencia, JavaScript discreto le impedirá cometer algunos errores costosos.


2

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.


1

Si conoce su entorno operativo objetivo, Javascript y frameworks como jQuery pueden ser una verdadera bendición. Por ejemplo, en un entorno empresarial donde el SOE tiene Javascript e IE8 que es más que seguro para escribir aplicaciones intensivas de navegador del lado del cliente.


1

Hacer que la degradación elegante sea más fácil es solo uno de los muchos factores que hacen que JavaScript sea una opción atractiva y, en mi opinión, no es la más importante.

Por experiencia personal, diría que si está hablando de un proyecto más grande, uno que probablemente evolucionará mucho con el tiempo, el uso de un estilo discreto hará que la aplicación sea MUCHO más fácil de mantener, depurar y refactorizar. Esta es la razón principal por la que siempre usamos un estilo discreto, incluso en sitios que exigen que JavaScript esté habilitado para todos los visitantes.


Haga un +1 a Shang por esta gema "Hacer que la degradación sea más fácil es solo uno de los muchos factores que hacen que JavaScript sea una opción atractiva y, en mi opinión, no es la más importante". La implementación de Javascript puede ser un arma de doble filo a veces, he encontrado personalmente
MattyD

1

En general, si está desarrollando un "sitio web" tradicional que está disponible de forma anónima, indexado por los motores de búsqueda, y donde los ingresos son generados por los anuncios, entonces debe proporcionar una degradación elegante. La idea es que este tipo de sitio vive y muere por la accesibilidad, por lo que limitar la accesibilidad significa perder toneladas de visitas a la página y, por lo tanto, ingresos por publicidad.

Un "sitio" (aplicación web) de acceso restringido, generalmente no indexable y no basado en ingresos publicitarios, puede ser mucho más flexible. Todo se reduce a una decisión entre la amplitud del soporte, la profundidad de las características y el costo de desarrollo. Piense en ello como desarrollar una aplicación tradicional: ¿qué plataforma admite y cuáles son las especificaciones mínimas? Si apunta a una sola plataforma y especificaciones limitadas, puede concentrarse en proporcionar un producto superior con menos costos de desarrollo y soporte, a costa de la pérdida de participación potencial en el mercado.

Ejemplo: Google Search es un sitio web. Google Docs es una aplicación web. La Búsqueda de Google es sencilla y puede funcionar de manera idéntica sin JavaScript, CSS y / o imágenes, etc., funciona en los navegadores en modo de texto tan bien como en los últimos navegadores GUI. Google Docs simplemente no funciona con JavaScript deshabilitado y ni siquiera se degrada con gracia, ni siquiera una advertencia para habilitar JavaScript.


1

Prefiero tener la mayoría del diseño y la navegación manejados en CSS. Sí, Lynx puede no ser compatible, pero todos los navegadores con todas las funciones que conozco no pueden desactivarlo. Entonces JavaScript se puede usar para cosas más llamativas pero no necesarias. También me gusta Ruby on Rails para este propósito. Puede hacer mucho de lo que JavaScript necesitaría para el lado del servidor siempre que no necesite actualizaciones dinámicas de la página.

Más orientado a la respuesta de la pregunta: NO ME GUSTA el JavaScript requerido, pero hay un caso de negocio en el que se requiere, como señaló ChrisF.


0

Javascript es el estándar de defecto cuando se trata de cualquier tipo de contenido dinámico entregado del lado del cliente, si no tienen JS, entonces probablemente no tendrán Silverlight.

Entonces tiene que pensar en su mercado / audiencia ¿son programadores.stackexchcange o bbc.co.uk/news? Audiencias muy diferentes.


0

Como puede mirar por la web y ver "JavaScript molesto" en muchos sitios, su pregunta básica es respondida, sí, está bien, y muchos sitios populares lo hacen, incluso Google.

Sin embargo, lo más importante es la degradación elegante de la funcionalidad, aunque insista en que sus usuarios deben tener Javascript habilitado, debe proporcionar un nivel de experiencia decente para los usuarios que no son js, o nunca regresarán voluntariamente.


Nunca se les permitirá pasar la primera página en primer lugar.
Petah
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.