JASoft.org

Funciones reguladoras en JavaScript: cómo limitar el número de veces que se puede llamar a una función cada segundo (throttling y debouncing)

Funciones reguladoras en JavaScript: cómo limitar el número de veces que se puede llamar a una función cada segundo (throttling y debouncing)
En muchas ocasiones tenemos la necesidad de ejecutar en una aplicación la misma función JavaScript muchas veces seguidas, incluso sin pretenderlo. Por ejemplo un evento costoso que repinta un canvas a medida que redimensionamos la pantalla o que hace llamadas AJAX cuando un usuario teclea en un cuadro de texto. Pueden provocar muchas llamadas innecesarias y sería muy útil poder limitar el número máximo de veces que permitimos hacer una llamada a ciertas funciones. Para conseguirlo puedes crear un método regulador. Es lo que vamos a ver en este artículo. [Más]

Minimizar y ofuscar JavaScript desde el menú contextual del Explorador de Windows

Minimizar y ofuscar JavaScript desde el menú contextual del Explorador de Windows
En este artículo vemos la manera de poder utilizar Uglify-JS para poder minimizar y también ofuscar el código fuente JavaScript, tanto desde la línea de comandos, como de manera mucho más cómoda usando un menú contextual desde el explorador de archivos de Windows, solo cuando lo pulses con la tecla de mayúsculas apretada, para que no moleste en el día a día. Además de explicar cómo montarlo "a mano", también se entrega un archivo para incorporar esta opción automáticamente. [Más]

La dificultad para entender las variables con referencias a objetos

La dificultad para entender las variables con referencias a objetos
Por lo que veo en las dudas de mis cursos y atendiendo consultas de la comunidad, a muchos programadores inexpertos les cuesta de entrada ver la diferencia entre paso por referencia y valor de parámetros de funciones, pero también la diferencia entre una variable, un valor y una referencia a un objeto. Esto suele pasar tanto en JavaScript como en otros lenguajes. Veamos un caso típico que genera dudas... Si consideramos este código:function modificaObjeto(obj2){ obj2.nombre = "Objeto"; obj2.valor = 5; } var obj = { nombre: "Pepe", valor: 0 }; modificaObjeto(obj); Lo que hacemos es pasar un objeto a la función, y a través del parámetro de ésta modificamos el objeto en si. Si ahora mostramos ese objeto en la consola veremos que se han modificado sus propiedades, como era de esperar, y que el nombre es "Objeto" y el valor es 5. Es decir, hemos modificado sus valores originales porque hemos cambiado el objeto en sí al que apunta la variable, pero no a donde apunt... [Más]

Midiendo el rendimiento de nuestro código JavaScript de manera sencilla desde la consola

Midiendo el rendimiento de nuestro código JavaScript de manera sencilla desde la consola
Hace unas semanas os contaba un truco poco conocido pero muy útil para mostrar datos de modo tabular por la consola durante una sesión de depuración con JavaScript. Hoy traigo un par de trucos más del mismo estilo que estoy seguro de que no son demasiado conocidos tampoco.Cronometrar códigoUna necesidad habitual es medir el tiempo transcurrido al ejecutar determinado código, por ejemplo para tratar de ver cuál de dos estrategias diferentes de código es la más rápida con un número grande de datos o cosas por el estilo.Una forma habitual de hacerlo es guardar la fecha y hora actuales en una variable antes y después de la ejecución, y luego mostrar por consola la diferencia en milisegundos entre ambas. Sin embargo existe una forma mucho mejor que es utilizar los métodos console.time() y console.timeEnd().Estos métodos de la consola toman como parámetro el nombre de un contador, de modo que además podemos utilizar más de uno al mismo tiempo, midiendo incluso tiempos en paralelo si fuera ne... [Más]

JavaScript: ¿qué diferencia hay entre funciones anónimas y con nombre?

