{"id":263013,"date":"2022-12-31T09:03:00","date_gmt":"2022-12-31T06:03:00","guid":{"rendered":"https:\/\/inform.click\/hacer-que-los-sitios-web-receptivos-funcionen\/"},"modified":"2022-12-31T09:03:00","modified_gmt":"2022-12-31T06:03:00","slug":"hacer-que-los-sitios-web-receptivos-funcionen","status":"publish","type":"post","link":"https:\/\/inform.click\/es\/hacer-que-los-sitios-web-receptivos-funcionen\/","title":{"rendered":"Hacer que los sitios web receptivos funcionen"},"content":{"rendered":"<p>\n  Hubo un tiempo en el que pod\u00edas diferenciar con confianza entre una p\u00e1gina web de escritorio y una p\u00e1gina web m\u00f3vil. Tanto es as\u00ed, de hecho, que toda una industria creci\u00f3 en torno a la reutilizaci\u00f3n de sitios de escritorio para dispositivos m\u00f3viles.\n<\/p>\n<p>\n  Por un tiempo, no eras nadie si no ten\u00edas un sitio m\u00f3vil separado en un dominio separado. Entonces las cosas empezaron a cambiar.\n<\/p>\n<p>\n  Las pantallas m\u00f3viles mejoraron m\u00e1s all\u00e1 de todo reconocimiento. Tambi\u00e9n lo hicieron los navegadores m\u00f3viles. Las tabletas arrojaron otro elemento a la ecuaci\u00f3n. Lleg\u00f3 el 4G. Las pantallas Retina ofrecieron nuevos niveles de claridad para los usuarios finales.\n<\/p>\n<p>\n  De repente, la l\u00ednea entre el escritorio y el m\u00f3vil se ve\u00eda borrosa.\n<\/p>\n<p>\n  Al mismo tiempo, hubo una creciente diversidad en el tama\u00f1o y la resoluci\u00f3n de las pantallas de escritorio.\n<\/p>\n<p>\n  Y un dolor de cabeza creciente para los dise\u00f1adores web.\n<\/p>\n<p>\n  Atr\u00e1s quedaron los d\u00edas en los que solo ten\u00eda que atender a un pu\u00f1ado de tama\u00f1os de ventana gr\u00e1fica. Las cosas se estaban complicando.\n<\/p>\n<p>\n  Afortunadamente, la ayuda estaba disponible en forma de consultas de los medios y el concepto de dise\u00f1o receptivo.\n<\/p>\n<p>\n  Gracias a las consultas de medios, fue posible variar los estilos y el dise\u00f1o, incluso el contenido, seg\u00fan el ancho de la ventana gr\u00e1fica y la resoluci\u00f3n de la pantalla del usuario. Por supuesto, las consultas de medios no son de ninguna manera la \u00fanica herramienta en la bolsa de trucos del dise\u00f1ador receptivo, pero es justo decir que forman la base de la t\u00e9cnica.\n<\/p>\n<p>\n  Esta fue una gran noticia para los dispositivos m\u00f3viles. El dise\u00f1o receptivo significaba que pod\u00eda entregar de manera efectiva diferentes versiones del mismo sitio a diferentes dispositivos. Todo sin desarrollar un sitio m\u00f3vil separado en un dominio diferente.\n<\/p>\n<h4>\n  \u00bfQu\u00e9 pasa con el rendimiento?<br \/>\n<\/h4>\n<p>\n  Los propietarios de sitios comienzan a darse cuenta de que los usuarios finales se preocupan por el rendimiento. Los minoristas en particular est\u00e1n comenzando a apreciar que reducir milisegundos de tiempo de carga puede traducirse en millones en el balance general.\n<\/p>\n<p>\n  Afortunadamente, los sitios receptivos ofrecen un claro beneficio de rendimiento sobre sus primos m\u00f3viles dedicados: se elimina la redirecci\u00f3n a un dominio m\u00f3vil.\n<\/p>\n<p>\n  Sin embargo, a pesar de esto, el dise\u00f1o receptivo ha logrado adquirir cierta reputaci\u00f3n por su bajo rendimiento.\n<\/p>\n<p>\n  En cierto modo, esto es bastante injusto, pero vale la pena considerar los desaf\u00edos adicionales de rendimiento que el dise\u00f1o receptivo genera en los desprevenidos&#8230;\n<\/p>\n<h5>\n  Im\u00e1genes<br \/>\n<\/h5>\n<p>\n  Los archivos de imagen son grandes. Y debido a que son grandes, a menudo son los culpables de los tiempos de carga lentos. Por lo tanto, son un buen punto de partida para cualquiera que intente optimizar el rendimiento de un sitio.\n<\/p>\n<p>\n  Desafortunadamente, una de las primeras soluciones para entregar im\u00e1genes de manera receptiva no fue excelente para el rendimiento.\n<\/p>\n<p>\n  La t\u00e9cnica es maravillosamente simple. Simplemente use max-width: 100% para asegurarse de que las im\u00e1genes se escalen al ancho del elemento que las contiene:\n<\/p>\n<pre><code>img\n{\nmax-width: 100%;\n}<\/code><\/pre>\n<p>\n  A medida que el contenedor se encoge para adaptarse a ventanas de visualizaci\u00f3n m\u00e1s peque\u00f1as, cualquier imagen del interior se encoger\u00e1 con \u00e9l. \u00a1F\u00e1cil!\n<\/p>\n<p>\n  Pero hay un problema. El tama\u00f1o de la imagen puede reducirse en la pantalla, pero el tama\u00f1o del archivo sigue siendo el mismo. Esto est\u00e1 lejos de ser ideal desde el punto de vista del rendimiento. Podr\u00eda estar enviando una imagen de 800 x 800 p\u00edxeles por el cable, solo para que se muestre a 80 x 80 p\u00edxeles: en otras palabras, podr\u00eda estar transmitiendo cientos (o miles) de bytes innecesarios. No solo la imagen tardar\u00e1 mucho en cargarse, sino que todos esos bytes redundantes podr\u00edan estar agotando la valiosa asignaci\u00f3n de datos del usuario final.\n<\/p>\n<p>\n  Sin embargo, esta no es la \u00fanica, ni siquiera la mejor, forma de ofrecer im\u00e1genes receptivas. Por un lado, una imagen que funciona a 800 p\u00edxeles de ancho no necesariamente funcionar\u00e1 tan bien en varias fracciones de ese tama\u00f1o.\n<\/p>\n<p>\n  Para lidiar con esto, puede usar una consulta de medios para mostrar diferentes versiones de la imagen dependiendo del tama\u00f1o de la ventana gr\u00e1fica usando una consulta de medios y mostrar: ninguno.\n<\/p>\n<p>\n  <strong>CSS:<\/strong>\n<\/p>\n<pre><code>@media (min-width: 601px) {\n#croppedImage\n{\ndisplay:none;\n}\n}\n@media (max-width: 600px) {\n#largeImage\n{\ndisplay:none;\n}\n}<\/code><\/pre>\n<p>\n  <strong>HTML:<\/strong>\n<\/p>\n<pre><code>&lt;img id=\"largeImage\" width=\"400\" height=\"400\" alt=\"\" src=\"images\/largeImage.webp\" \/&gt;\n&lt;img id=\"croppedImage\" width=\"200\" height=\"200\" alt=\"\" src=\"images\/croppedImage.webp\" \/&gt;<\/code><\/pre>\n<p>\n  Esto le permite mostrar diferentes versiones de una imagen, en lugar de solo la misma imagen en diferentes tama\u00f1os. Sin embargo, no reduce el n\u00famero de bytes. De hecho, el tama\u00f1o total de la p\u00e1gina ser\u00e1 mayor, ya que se cargar\u00e1n todas las im\u00e1genes, se muestren o no.\n<\/p>\n<p>\n  Una mejor alternativa, si es pr\u00e1ctica, es usar im\u00e1genes de fondo en lugar de <code>&lt;img src=\"https:\/\/inform.click\/wp-content\/uploads\/2024\/11\/inform.click\" \/&gt;<\/code>elementos. Esto es preferible porque las im\u00e1genes a las que se hace referencia en CSS se cargan solo si se usan (siempre que no sean URI de datos):\n<\/p>\n<pre><code>@media (min-width: 601px) {\n#largeImage\n{\nwidth:400px;\nheight:400px;\nbackground-image:url(\/images\/largeImage.webp);\n}\n#croppedImage\n{\ndisplay:none;\n}\n}\n \n@media (max-width: 600px) {\n#croppedImage\n{\nwidth:200px;\nheight:200px;\nbackground-image:url(\/images\/croppedImage.webp);\n}\n#largeImage\n{\ndisplay:none;\n}\n}<\/code><\/pre>\n<p>\n  Esto funciona bien: los visitantes descargan solo las im\u00e1genes que necesitan, cuando las necesitan. El problema es que es desordenado y trata efectivamente el contenido como estilo. Como tal, potencialmente crea un problema de mantenimiento y tambi\u00e9n podr\u00eda resultar en que los motores de b\u00fasqueda ignoren im\u00e1genes importantes.\n<\/p>\n<p>\n  En su lugar, \u00bfpor qu\u00e9 no usar SVG (gr\u00e1ficos vectoriales escalables): un formato de imagen que escala por su propia naturaleza? Las im\u00e1genes SVG tambi\u00e9n tienen la ventaja de que se pueden dise\u00f1ar f\u00e1cilmente con CSS (consulte <a href=\"http:\/\/tympanus.net\/codrops\/2014\/08\/19\/making-svgs-responsive-with-css\/\" target=\"_blank\" rel=\"noopener\">este excelente tutorial<\/a> sobre c\u00f3mo hacer que los SVG respondan con CSS). Esto es perfecto para \u00edconos y logotipos, pero desafortunadamente, no podr\u00e1 usar SVG para fotos; para esto, tendr\u00e1 que recurrir a formatos rasterizados, como JPEG.\n<\/p>\n<p>\n  Otra opci\u00f3n es usar una de varias soluciones de JavaScript para entregar im\u00e1genes receptivas. Esta es una forma popular de hacerlo, pero agrega otra capa de complejidad. Adem\u00e1s, dado que JavaScript bloquea la construcci\u00f3n de DOM, cualquier soluci\u00f3n que involucre JavaScript tiene el potencial de retrasar el procesamiento. Entonces, si bien existen algunos complementos muy inteligentes, con solo introducir JavaScript en la ecuaci\u00f3n, hasta cierto punto, se est\u00e1 resignando al menor de los dos males.\n<\/p>\n<p>\n  Hasta hace poco, estas eran las \u00fanicas opciones.\n<\/p>\n<p>\n  Ahora, sin embargo, los elementos y <code>&lt;source \/&gt;<\/code>, y los atributos srcset y tama\u00f1os, finalmente est\u00e1n trayendo im\u00e1genes realmente receptivas a la web. La nueva especificaci\u00f3n tambi\u00e9n est\u00e1 comenzando a ganar soporte para navegadores, con soporte completo en Chrome y Opera, y soporte para cambio de resoluci\u00f3n en Safari. Hasta que otros navegadores se pongan al d\u00eda, hay un excelente <a href=\"https:\/\/scottjehl.github.io\/picturefill\/\" target=\"_blank\" rel=\"noopener\">polyfill<\/a> de JavaScript .\n<\/p>\n<p>\n  En este nuevo y valiente mundo, puede usar srcset para establecer una lista de im\u00e1genes candidatas para que el navegador elija. Luego puede usar una consulta de medios en el atributo de tama\u00f1os para dictar el tama\u00f1o en el que se mostrar\u00e1 la imagen. Usando el elemento junto con las consultas de medios dentro de uno o m\u00e1s elementos, puede especificar un rango diferente de im\u00e1genes para diferentes condiciones (por ejemplo, para ventanas gr\u00e1ficas de hasta un cierto ancho, use la imagen a, b o c, y para ventanas gr\u00e1ficas m\u00e1s grandes use la imagen x, y o z). Esto es \u00fatil si necesita entregar una versi\u00f3n recortada de una imagen para usuarios con pantallas peque\u00f1as.\n<\/p>\n<p>\n  El detalle preciso de c\u00f3mo usar la nueva sintaxis est\u00e1 fuera del alcance de este art\u00edculo, pero puede encontrar un excelente tutorial en <a href=\"http:\/\/alistapart.com\/article\/responsive-images-in-practice\" target=\"_blank\" rel=\"noopener\">alistapart<\/a>.\n<\/p>\n<p>\n  Quiz\u00e1s la \u00fanica desventaja de esta nueva especificaci\u00f3n es que es bastante larga, lo que podr\u00eda significar HTML inflado en p\u00e1ginas con muchas im\u00e1genes. Sin embargo, los beneficios superan con creces los inconvenientes.\n<\/p>\n<h5>\n  Cargando CSS que no necesita (necesariamente)<br \/>\n<\/h5>\n<p>\n  Aunque las consultas de medios le permiten aplicar diferentes reglas de CSS seg\u00fan los criterios que haya establecido, no se puede evitar el hecho de que los usuarios finales tendr\u00e1n que descargar todo el CSS que pueda aplicarse. Esto es cierto incluso si coloca su CSS en archivos separados y coloca su consulta de medios en el\n<\/p>\n<link \/>elemento.\n<p>\n  Por ejemplo, se cargar\u00e1n las dos hojas de estilo siguientes, independientemente del ancho de la ventana gr\u00e1fica:\n<\/p>\n<link rel=\"stylesheet\" media=\"(max-width: 600px)\" href=\"css\/style1.css\" \/>\n<pre>\n<\/pre>\n<link rel=\"stylesheet\" media=\"(min-width: 601px)\" href=\"css\/style2.css\" \/>\n<p>\n  <code>Esto no es un error del navegador. Los criterios utilizados en las consultas de medios a menudo se relacionan con cosas que cambian durante una visita a una p\u00e1gina. Por ejemplo, un visitante puede decidir cambiar el tama\u00f1o de la ventana del navegador o rotar su tableta\/dispositivo m\u00f3vil. El cambio resultante en la visualizaci\u00f3n deber\u00eda ser perfecto, y enviar una solicitud de otro archivo CSS estar\u00eda lejos de ser ideal. Esto es especialmente cierto para los dispositivos m\u00f3viles, que buscan cerrar los enlaces de radio lo antes posible para conservar la energ\u00eda de la bater\u00eda. Potencialmente, tener que restablecer ese enlace cuando cambia el tama\u00f1o de la ventana gr\u00e1fica podr\u00eda ser una mala noticia para la duraci\u00f3n de la bater\u00eda.<\/code>\n<\/p>\n<p>\n  <code>Sin embargo, Chrome se esfuerza por tratar estos diferentes archivos de forma inteligente. Si bien se descargar\u00e1n todos los archivos, solo el que tenga la consulta de medios coincidente actualmente bloquear\u00e1 la representaci\u00f3n. Cualquier otro se cargar\u00e1 con menor prioridad.<\/code>\n<\/p>\n<p>\n  <code>Desafortunadamente, otros navegadores no son tan \u00fatiles. En Firefox, por ejemplo, los archivos CSS no utilizados no solo bloquean la representaci\u00f3n, sino que tambi\u00e9n bloquean la carga de otros objetos en la p\u00e1gina.<\/code>\n<\/p>\n<p>\n  <code>El siguiente gr\u00e1fico de cascada ilustra el punto. Las im\u00e1genes de esta p\u00e1gina no comienzan a cargarse hasta que el archivo CSS no utilizado se haya descargado por completo:<\/code>\n<\/p>\n<p>\n  <code>Puede evitar esto usando JavaScript para cargar CSS condicionalmente pero, como ya hemos visto, JavaScript tiene sus propios costos de rendimiento.<\/code>\n<\/p>\n<h5>\n  <code>\u00bfQu\u00e9 significa todo esto para el rendimiento de un sitio receptivo frente a un sitio m\u00f3vil?<\/code><br \/>\n<\/h5>\n<p>\n  <code>Bueno, los usuarios de dispositivos m\u00f3viles y de escritorio en un sitio receptivo tendr\u00e1n que descargar el mismo CSS.<\/code>\n<\/p>\n<p>\n  <code>Y habr\u00e1 m\u00e1s de lo que habr\u00eda en un sitio dise\u00f1ado solo para computadoras de escritorio o dispositivos m\u00f3viles.<\/code>\n<\/p>\n<p>\n  <code>Adem\u00e1s, es m\u00e1s probable que un sitio m\u00f3vil dedicado use una versi\u00f3n m\u00e1s ligera y simplificada del CSS de escritorio (aunque esto quiz\u00e1s sea menos cierto ahora, ya que los usuarios esperan una experiencia m\u00e1s rica en pantallas m\u00f3viles cada vez m\u00e1s sofisticadas).<\/code>\n<\/p>\n<p>\n  <code>Entonces, en igualdad de condiciones, parece que hay algo en el argumento de que es probable que un sitio responsivo sea m\u00e1s lento que un sitio m\u00f3vil debido al CSS adicional requerido. Sin embargo, siempre que los dise\u00f1adores sean conscientes de los peligros potenciales, deber\u00edan poder crear hojas de estilo de carga r\u00e1pida para un sitio receptivo. En particular, es una buena idea:<\/code>\n<\/p>\n<ul>\n<li>\n    <code>evite usar URI de datos para im\u00e1genes: las im\u00e1genes de fondo binarias (normalmente) se cargar\u00e1n solo si son necesarias, pero todos los URI de datos se cargar\u00e1n independientemente.<\/code>\n  <\/li>\n<li>\n    <code>mant\u00e9ngalo liviano: dado que todo el CSS debe descargarse, es importante ser eficiente. Esto significa evitar la duplicaci\u00f3n y asegurarse de que las reglas globales se establezcan fuera del CSS basado en consultas de medios.<\/code>\n  <\/li>\n<\/ul>\n<h5>\n  <code>RESS (Dise\u00f1o web receptivo + Componentes del lado del servidor)<\/code><br \/>\n<\/h5>\n<p>\n  <code>RESS es un h\u00edbrido entre dise\u00f1o receptivo y adaptativo, lo que implica que el agente de usuario olfatee el servidor para ver las caracter\u00edsticas del dispositivo del cliente y entregar contenido apropiado para \u00e9l.<\/code>\n<\/p>\n<p>\n  <code>Si una de las objeciones al dise\u00f1o receptivo es que implica entregar todo el contenido a todos los dispositivos, \u00bfpor qu\u00e9 no mitigar esto eliminando parte de ese contenido donde pueda?<\/code>\n<\/p>\n<p>\n  <code>Esto puede tener mucho sentido. Si hay una imagen que sabe que nunca querr\u00e1 mostrar en dispositivos cuya pantalla est\u00e1 por debajo de cierto tama\u00f1o, es mejor que no la env\u00ede a esos dispositivos, ahorrando ancho de banda y reduciendo el tiempo de carga.<\/code>\n<\/p>\n<p>\n  <code>Adem\u00e1s, si est\u00e1 utilizando consultas de medios que sabe que no se pueden satisfacer en ciertos dispositivos, existe al menos un argumento para separar su CSS en diferentes archivos y cargarlos condicionalmente.<\/code>\n<\/p>\n<p>\n  <code>Vale la pena tener en cuenta que todo este proceso no es 'gratis' en t\u00e9rminos de rendimiento. Obviamente, se debe realizar algo de trabajo en el servidor, lo que lleva tiempo, probablemente no lo suficiente como para compensar los beneficios, pero es algo a tener en cuenta.<\/code>\n<\/p>\n<h5>\n  <code>El veredicto<\/code><br \/>\n<\/h5>\n<p>\n  <code>\u00bfLos sitios responsivos son lentos?<\/code>\n<\/p>\n<p>\n  <code>Depende de lo que entiendas por lento.<\/code>\n<\/p>\n<p>\n  <code>\u00bfEs probable que el sitio de respuesta m\u00e1s r\u00e1pida que pueda crear sea m\u00e1s lento que el sitio m\u00f3vil dedicado m\u00e1s r\u00e1pido que pueda crear?<\/code>\n<\/p>\n<p>\n  <code>Probablemente.<\/code>\n<\/p>\n<p>\n  <code>Tambi\u00e9n hemos visto que hay algunas trampas. Si no tiene cuidado, es f\u00e1cil terminar obligando a los usuarios a descargar muchas im\u00e1genes redundantes y CSS, lo que hace que su sitio receptivo sea mucho m\u00e1s lento de lo que debe ser.<\/code>\n<\/p>\n<p>\n  <code>Sin embargo, no tiene por qu\u00e9 ser as\u00ed. Es perfectamente posible crear un sitio receptivo que sea tan r\u00e1pido como debe ser y brinde una excelente experiencia de usuario. Y a medida que tanto los est\u00e1ndares como los navegadores comiencen a ponerse al d\u00eda con lo que los desarrolladores quieren ofrecer, deber\u00eda comenzar a ser m\u00e1s f\u00e1cil.<\/code>\n<\/p>\n<p>\n  <code>&lt;\/p&gt;\n&lt;p&gt;<\/code>\n<\/p>\n<div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\n  <code>Fuente de grabaci\u00f3n: &lt;a target=\"_blank\" rel=\"noopener nofollow\" data-pssr=\"\" href=\"http:\/\/www.instantshift.com\/2015\/09\/07\/making-responsive-websites-perform\/\"&gt;instantshift.com&lt;\/a&gt;<\/code>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Hubo un tiempo en el que pod\u00edas diferenciar con confianza entre una p\u00e1gina web de escritorio y una p\u00e1gina web m\u00f3vil. Tanto es as\u00ed, de hecho, que toda una industria creci\u00f3 en torno a la reutilizaci\u00f3n de sitios de escritorio para dispositivos m\u00f3viles. Por un tiempo, no eras nadie si no ten\u00edas un sitio m\u00f3vil separado en un dominio separado. Entonces las cosas empezaron a cambiar. Las pantallas m\u00f3viles mejoraron m\u00e1s all\u00e1 de todo reconocimiento. Tambi\u00e9n lo hicieron los navegadores m\u00f3viles. Las tabletas arrojaron otro elemento a la ecuaci\u00f3n. Lleg\u00f3 el 4G. Las pantallas Retina ofrecieron nuevos niveles de claridad para los usuarios finales. De repente, la l\u00ednea entre el escritorio y el m\u00f3vil se ve\u00eda borrosa. \u2026<\/p>\n","protected":false},"author":1,"featured_media":222114,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[203,60],"tags":[],"class_list":["post-263013","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-diseno-web","category-web-y-wordpress"],"_links":{"self":[{"href":"https:\/\/inform.click\/es\/wp-json\/wp\/v2\/posts\/263013","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/inform.click\/es\/wp-json\/wp\/v2\/comments?post=263013"}],"version-history":[{"count":0,"href":"https:\/\/inform.click\/es\/wp-json\/wp\/v2\/posts\/263013\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/inform.click\/es\/wp-json\/wp\/v2\/media\/222114"}],"wp:attachment":[{"href":"https:\/\/inform.click\/es\/wp-json\/wp\/v2\/media?parent=263013"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/inform.click\/es\/wp-json\/wp\/v2\/categories?post=263013"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/inform.click\/es\/wp-json\/wp\/v2\/tags?post=263013"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}