¿Cuál es la ruta de aprendizaje para los principiantes en PHP?
La primera etapa: ¿etapa básica (programador PHP básico)?
Enfoque: ¿volverse competente en LNMP (el núcleo son las operaciones básicas de instalación y configuración)? Objetivo: poder completar el sistema LNMP básico Instalación, configuración y mantenimiento simples; capaz de realizar desarrollo PHP básico de sistemas simples; capaz de soportar el desarrollo de un determinado módulo de funciones PHP en un sistema PHP de tamaño mediano. ?
Tiempo: El tiempo para completar esta etapa varía de persona a persona. Algunas crecen más rápido que medio año y otras crecen lentamente en dos o tres años. ?
Linux ?
Comandos básicos, operaciones, inicio, configuración básica de servicios (incluidos archivos de instalación rpm, varias configuraciones de servicios, etc.); puede escribir scripts de shell simples y awk/sed; Comandos de script, etc. ?
Nginx ?
Poder instalar y configurar nginx + php, conocer las opciones de configuración básicas del núcleo de nginx y conocer configuraciones básicas como server/fastcgi_pass/access_log. poder usar nginx+ php_fpm funciona sin problemas. ?
MySQL ?
Poder construir mysql usted mismo y conocer las opciones básicas de configuración de mysql; conocer la diferencia entre innodb y myisam, y conocer las diferentes opciones de configuración para InnoDB y Motores MyISAM; conocer las diferencias básicas entre los dos motores y las diferencias en la selección anterior; poder compilar y construir una base de datos MySQL puramente a mano y configurar la codificación para que se ejecute de manera normal y estable; una base de datos MySQL ejecutable. ?
PHP ?
Sintaxis básica para matrices, cadenas, bases de datos, XML, Socket, procesamiento de imágenes GD/ImageMgk, etc. familiarizado con varias API vinculadas a operaciones MySQL (mysql/ mysqli/PDO), saber cómo resolver varios problemas de codificación; conocer los marcos PHP de uso común (ThinkPHP, Zendframework, Yii, Yaf, etc.); comprender el mecanismo operativo básico de MVC y por qué se hace, y conocer un poco sobre el diferencias entre diferentes frameworks PHP La diferencia es poder aprender rápidamente un framework MVC. Ser capaz de comprender la organización del directorio de archivos en el proyecto de desarrollo, tener una buena estructura y estilo de código básico y poder completar el desarrollo de sistemas pequeños y el desarrollo de un determinado módulo en un sistema mediano.
¿Front-end?
Si el tiempo lo permite, puede aprender HTML/CSS/JS y otros conocimientos relacionados, saber qué estándares web y el modo de página web/wap de div+ css, conozca la diferencia entre HTML5 y HTML4; comprenda algunos marcos front-end y JS básicos (jQuery y similares); comprenda algunos conocimientos básicos de programación de JavaScript (este elemento no es necesario. Si tiene tiempo, está bien aprenderlo); un poco sobre ello, pero no es necesario como enfoque a menos que haya un fuerte interés personal). ?
¿Diseño del sistema?
Ser capaz de completar el diseño básico de sistemas pequeños, incluido el diseño simple de bases de datos, y poder completar lo básico: navegador -> Nginx+PHP -> diseño de arquitectura de base de datos Trabajo de desarrollo capaz de soportar el desarrollo y mantenimiento de sitios web con cientos de miles a millones de tráfico cada día;
Segunda etapa: etapa de mejora (programadores PHP intermedios)?
Enfoque: mejora Para las habilidades de LNMP, puede tener una aplicación más completa y competente de LNMP. ?Objetivo: ser capaz de configurar un entorno LNMP en cualquier momento y en cualquier lugar y completar rápidamente las configuraciones de rutina; ser capaz de rastrear y resolver la mayoría de los problemas de desarrollo y entornos en línea encontrados; ser capaz de realizar de forma independiente el trabajo de arquitectura y desarrollo de sistemas de tamaño mediano; ; ser capaz de realizar determinadas tareas en sistemas grandes Desarrollo de módulos de tamaño mediano.
?
1. Linux ?
Sobre la base de la primera etapa, puedo usar scripts de Shell sin problemas para completar muchas tareas automatizadas; awk/sed/perl también funciona bien. completar una gran cantidad de procesamiento de texto y estadísticas de datos; básicamente es capaz de instalar la mayoría de los programas de Linux no especiales (incluidas varias bibliotecas, paquetes, dependencias de terceros, etc., como MongoDB/Redis/Sphinx/Luncene/SVN, etc.) Comprender los servicios básicos de Linux, saber cómo ver los datos del indicador de rendimiento de Linux y conocer el seguimiento de problemas básicos en Linux, etc. ?
2. Nginx ?
Basado en la primera etapa, comprenda la configuración más compleja de Nginx, incluida la configuración de múltiples núcleos, eventos, proxy_pass, configuración sendfile/tcp_* y tiempo de espera. y otras configuraciones relacionadas e impactos en el rendimiento, sepa que además del servidor web, nginx también puede realizar configuraciones de servidor proxy, servidor estático inverso y saber cómo configurar permisos y compilar una extensión de nginx para nginx; Principios operativos básicos de nginx (mecanismo maestro/trabajador, epoll), conocimiento de por qué el rendimiento de nginx es mejor que el rendimiento de apache, etc. ?
3. MySQL/MongoDB ?
Basado en la primera etapa, domine muchos consejos en el desarrollo de MySQL, incluida la optimización SQL regular (agrupar por/ordenar por/optimización rand, etc. ); además de poder compilar MySQL, también puede realizar copias de seguridad en frío y en caliente de los datos de MySQL. También conoce las opciones de configuración que afectan el rendimiento de innodb/myisam (como key_buffer/query_cache/sort_buffer/innodb_buffer_pool_size/innodb_flush_log_at_trx_commit, etc. ), y también sabe para qué valores están configuradas estas opciones. También comprende algunas opciones de configuración especiales, como: saber cómo configurar un entorno de sincronización maestro-esclavo de mysql, conocer la diferencia entre varios binlog_format; conocer el seguimiento del rendimiento de MySQL, incluido slow_log/explain, etc., y también conocer el procesamiento básico de creación de índices, etc. Conocimiento en términos de principios, comprender la arquitectura básica de MySQL (Servidor + motor de almacenamiento), conocer el InnoDB/ básico; Estructura y diferencias de almacenamiento del índice MyISAM (índice agrupado, árbol B). Conocer el mecanismo básico de procesamiento de transacciones de InnoDB. Comprender la mayoría de las soluciones de excepciones de MySQL (o saber dónde encontrar una). Si las condiciones lo permiten, se recomienda conocer la base de datos MongoDB, que es un representante de NoSQL, y comparar las diferencias con MySQL. Los colegas pueden usar MongoDB de manera segura y prudente en escenarios de aplicación adecuados, y conocer el desarrollo combinado básico de PHP y MongoDB. . ?
4. Redis/Memcached ?
El procesamiento de caché definitivamente estará involucrado en la mayoría de los sistemas de tamaño mediano, por lo que debe comprender el almacenamiento en caché básico y conocer las similitudes, diferencias y aplicaciones de Memcached; y Redis Scenario, poder instalar Redis/Memcached de forma independiente, comprender algunas características y limitaciones básicas de Memcached, como el valor máximo, y saber cómo combinar PHP con su uso, comprender los principios básicos de funcionamiento y el uso de Redis, comprender lo convencional; tipos de datos y saber qué escenarios se utilizan, qué tipo, comprender las transacciones de Redis, etc. En la parte principal, puede tener una comprensión aproximada de la estructura de memoria de Memcached (el mecanismo de losa comprende la estructura de almacenamiento de implementación subyacente de tipos de datos comunes (SDS/lista vinculada/SkipList/HashTable), etc. Por cierto, Puede obtener más información sobre las transacciones de Redis, RDB, AOF y otros buenos mecanismos.
5. ¿PHP?
Además de las capacidades de la primera etapa, en términos de instalación y configuración, puede instalar libremente la configuración de compilación e instalación de PHP y varios terceros. extensiones; comprender la mayoría de las opciones y significados de configuración de php-fpm (como max_requests/max_children/request_terminate_timeout y otras configuraciones que afectan el rendimiento), conocer la diferencia entre mod_php/fastcgi y dominar varias tecnologías básicas en PHP, incluidas varias más en; -PHP profundo, incluido PHP Comprensión profunda de las características orientadas a objetos/SPL/especiales a nivel de sintaxis, como la reflexión en términos de marcos, he leído el código de al menos un marco PHP MVC convencional y conozco su interior; Mecanismo de implementación e ideas de diseño del marco PHP básico en el desarrollo de PHP. Ha podido utilizar hábilmente patrones de diseño convencionales para el desarrollo de aplicaciones (se recomienda fábrica abstracta/caso único/observador/cadena de comandos/estrategia/adaptador); desarrolle su propio marco PHP MVC para liberalizar completamente el desarrollo y permitirle comprenderlo en profundidad. El modelo MVC también le permite actualizar rápidamente en el desarrollo de proyectos comerciales, familiarizarse con varios métodos de optimización de código de PHP y familiarizarse con la resolución de la mayoría de los problemas de seguridad de PHP; estar familiarizado con los principios básicos del mecanismo de ejecución de PHP (trabajo básico del motor Zend/mecanismo de extensión).
6. ¿C/C++?
Comenzar a incursionar en ciertos lenguajes C/C++, ser capaz de escribir códigos básicos de C/C++ y estar familiarizado con la sintaxis básica de C/C++ ( punteros, operaciones de matrices, cadenas, API estándar general) y estructuras de datos (listas vinculadas, árboles, hashes, colas) tener un conocimiento básico de los conceptos de desarrollo del lenguaje C en Linux, poder escribir archivos MAKE simples y poder utilizarlos; La compilación simple del programa GCC/GDB y el trabajo de depuración simple tienen una comprensión general de la programación básica de la red. (Este artículo es para sentar las bases para un nivel superior). ?
7. ¿Front-end?
Basado en la primera etapa, familiarícese con el protocolo HTTP básico (código de protocolo 200/300/400/500, encabezado de interacción HTTP básico). Si las condiciones lo permiten, puede escribir HTML + CSS + JavaScript más elegante en profundidad, o simplemente puede usar algunos marcos de interfaz de usuario (jQuery/YUI/ExtJS/RequireJS/BootStrap, etc.) Programación de JavaScript en profundidad, por ejemplo, mecanismo de cierre y procesamiento DOM, si desea profundizar, puede leer el código fuente de jQuery para un estudio en profundidad. (Este artículo no es un estudio clave a menos que esté interesado en el front-end).
8. ¿Diseño del sistema?
Ser capaz de diseñar la arquitectura del sitio web, la base de datos y la selección del marco PHP básico para la mayoría de los sistemas de tamaño mediano, realizar pruebas de rendimiento y resolución de problemas, etc.; ser capaz de completar tareas tales como: navegador-> CDN (Squid) -> Nginx+PHP -> Caché -> Diseño básico, desarrollo y mantenimiento de sitios web con estructura de bases de datos capaces de soportar el desarrollo y mantenimiento de sitios web básicos con millones a decenas; de millones de tráfico cada día?
Capítulo Etapa tres: Etapa avanzada (programador PHP senior)?
Puntos clave: Además de los programas LNMP básicos, también puede tener programas integrados. aprendizaje profundo en una determinada dirección o campo. (Desarrollo de dimensión profunda) Objetivo: además de poder completar el desarrollo empresarial PHP básico, también puede resolver los problemas técnicos más profundos y complejos, y puede diseñar y completar de forma independiente el trabajo de diseño y desarrollo de sistemas medianos y grandes; realizar de forma independiente una inmersión profunda en una determinada tecnología. La dirección es bastante profesional en esta área.
(Por ejemplo, investigación en profundidad en cualquier dirección, como MySQL, Nginx, PHP, Redis, etc.)
1. ¿Linux?
Además de las capacidades de la segunda etapa, además de las operaciones regulares en Linux y el monitoreo y seguimiento del rendimiento, también puedo usar muchos comandos avanzados y complejos para completar el trabajo (watch/tcpdump/starce/ldd/ar, etc.) capaz de escribir scripts de shell relativamente complejos (más de 500 líneas) para ayudar a completar muchas tareas, incluidos shells para copias de seguridad, procesamiento automatizado, monitoreo, etc., se ha vuelto competente en aplicaciones como awk/sed/perl y puede operar libremente. , control, procesamiento, estadísticas de texto y análisis de datos en varios formatos complejos. Tiene cierta comprensión de los mecanismos internos de Linux y tiene una buena comprensión de los mecanismos internos de Linux. Hay procesamiento básico de la carga del módulo del kernel, manejo de errores de inicio, etc. ; al mismo tiempo, también entendemos algunas otras cosas relacionadas, como NFS, administración de discos, etc. ?
2.
Sobre la base de la segunda etapa. , He podido operar Nginx de manera muy competente y puedo realizar trabajos de operación y mantenimiento más profundos en Nginx, como monitoreo, optimización del rendimiento, procesamiento de problemas complejos, etc., según mis intereses personales, se pueden considerar más aspectos en los que considerar; estudio en profundidad del principio de funcionamiento de Nginx, comenzando principalmente con la lectura del código fuente, como el mecanismo de trabajo maestro / trabajador específico, el procesamiento de eventos internos de Nginx, la administración de memoria, etc., al mismo tiempo, puede aprender el desarrollo; de las extensiones de Nginx y personalice algunas extensiones privadas propias al mismo tiempo, puede tener un cierto grado de comprensión de Nginx + Lua para ver si se puede combinar y aplicar un mejor modelo. El requisito en esta etapa es una comprensión profunda; de los principios de Nginx, y puede considerar convertirse en un profesional profundo en la dirección de Nginx. ?
3. MySQL/MongoDB
Basado en la segunda etapa, en términos de aplicaciones MySQL, además de la optimización básica de SQL anterior, también puede completar algunas operaciones complejas, como como operaciones a gran escala, como importar y exportar datos por lotes, cambiar estructuras de tablas o agregar o eliminar campos de índice para grandes lotes de datos en línea, además de la instalación y configuración, ha podido manejar MySQL más complejo. Para el nivel de aplicación MySQL, están involucrados problemas como el seguimiento de varios problemas y retrasos en la sincronización maestro-esclavo, soluciones de sincronización de datos entre salas de computadoras, arquitectura de alta disponibilidad de MySQL, etc. tecnologías de MySQL, como mecanismos de transacción (niveles de aislamiento, bloqueos, etc.), activadores y particiones. Tener cierta comprensión y aplicación de otras tecnologías para el rendimiento de MySQL, incluida la optimización del disco (migración de SAS a SSD), la optimización del servidor ( memoria, configuración del servidor en sí), otras opciones principales de optimización del rendimiento además de la segunda etapa (innodb_log_buffer_size/back_log/table_open_cache/ thread_cache_size/innodb_lock_wait_timeout, etc.), aplicación de selección de software del grupo de conexiones, tiene un conocimiento profundo de declaraciones de operación como show * (mostrar estado/mostrar perfil) y puede completar la mayoría de los problemas de rendimiento con un conocimiento profundo de la tecnología de respaldo MySQL, incluida la recuperación y recuperación ante desastres, una comprensión profunda de Binlog, respaldo en frío y en caliente, respaldo multi-IDC, etc. .; tener una mejor comprensión de los principios de MySQL, como comenzar a leer algunos códigos fuente para el mecanismo de trabajo de MySQL, como aprender el código fuente de la tecnología de sincronización (replicación) maestro-esclavo, o aprender y comprender el código fuente de un cierto motor de almacenamiento (MyISAM/Innodb/TokuDB), etc. Si las condiciones lo permiten, puede consultar el motor CSV para desarrollar su propio motor de almacenamiento simple para guardar algunos datos y mejorar su comprensión de MySQL durante este proceso, si es así; Si está interesado, también puede considerar desarrollarse en la dirección de DBA. A nivel de MongoDB, puede considerar, por ejemplo, comenzar a aplicar MongoDB en línea cuando escriba menos y lea más, o realice algunas operaciones de análisis y procesamiento de datos en línea. Los escenarios específicos pueden basarse en el trabajo, pero el núcleo es tener. una comprensión mejor y más profunda de RMDBS Para aplicaciones en diferentes escenarios de NoSQL, si las condiciones o los intereses lo permiten, puede comenzar a aprender más sobre el mecanismo de trabajo de MongoDB.
?
4. Redis/Memcached ?
Sobre la base de la segunda etapa, se puede lograr una aplicación y un aprendizaje más profundos. Debido a que Memcached no es particularmente complejo, se recomienda leer el código fuente, especialmente la parte de administración de memoria, para facilitar una comprensión profunda. En la parte de Redis, puede realizar aplicaciones de estructura de datos más complejas (zset se usa para operaciones de clasificación; /procesamiento de transacciones para garantizar que Atomicity se utilice en aplicaciones de escenarios de venta flash); implica principalmente aprender aplicaciones de mecanismos de sincronización como aof y diseñar una arquitectura y un clúster de aplicaciones Redis de alta disponibilidad; se recomienda estudiar el código fuente de Redis en; Profundice y colóquelo en la segunda etapa. El conocimiento acumulado se puede aplicar. En particular, puede leer sobre gestión de eventos centrales, gestión de memoria, estructura de datos centrales internos, etc., para comprenderlo completamente. Si tu interés lo permite, podrás convertirte en un usuario muy profesional de Redis. ?
5. PHP ?
Como habilidad básica, necesitamos un estudio y una aplicación más profundos basados en la segunda etapa. En términos de aplicación de código básico, puede resolver el 95% de los problemas encontrados en el desarrollo de PHP y comprender la mayoría de las técnicas de PHP; puede comenzar a usar la mayoría de los marcos de PHP rápidamente en un día y comprender las ventajas de cada marco de PHP convencional. Puede realizar una selección de tecnología de manera rápida y conveniente durante el desarrollo del proyecto. En términos de configuración, además del conocimiento aprendido en la segunda etapa, también conocerá algunas opciones de configuración más oscuras (php auto_prepend_file/auto_append_file), incluidas algunas configuraciones avanzadas complejas en; extensiones y principios (como memcache.hash_strategy en la configuración de la extensión memcached, apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection en la configuración de la extensión apc, etc. tiene una buena comprensión del mecanismo de funcionamiento de php, incluido el funcionamiento de php-fpm); mecanismo (como php-fpm permite el cálculo del número de proceso y el principio en diferentes máquinas de configuración), tiene familiaridad básica con el motor zend (procesamiento vm/gc/stream), ha leído el código fuente básico del kernel PHP (o ha leído artículos relacionados), y tiene un conocimiento del mecanismo interno de PHP. Tiene un conocimiento de la implementación de la mayoría de las estructuras de datos centrales (tipos básicos/matriz/objeto) y un conocimiento profundo de la infraestructura central (zval/hashtable/gc be); capaz de realizar desarrollo básico de extensiones PHP, y comprender algunos conocimientos intermedios y avanzados de desarrollo de extensiones (minit/rinit, etc.), estar familiarizado con los detalles de los diferentes métodos de comunicación e interacción entre php y apache/nginx (mod_php/fastcgi ); además de desarrollar extensiones PHP, puedes considerar aprender a desarrollar extensiones Zend para comprender PHP desde un nivel inferior.
6. ¿C/C++?
A partir de la segunda etapa, podrás tener una comprensión más profunda del lenguaje C/C++ y completar el desarrollo de empresas pequeñas y medianas. Trabajo de desarrollo de sistemas C/C++; además de la sintaxis básica de C/C++ y las estructuras de datos en la segunda etapa, también puede aprender algunas estructuras de datos especiales (b-tree/rb-tree/skiplist/lsm-tree/trie-. árbol, etc.) para facilitar el trabajo especial Requisitos: en términos de programación de sistemas, estar familiarizado con la programación multiproceso y multiproceso, comprender la mayoría de los métodos de comunicación entre múltiples procesos en situaciones de múltiples procesos y ser capaz de hacerlo de manera flexible; elija métodos de comunicación (memoria compartida/semáforo/canalización, etc.); más La programación de subprocesos puede resolver problemas de conflictos de bloqueo y puede desarrollar y depurar programas de subprocesos múltiples al mismo tiempo. Está familiarizado con la programación de redes y comprende las diferencias; selecciones de modelos multiproceso/modelos multiproceso/modelos de IO de red asíncrono, y está familiarizado con diferentes asíncronos Los principios y diferencias de los modelos de IO de red (select/poll/epoll/iocp, etc.), y está familiarizado con marcos asíncronos comunes (ACE/ICE/libev/libevent/libuv/Boost.ASIO, etc.) y sus usos. Si tiene tiempo libre, también puede echar un vistazo a algunas bibliotecas de desarrollo propio (como muduo); tiempo, ser capaz de diseñar una buena arquitectura de programa de alta concurrencia (líder-seguidor/maestro-trabajador, etc.) comprender la mayoría de los problemas en el desarrollo de servidores back-end C/C++ (administración de memoria, impresión de registros, alta concurrencia, front-end); -Protocolos de comunicación de extremo y back-end, monitoreo de servicios), conocer los problemas de comunicación RPC de cada servicio de back-end (struct/http/thirft/protobuf, etc.) estar más familiarizado con el uso de GCC y GDB para desarrollar compilación y depuración; programas y núcleos de programas en línea Los problemas se pueden rastrear y resolver rápidamente después de eliminarlos; en términos de desarrollo general de módulos, se pueden acumular o desarrollar algunas herramientas o bibliotecas generales (como marcos de red asincrónicos, bibliotecas de registros, grupos de memoria, grupos de subprocesos, etc.), pero debe tener cuidado de aplicarlos después del desarrollo y ahorrar dinero cavando agujeros para perseguir errores. ?
7. Front-end?
Comprensión profunda del protocolo HTTP (incluido cada protocolo detallado, código de protocolo especial y las razones detrás de él, como 302 archivos estáticos). almacenado en caché, 502 es la razón por la cual php detrás de nginx cuelga la clase); además de las capacidades de integración de aplicaciones front-end anteriores de varios marcos, si está interesado en aprender el aspecto front-end, puede profundizar en la forma. desarrollar usted mismo algunos marcos de interfaz de usuario similares a jQuery o desarrollar un editor de texto enriquecido. Las clases son relativamente triviales y ponen a prueba las habilidades de JavaScript.
8. ¿Aprendizaje de idiomas en otros campos?
Tiene una acumulación básica en el lenguaje PHP/C/C++ básico. Se recomienda que intente aprender diferentes lenguajes de programación en la actualidad. etapa, dependiendo de sus intereses personales, como pasatiempo, puede aprender lenguajes de programación como Python/Ruby, lenguajes de programación funcionales como Lisp/Haskell/Scala/Erlang, lenguajes estáticos como Java/Golang y estadísticas de datos. Análisis como el lenguaje R. Si desea hacer negocios de back-end desde una perspectiva diferente, puede probar Node.js y el Nginx_Lua mencionado anteriormente combinado con Nginx, etc. Aprender diferentes idiomas es principalmente para mejorar su propia visión y las diferencias en los métodos de resolución de problemas. Por ejemplo, comprenderá que además de los procesos/hilos, también existen corrutinas ligeras, por ejemplo, en escenarios de comunicación entre máquinas; , la solución de Erlang es sorprendentemente simple; por ejemplo, si no desea elegir C/C++, también hay disponibles Erlang/Golang eficientes similares, etc., principalmente para mejorar sus horizontes. ?
9. ¿Estudiar en otras direcciones profesionales?
En esta etapa, además de las habilidades básicas de LNMP, también considerarás aprender conocimientos en otros campos. dependiendo de los intereses personales y las direcciones de objetivos a largo plazo. En la actualidad, hay muchos campos donde elegir, como la computación en la nube (almacenamiento distribuido, computación distribuida, máquinas virtuales, etc.), el aprendizaje automático (minería de datos, reconocimiento de patrones, etc., aplicado a estadísticas, recomendaciones personalizadas), natural. procesamiento del lenguaje (segmentación de palabras chinas, etc.), tecnología de motores de búsqueda, gráficos e imágenes, reconocimiento de voz, etc.
Además de estos avanzados, también hay muchas áreas donde puedes aprender más sobre ingeniería, como sistemas de alto rendimiento, desarrollo móvil (Android/IOS), seguridad informática, sistemas embebidos, hardware, etc. ?
10. ¿Diseño de sistemas?
Sobre la base de la segunda etapa, el diseño de sistemas puede aplicar la experiencia y las habilidades dominadas para diseñar sistemas medianos y grandes relativamente complejos, que pueden resolver grandes problemas. -Problemas de escala para algunos problemas complejos del sistema en línea, podemos completar varias interacciones complejas de RPC de back-end (backend de almacenamiento, backend lógico, backend anti-trampas, servicios externos) -> Negocios de backend más complejos que pueden soportar lo normal; desarrollo y mantenimiento de decenas a cientos de millones de sitios web con tráfico cada día.