JavaScript: ¿qué diferencia hay entre funciones anónimas y con nombre?
En JavaScript tenemos básicamente dos formas de definir funciones. La primera y más tradicional es usando la palabra clave function y otorgándole un nombre a la función. Por ejemplo: function miFunc() { ..... //Código de la función } A esto se le llama declaración de funciones.Otro modo muy habitual es, simplemente, asignar una función anónima a una variable para trabajar con ella, algo así: var miFunc = function() { .... //Código de la función } A esto se le llama expresión funcional o asignación de funciones. De hecho es posible, aunque no frecuente, hacer una combinación de ambos estilos:var miFunc = function miFuncion(){ .... //Código de la función }Lo que constituiría una asignación de función con nombre.Todos estos casos son equivalentes, pero solo en apariencia. En todos ellos podemos llamar a la función escribiendo: miFunc(); y aparentemente todo parece funcionar del mismo modo. Sin embargo ¿existe alguna diferencia entre declarar una funció... [Más]

Uso selectivo de dependencias en módulos con RequireJS

Uso selectivo de dependencias en módulos con RequireJS
La configuración de RequireJS ofrece muchas posibilidades para hacer gran cantidad de cosas útiles. La semana pasada, por ejemplo, os contaba cómo forzar la descarga de todos los scripts/módulos de una página inhabilitando la caché gracias a un parámetro añadido automáticamente a todas las peticiones.En esta ocasión me voy a fijar en otro parámetro interesante llamado map. La función de este parámetro es "mapear" ciertos módulos de manera especial cuando sean dependencias de otros módulos.Por ejemplo, imagínate que tienes que usar dos versiones del mismo módulo (digamos jQuery), pero quieres usar una en particular para un determinado módulo que depende de ella, y la otra para otro módulo diferente.Supongamos que tenemos una estructura de archivos como esta:- modulo1.js - modulo2.js - libs/ - jquery1.11.2.js - jquery2.1.3.js Es decir, dos módulos en la raíz de la carpeta de scripts, y una subcarpeta "libs" con las dos versiones de jQuery. Imaginemos ahora que el módulo núme... [Más]

Forzar siempre la descarga (sin caché) cuando usas RequireJS en aplicaciones JavaScript

Forzar siempre la descarga (sin caché) cuando usas RequireJS en aplicaciones JavaScript
Imagina la siguiente situación, bastante común por otro lado: Estás desarrollando una aplicación JavaScript (generalmente de tipo Single Page Application), y utilizas la biblioteca require.js para realizar la modularización de la misma en lado cliente. Vas tocando tu código JavaScript y probándolo y depurándolo en diferentes navegadores. Eso implica lanzarlos con bastante frecuencia, albergando tu aplicación en un servidor web local para probar la aplicación. El problema surge porque el servidor web hace caché de los archivos estáticos (como son los .js) por lo que cada vez que cambias algo en un script, aunque refresques la página, no siempre vienen los cambios que has realizado. Esto puede conducir a grandes frustraciones porque a veces cambias un carácter o una línea, crees que estás probando esa última versión, pero en realidad estás trabajando toda... [Más]

Error al descargar archivos JSON con IIS Express

Error al descargar archivos JSON con IIS Express
Visual Studio es una herramienta sensacional para hacer desarrollo web, y más actualmente gracias a la disponibilidad de la Visual Studio Community Edition, que permite instalar cuantos plug-ins y extensiones queramos, entre ellos Web Essentials. El caso es que para desarrollar con Visual Studio utilizamos normalmente Internet Information Server Express (IIS Express), que es el núcleo de IIS a nuestra disposición para lanzarlo bajo demanda y servir nuestras webs y aplicaciones. El problema con IIS es que trae una determinada configuración por defecto que, aunque es válida para la mayor parte de los casos, no nos sirve siempre y hay que aprender a ajustarla. Uno de estos casos, muy habitual, es no tener configurado un determinado tipo MIME. Básicamente un tipo MIME define la manera de transmitir un archivo mediante el protocolo HTTP, de modo que en el otro extremo (el navegador) sepa qué tipo de información le viene y c&oacut... [Más]

Este soy yo y este es mi blog técnico, dedicado al software y a la programación.

¡Sígueme en Twitter!

Mis otros blogs

- JM Alarcón @ campusMVP.es
Contenido técnico en español orientado a desarrolladores
- JMAlarcon.es
Blog personal no técnico: sociedad, innovación, empresa...

Krasis

- campusMVP.es:
Los mejores cursos online de programación en español

- SELF LMS:
La plataforma de elearning más potente del mercado.

Histórico