{"id":2353,"date":"2017-07-22T11:02:37","date_gmt":"2017-07-22T16:02:37","guid":{"rendered":"https:\/\/www.puchunguis.com\/blog\/?p=2353"},"modified":"2017-07-22T11:02:37","modified_gmt":"2017-07-22T16:02:37","slug":"como-acelerar-tus-plataformas-web","status":"publish","type":"post","link":"https:\/\/www.jorgealdana.pro\/blog\/general\/como-acelerar-tus-plataformas-web\/","title":{"rendered":"\u00bfC\u00f3mo acelerar tus plataformas web?"},"content":{"rendered":"<p>Cuando desarrollamos plataformas no siempre pensamos en la velocidad y casi siempre es muy tarde para reprogramar todo de la manera correcta, por ello te doy algunos consejos de infraestructura la mayor\u00eda que pueden apoyarte y se basan enteramente en mi experiencia:<\/p>\n<h2>Cambiar a Nginx<\/h2>\n<p>Nginx es un servidor web que puede ser utilizado tambi\u00e9n como proxy de alto rendimiento, es de software libre y de c\u00f3digo abierto, licenciado bajo la Licencia BSD simplificada; tambi\u00e9n existe una versi\u00f3n comercial distribuida bajo el nombre de nginx plus.<\/p>\n<p>Nginx es multiplataforma, por lo que corre en sistemas tipo Unix (GNU\/Linux, BSD, Solaris, Mac OS X, etc.) y Windows.<\/p>\n<p>Es una alternativa al servidor Apache y la raz\u00f3n principal de su popularidad es muy obvia, es un servidor muy r\u00e1pido, el cual puede soportar alto tr\u00e1fico, puede utilizar PHP en modalidad PHP-FPM (FastCGI Process Manager).<\/p>\n<p>Algo que tienes que considerar es que si decides hacer uso de Nginx, es que si actualmente usas Apache, la sintaxis de los .htaccess cambian \u00a0por lo que tendr\u00e1s que modificarlo y cambiar la sintaxis para que tu sitio\/sistema web funcionen correctamente.<\/p>\n<p>Una manera o truco para los que les sea muy complicado realizar esto, o no desean arriesgarse, es utilizar\u00a0Nginx como reverse proxy, siendo intermediario entre el servidor (que puede ser apache, IIS etc..) y el usuario, de tal forma que nginx cachear\u00e1 todo el contenido y la respuesta ser\u00e1 m\u00e1s r\u00e1pida, de esta manera no tendr\u00e1s que alterar tu servidor actual.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-2355 size-large\" src=\"https:\/\/484c2a6d15c399b70beb-b1e2a15a3df201703b71bb9b31acda05.ssl.cf5.rackcdn.com\/2017\/07\/reverseproxy-1024x217.png\" alt=\"\" width=\"940\" height=\"199\" \/><\/p>\n<p><a href=\"https:\/\/www.nginx.com\" target=\"_blank\" rel=\"noopener\">https:\/\/www.nginx.com<\/a><\/p>\n<hr \/>\n<h2>Utilizar memcached o Redis<\/h2>\n<p>Implementa un motor de base de datos basado en memoria, puede ser memcached, Redis o mongo. La memoria RAM es mucho m\u00e1s r\u00e1pida en lectura-escritura que la ROM.<\/p>\n<p>Yo utilizo memcached y me ha funcionado bastante bien, pero \u00bfqu\u00e9 puedes almacenar en memoria? absolutamente todo, strings, objetos, arreglos.<\/p>\n<p>En mi caso suelo almacenar la informaci\u00f3n de los resultados de consultas a mis base de datos que suelen ser repetitivas, como cat\u00e1logos b\u00fasquedas entre otros, de tal manera que la pr\u00f3xima ves que se ejecute la misma consulta, solo tengo que recurrir a los datos cacheados en memcached y as\u00ed no consumir\u00e9 recursos en conectarmerme a la bdd y ejecutar la consulta.<\/p>\n<p>La instalaci\u00f3n es sumamente sencilla y PHP cuenta con una extensi\u00f3n el cual puedes instalar con PECL con el cual podr\u00e1s hacer uso de las funciones y m\u00e9todos de manera nativa.<\/p>\n<p>En caso que no puedas realizar la instalaci\u00f3n de la extensi\u00f3n hay liber\u00edas que puedes utlizar como \u00abMemcached Client\u00bb:<br \/>\nhttps:\/\/github.com\/fwolf\/memcached-client<\/p>\n<p>Su uso es tan sencillo como:<\/p>\n<pre>&lt;?php\r\n\/\/Conecta\r\n$m\u00a0=\u00a0new\u00a0Memcached();\r\n$m-&gt;addServer('localhost',\u00a011211);\r\n\/\/Almacena\r\n$m-&gt;set('identificador',\u00a0'una\u00a0cadena\u00a0sencilla');\r\n\/\/Obtiene\r\necho\u00a0$m-&gt;get('identificador');\r\n?&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p>MySQL recomienda su uso y hay documentaci\u00f3n oficial al respecto, de como usar MemCached + (PHP,C,C++,Perl, Phyton, Ruby y JAVA) + MySQL:<br \/>\n<a href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.6\/en\/ha-memcached-interfaces.html\" target=\"_blank\" rel=\"noopener\">https:\/\/dev.mysql.com\/doc\/refman\/5.6\/en\/ha-memcached-interfaces.html<\/a><\/p>\n<hr \/>\n<h2>Utilizar un CDN<\/h2>\n<p>Utiliza un CDN (content delivery network) para tus recursos est\u00e1ticos. \u00bfQu\u00e9 es un CDN? un CDN es una red de entrega de contenidos en el cual cualquier archivo que almacenes en un contenedor, ser\u00e1 replicado en los diversos PoP (puntos de presencia) a escala mundial, de tal manera que cuando un usuario ingrese a tu sitio o sistema y su navegador invoque por ejemplo a: \u00abtemplate.css\u00bb, el CDN determinar\u00e1 cual PoP es el m\u00e1s cercano al usuario para responder la petici\u00f3n desde ah\u00ed, esto minimiza el tiempo de respuesta y ahorra recursos de procesamiento a tu servidor.<\/p>\n<p>Las ventajas son simples: mayor velocidad de respuesta, ahorro de recursos de procesamiento, memoria y ancho de banda.<\/p>\n<p>Existen muchos CDN la gran mayor\u00eda son de paga y cobran por el ancho de banda que transfieran, en lo personal yo uso CloudFiles de Rackspace y lo utilizo por ejemplo para este blog, en el cual se almaceno las im\u00e1genes:<\/p>\n<p>Ejemplo:<br \/>\n<a href=\"https:\/\/484c2a6d15c399b70beb-b1e2a15a3df201703b71bb9b31acda05.ssl.cf5.rackcdn.com\/2017\/07\/reverseproxy-1024x217.png\" target=\"_blank\" rel=\"noopener\">https:\/\/484c2a6d15c399b70beb-b1e2a15a3df201703b71bb9b31acda05.ssl.cf5.rackcdn.com\/2017\/07\/reverseproxy-1024&#215;217.png<\/a><\/p>\n<p>Cloudfiles de Rackspace tiene soporte de Alias CNAME, por tanto la URL anterior puede ser invocada de la siguiente manera:<\/p>\n<p><a href=\"http:\/\/cdn.puchunguis.com\/2017\/07\/reverseproxy-1024x217.png\" target=\"_blank\" rel=\"noopener\">http:\/\/cdn.puchunguis.com\/2017\/07\/reverseproxy-1024&#215;217.png<\/a><\/p>\n<p>Yo te recomiendo cachear todo tipo de contenidos est\u00e1ticos, como: archivos css, js, im\u00e1genes y fuentes.<\/p>\n<p>Existen muchas alternativas, como Microsoft Azure File Storage, Amazon S3, Akamai y muchos m\u00e1s, tendr\u00e1s que evaluar cual es el que m\u00e1s te conviene.<\/p>\n<p>Si deseas una alternativa gratuita puedes usar CloudFlare, al instalarlo autom\u00e1ticamente implementa la funci\u00f3n CDN en tu sitio, pero no tendr\u00e1s control de \u00e9ste, ya que CloudFlare decidir\u00e1 que cachea y que no.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-2364 size-full\" src=\"https:\/\/484c2a6d15c399b70beb-b1e2a15a3df201703b71bb9b31acda05.ssl.cf5.rackcdn.com\/2017\/07\/load-time-animation.gif\" alt=\"\" width=\"720\" height=\"432\" \/><\/p>\n<hr \/>\n<h2>Utiliza AMP<\/h2>\n<p>Antes ten\u00edamos WML, luego salieron las p\u00e1ginas responsivas, pero ahora tenemos a AMP.<\/p>\n<p>El proyecto AMP es muy simple, es una iniciativa de c\u00f3digo abierto que busca mejorar el rendimiento de las p\u00e1ginas haciendo que los sitios web y anuncios sean consistentemente r\u00e1pidos y de alto rendimiento en dispositivos y plataformas de distribuci\u00f3n m\u00f3vil.<\/p>\n<p>Funciona controlando la renderizaci\u00f3n de los elementos bajo demanda, quit\u00e1ndole al navegador el control, de tal forma que los elementos web los cargar\u00e1 cuando el usuario los necesite, de esta manera la carga es mucho mas r\u00e1pida.<\/p>\n<p>Por lo que te sugiero realizar una versi\u00f3n m\u00f3vil especial para tu sitio en versi\u00f3n AMP, siempre y cuando esto sea viable, ya que este framework tiene algunas limitantes entre ellas el uso avanzado de javascript.<\/p>\n<p><a href=\"https:\/\/www.ampproject.org\/es\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.ampproject.org\/es\/<\/a><\/p>\n<hr \/>\n<h2>Comprime el contenido de los recursos est\u00e1ticos<\/h2>\n<p>El tama\u00f1o si importa, digan lo que digan. Mientras m\u00e1s grande sea un archivo m\u00e1s tiempo le tomar\u00e1 a tu servidor procesarlo y transferirlo, por tanto es vital que tus recursos sean lo m\u00e1s ligeros posibles, entonces \u00bfqu\u00e9 podemos hacer para aligerarlos?<\/p>\n<ul>\n<li>Comprime las im\u00e1genes: Comprime todas las im\u00e1genes de tu sitio esto reducir\u00e1 el peso de tu web hasta en un 50%, hay herramientas como RIOT (Radical Image Optimization Tool) que te pueden ayudar hacer esto.<\/li>\n<li>Comprime el contenido HTML, CSS y JS: El c\u00f3digo fuente contiene strings que generalmente olvidamos, como: saltos de p\u00e1gina o espacios de m\u00e1s, \u00e9stas cadenas que no forman parte de la funcionalidad y solo ocupan espacio, por tanto mientras m\u00e1s peque\u00f1o sea el c\u00f3digo fuente m\u00e1s r\u00e1pido podr\u00e1 ser transferido.<br \/>\nExisten herramientas que puedes usar como: <a href=\"https:\/\/github.com\/mrclay\/minify\/\" target=\"_blank\" rel=\"noopener\">Minify<\/a>, <a href=\"https:\/\/jscompress.com\/\" target=\"_blank\" rel=\"noopener\">JS Compress<\/a>, <a href=\"https:\/\/htmlcompressor.com\/compressor\/\" target=\"_blank\" rel=\"noopener\">HTML Compressor<\/a> y <a href=\"https:\/\/htmlcompressor.com\/compressor\/\" target=\"_blank\" rel=\"noopener\">CSS Compressor<\/a>.<br \/>\n<img decoding=\"async\" class=\"aligncenter wp-image-2372 size-full\" src=\"https:\/\/484c2a6d15c399b70beb-b1e2a15a3df201703b71bb9b31acda05.ssl.cf5.rackcdn.com\/2017\/07\/minify.png\" alt=\"\" width=\"916\" height=\"577\" \/><\/li>\n<\/ul>\n<hr \/>\n<h2>Comprime la transferencia con Gzip<\/h2>\n<p>Habilita la compresi\u00f3n GZIP. Esta opci\u00f3n se realiza en la configuraci\u00f3n del servidor Apache, IIS&#8230;etc, existe la forma de realizarlo directamente por c\u00f3digo fuente, sin embargo no te recomiendo esto ya que el consumo de procesador aumentar\u00e1 un poco.<\/p>\n<p>La compresi\u00f3n por GZIP genera un mejor desempe\u00f1o en la carga de las p\u00e1ginas, ya que consiste en comprimir todo el contenido que servidor transfiere para que este ocupe mucho menos espacio y por tanto se transfiera por la Red de forma m\u00e1s r\u00e1pida, el navegador del cliente identifica por medio de una cabecera que el contenido que est\u00e1 recibiendo se encuentra comprimido (Content-Encoding:gzip) y autom\u00e1ticamente lo descomprime.<\/p>\n<p>Para el usuario es totalmente transparente.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2376 size-large\" src=\"https:\/\/484c2a6d15c399b70beb-b1e2a15a3df201703b71bb9b31acda05.ssl.cf5.rackcdn.com\/2017\/07\/gzip-1024x493.png\" alt=\"\" width=\"940\" height=\"453\" \/><\/p>\n<hr \/>\n<h2>Habilita HTTP2 \u00f3 SPDY<\/h2>\n<p>Instala, configura y habilita HTTP2, SPDY era una buena opci\u00f3n pero actualmente se encuentra obsoleto.<\/p>\n<p>Con HTTP\/1.1 (actualmente) Cuando visitas esta p\u00e1gina o sistema web, tu navegador realiza muchas peticiones a diversos recursos, como : im\u00e1genes, css y archivos js entre otros; cada recurso genera un socket de conexi\u00f3n entre tu navegador y el servidor web, por el cual se transfiere la informaci\u00f3n.<\/p>\n<p>Con HTTP2 se cambia este esquema, de tal forma que con una sola conexi\u00f3n se pueda transferir m\u00e1s de un solo recurso, aumentando la velocidad de respuesta y ahorrando procesamiento y ancho de banda.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2379 size-full\" src=\"https:\/\/484c2a6d15c399b70beb-b1e2a15a3df201703b71bb9b31acda05.ssl.cf5.rackcdn.com\/2017\/07\/http2.png\" alt=\"\" width=\"948\" height=\"461\" \/><\/p>\n<p>La configuraci\u00f3n no es tan sencilla pero las ventajas son muchas y puedes reducir el\u00a0TTFB hasta en un 50%, para cada servidor se hace de forma distinta por lo que no hay una \u00abgu\u00eda estandar\u00bb pero podr\u00e1s hacer tus pruebas con la herramienta: <a href=\"https:\/\/tools.keycdn.com\/http2-test\" target=\"_blank\" rel=\"noopener\">https:\/\/tools.keycdn.com\/http2-test<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2381 size-full\" src=\"https:\/\/484c2a6d15c399b70beb-b1e2a15a3df201703b71bb9b31acda05.ssl.cf5.rackcdn.com\/2017\/07\/http2support.png\" alt=\"\" width=\"740\" height=\"456\" \/><\/p>\n<hr \/>\n<h2>Aumenta la cache expiration de los headers<\/h2>\n<p>Cuando nuestro navegador visita una p\u00e1gina o sistema web, descarga el c\u00f3digo fuente as\u00ed como los recursos.<\/p>\n<p>Cada recurso se \u00abcachea\u00bb de tal manera que al navegar dentro del sitio, no se vuelven a descargar los que ya se han descargado con anterioridad, ahorrando ancho de banda, procesador y memoria. El navegador se vale de un header para determinar cuando sincronizar o descargar de nuevo los recursos, este header es Expires ejemplo:<\/p>\n<p><strong>Expires: Wed, 11 Jan 2017 05:00:00 GMT<\/strong><\/p>\n<p>Este header indica la fecha (en formato de tiemp RFC 1123) en la cual expirar\u00e1 el recurso y deber\u00e1 sincronizarse de nuevo.<\/p>\n<p>Una forma de hacerlo de forma sencilla es con un .htaccess por ejemplo:<\/p>\n<pre>&lt;IfModule mod_expires.c&gt;\r\nExpiresActive on\r\n\r\n# Perhaps better to whitelist expires rules? Perhaps.\r\nExpiresDefault \"access plus 1 month\"\r\n\r\n# Data\r\nExpiresByType text\/xml \"access plus 0 seconds\"\r\nExpiresByType application\/xml \"access plus 0 seconds\"\r\nExpiresByType application\/json \"access plus 0 seconds\"\r\n\r\n# Favicon (cannot be renamed)\r\nExpiresByType image\/x-icon \"access plus 1 week\"\r\n\r\n# Media: images, video, audio\r\nExpiresByType image\/gif \"access plus 1 month\"\r\nExpiresByType image\/png \"access plus 1 month\"\r\nExpiresByType image\/jpeg \"access plus 1 month\"\r\nExpiresByType video\/ogg \"access plus 1 month\"\r\nExpiresByType audio\/ogg \"access plus 1 month\"\r\nExpiresByType video\/mp4 \"access plus 1 month\"\r\nExpiresByType video\/webm \"access plus 1 month\"\r\n\r\n# Webfonts\r\nExpiresByType application\/x-font-ttf \"access plus 1 month\"\r\nExpiresByType font\/opentype \"access plus 1 month\"\r\nExpiresByType application\/x-font-woff \"access plus 1 month\"\r\nExpiresByType image\/svg+xml \"access plus 1 month\"\r\nExpiresByType application\/vnd.ms-fontobject \"access plus 1 month\"\r\n\r\n# CSS and JavaScript\r\nExpiresByType text\/css \"access plus 1 year\"\r\nExpiresByType application\/javascript \"access plus 1 year\"\r\n\r\n&lt;\/IfModule&gt;\r\n<\/pre>\n<hr \/>\n<h2>Modifica la configuraci\u00f3n de MySQL<\/h2>\n<p>MySQL tiene par\u00e1metros de configuraci\u00f3n que a veces ignoramos, ya que dejamos la configuraci\u00f3n que trae por default. Algunos de estos par\u00e1metros dependen de las caracter\u00edsticas f\u00edsicas y la versi\u00f3n de MySQL que tengas, pero te comparto algunas de ellas:<\/p>\n<p>Habilita los hilos:<\/p>\n<ul>\n<li>thread_concurrency = 8<\/li>\n<li>thread_cache_size<\/li>\n<\/ul>\n<p>Se sugiere que el n\u00famero de hilos sea el doble de CPU&#8217;s que tengas disponible.<\/p>\n<p>Modifica el tama\u00f1o de los buffers:<\/p>\n<ul>\n<li>key_buffer_size<\/li>\n<li>sort_buffer_size<\/li>\n<li>read_buffer_size<\/li>\n<li>read_rnd_buffer_size<\/li>\n<li>myisam_sort_buffer_size<\/li>\n<\/ul>\n<p>Habilita el cache de MySQL:<\/p>\n<ul>\n<li>query_cache_type<\/li>\n<li>query_cache_size<\/li>\n<li>table_open_cache<\/li>\n<\/ul>\n<p>Manejo de sesiones y conexiones:<\/p>\n<ul>\n<li>max_connections<\/li>\n<li>interactive_timeout<\/li>\n<li>wait_timeout<\/li>\n<li>connect_timeout<\/li>\n<\/ul>\n<p>Estos par\u00e1metros son los que considero de gran val\u00eda y te ayudar\u00e1n a incrementar el rendimiendo de MySQL, sin embargo existen otros, la documentaci\u00f3n oficial de MySQL tiene mucha ayuda al respecto y podr\u00e1s consultarla aqu\u00ed:\u00a0<a href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.6\/en\/performance-schema.html\" target=\"_blank\" rel=\"noopener\">https:\/\/dev.mysql.com\/doc\/refman\/5.6\/en\/performance-schema.html<\/a><\/p>\n<hr \/>\n<h2>Cambiar gesti\u00f3n de sesiones de PHP<\/h2>\n<p>La memoria es m\u00e1s r\u00e1pida para acceder a la informaci\u00f3n que almacena en comparaci\u00f3n que un disco duro. Por default si usas PHP, este maneja las sesiones generando archivos en el disco duro, el folder casi siempre es la carpeta tmp, a reserva que hayas modificado el valor session.save_path.<\/p>\n<p>Por cada sesi\u00f3n generar\u00e1 un archivo y si tu servidor es de alto tr\u00e1fico, estos podr\u00edan ser varios cientos de miles, llegando a un punto donde el servidor se alentar\u00e1 naturalmente.<\/p>\n<p>Existe una manera de acelerar la gesti\u00f3n de sesiones por medio de Memcached, en la cual ya no se escribir\u00e1n m\u00e1s archivos de sesi\u00f3n y en cambio se guardar\u00e1n directamente en memoria.<\/p>\n<p>Basta con instalar el servidor memcached, la extensi\u00f3n para PHP por medio de PECL y posteriormente editar el PHP ini de la siguiente manera:<\/p>\n<p>Ubica el valor session.save_handler y rempl\u00e1zalo con:<\/p>\n<p>session.save_handler = memcached<br \/>\nsession.save_path = \u00ablocalhost:11211\u00bb<\/p>\n<p>Posteriormente reinicia tu servidor web y con esto las sesiones se gestionar\u00e1n a trav\u00e9s de Memcached.<\/p>\n<hr \/>\n<h2>Utiliza Sprites para las im\u00e1genes<\/h2>\n<p>Imagina que vas a la tienda a comprar 10 art\u00edculos. \u00bfQu\u00e9 ser\u00eda m\u00e1s tardado? poner los 10 art\u00edculos en 10 carritos distintos y pagar uno por uno cada art\u00edculo de manera independiente \u00f3 naturalmente poner los 10 art\u00edculos en un solo carrito y pagarlos todos en una sola compra.<\/p>\n<p>Pues es exactamente lo mismo para los servidores, es m\u00e1s tardado bajar 10 im\u00e1genes (por ejemplo iconos) de manera independiente, que bajar una sola imagen que incluya todos los iconos.<\/p>\n<p>Ya que al bajar una imagen se dispara todo el ciclo de vida del servidor, por ejemplo en apache <strong>para cada request<\/strong> que se sirve, se tiene que pasar por esto:<\/p>\n<ul>\n<li>Generaci\u00f3n de Request<\/li>\n<li>Lectura POST-GET<\/li>\n<li>Traducci\u00f3n de la URI<\/li>\n<li>Parseo de los headers<\/li>\n<li>Control de Acceso<\/li>\n<li>Verificaci\u00f3n de autenticaci\u00f3n<\/li>\n<li>Autorizaci\u00f3n<\/li>\n<li>Verificaci\u00f3n de MIME type<\/li>\n<li>Creaci\u00f3n de Fixups<\/li>\n<li>Respuesta<\/li>\n<li>Limpieza<\/li>\n<\/ul>\n<p>Todo esto utilizando Logging y sin contar el propio ciclo de vida de PHP y la plataforma que aloja.<\/p>\n<p>Es por esto que mientras menos request realice nuestra plataforma es mejor, para esto se utiliza un truco se CSS llamado sprites, con el cual se integran un conjunto de im\u00e1genes en una sola y se imprimen por medio de CSS estableciendo sus dimensiones, por ejemplo:<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2391\" src=\"https:\/\/484c2a6d15c399b70beb-b1e2a15a3df201703b71bb9b31acda05.ssl.cf5.rackcdn.com\/2017\/07\/sprite.png\" alt=\"\" width=\"210\" height=\"58\" \/>Iconos en Sprite<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2392\" src=\"https:\/\/484c2a6d15c399b70beb-b1e2a15a3df201703b71bb9b31acda05.ssl.cf5.rackcdn.com\/2017\/07\/sprites-300x155.png\" alt=\"\" width=\"300\" height=\"155\" \/>Al mostrarlas por css solo mostraremos el adecuado.<\/p>\n<p>En internet encontrar\u00e1s muchos ejemplos al respecto.<\/p>\n<p>Con esto llegamos al fin de mis consejos, espero te sirvan de ayuda y se mejore la velocidad de tus plataformas web.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cuando desarrollamos plataformas no siempre pensamos en la velocidad y casi siempre es muy tarde para reprogramar todo de la manera correcta, por ello te doy algunos consejos de infraestructura la mayor\u00eda que pueden apoyarte y se basan enteramente en mi experiencia: Cambiar a Nginx Nginx es un servidor web que puede ser utilizado tambi\u00e9n como proxy de alto rendimiento, es de software libre y de c\u00f3digo abierto, licenciado bajo la Licencia BSD simplificada; tambi\u00e9n existe una versi\u00f3n comercial distribuida bajo el nombre de nginx plus.<\/p>\n","protected":false},"author":1,"featured_media":2390,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"image","meta":{"footnotes":""},"categories":[26,2937],"tags":[],"class_list":["post-2353","post","type-post","status-publish","format-image","has-post-thumbnail","hentry","category-general","category-servidores","post_format-post-format-image","has_thumb"],"_links":{"self":[{"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/posts\/2353","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/comments?post=2353"}],"version-history":[{"count":33,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/posts\/2353\/revisions"}],"predecessor-version":[{"id":2395,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/posts\/2353\/revisions\/2395"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/media\/2390"}],"wp:attachment":[{"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/media?parent=2353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/categories?post=2353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/tags?post=2353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}