Gestión de adicciones y WordPress: una propuesta


El “infierno de adicción” es un problema que enfrentan todos los programas y ha levantado la cabeza en el espacio de WordPress en los últimos años, con más y más complementos utilizando bibliotecas de tercer código. Encontramos este problema cada dos meses con nuestro complemento de descarga S3 de Amazon S3 WP. Es un problema muy real para los deliciosos cerebros y puede servir como un buen ejemplo concreto del problema. El problema de nuestro complemento transfiere medios a Amazon S3 al cargar en la biblioteca de medios de WordPress y, para esto, utilizamos AWS SDK (incluido como Servicios de Amazon Plugin). El SDK ha realizado algunos cambios importantes entre las versiones 2 y 3, lo que ha aumentado la versión mínima que necesita PHP de 5.3 a 5.5. Con el 42.7% de todas las instalaciones de WordPress que se ejecutan en los servidores PHP 5.2, 5.3 o 5.4, estipular un mínimo de PHP 5.5 simplemente no funcionaría para nuestro complemento.
Cuando los clientes usan la descarga S3 junto con otro complemento basado en AWS SDK e incluyen en el paquete, a menos que ese complemento use V2, encontramos un problema de biblioteca incompatible. WordPress carga complementos en el orden en que se activaron, y PHP carga los archivos según sea necesario y las clases como se llama (cuando se usa cargas automáticas), por lo que es una lotería verdadera que primero llama al código SDK. El otro complemento es el que sufre. ¡Lo más frustrante de este problema es que es causado por las mejores intenciones! Los desarrolladores usan códigos de tercera parte para ser eficientes y para evitar reinventar la rueda. El código fue escrito por otros y usado y probado por muchos.
¿Por qué no incluye la biblioteca en su complemento con el espacio de nombre o las clases prefijados? Funcionaría, no se llevarían a cabo confrontaciones. Ibericode Boys hizo esto para incluir el paquete Pimple en su complemento. Esto funciona bien para ellos, porque Pimple es un pequeño paquete de dos archivos. Pero eso simplemente no se expande. Hacer este manual para algo tan grande como el AWS SDK sería demasiado trabajo y requeriría repetirlo cada vez que se actualice el paquete. Por lo tanto, las personas recurren al compositor en general, porque facilitan la gestión e integración de bibliotecas de terceros en una base de código. Pero desafortunadamente, el compositor a menudo se considera el culpable de este problema. ¡Este no es un problema de compositor! La comunidad de WordPress tiene bastante difícil tratar de embarcarse con el compositor (a diferencia del resto del mundo de PHP), ¡sin ser pavimentado con el cepillo equivocado! El problema ya está allí, sin compositor, simplemente no lo nota como visible. El embalaje de cualquier biblioteca de terceros con sus complementos públicos, ya sea que use o no, causará problemas con WordPress. Alain Schlesser – Post Status Slack. Peter Suhm escribió sobre los peligros de usar compositor con WordPress precisamente debido a este problema, pero afortunadamente, Coen Jacobs saltó en defensa del compositor para subrayar su error. Esto ha despertado algunas discusiones adicionales entre Peter y Coen, lo que ayudó a promover una potencial soluciones de Coen, utilizando el compositor irónico. El uso del complemento compositor, creado para Wikimedia, para combinar más archivos compositor.json durante la ejecución.
Esto es perfectamente lógico, porque el compositor es el paquete de facto PHP y el administrador de adicciones, pero necesita algunas dudas para que funcione en un sitio completo de WordPress que podría tener más complementos utilizando su propio archivo compositor.json para adicciones administradas por A-SI. Esta es solo una prueba del concepto de Coen, pero me gusta la dirección aquí y volveré a resolver el problema con el compositor más tarde. El enfoque ideal Ryan McCue escribió un gran artículo sobre cómo resolver el problema de las adicciones a los complementos en WordPress, que no se ha centrado tanto en las implementaciones técnicas, sino más bien en lo que se necesitaba de una experiencia de usuario final. Para resumir, la solución debe: detectar los posibles conflictos con adicciones antes de instalar un complemento
La instalación debe tratar automáticamente la instalación de una adicción al complemento
Las actualizaciones de los complementos deben tener en cuenta la adicción y detener y advertir si las actualizaciones crearán conflictos
WordPress como proyecto está muy enfocado en el usuario y no en el desarrollador. “Decisions Not Opciones” es un mantra que ha dirigido muchas de las características del proyecto en los últimos años, las actualizaciones de antecedentes automáticas son importantes. La gestión de adicciones debe administrarse de la misma manera, en la que el usuario no tiene que pensar demasiado y trabaja solo para ellos.
Este tipo de solución es una alta demanda, cubre muchas tierras y enfrenta algunos grandes desafíos. Críticamente, Ryan analiza el lugar donde debe estar la solución: el núcleo de WordPress: el objetivo final aquí es la integración básica. Si la solución no alcanza el núcleo al final, el proyecto ha fallado, porque no es ubicuo. Si esto sucede, arroje lo que necesita e intente nuevamente, pero debe ser esencial ser una solución viable para muchos usuarios. Una propuesta no es el desarrollador de WordPress más grande. Puedo usar compositor pero no soy un experto. Ciertamente no soy un tipo de PHP interno y solo quiero mantener este problema mientras lo escribo, pero … creo que el problema se puede resolver y aquí está mi propuesta de alto nivel para una solución y un posible complemento para las características de base. Después de mencionar anteriormente, creo que Coen ciertamente estaba en el camino correcto con su solución basada en el compositor y algunos de ellos están directamente inspirados en su proyecto, pero creo que tenemos que llevarla más allá.
1. Tercer código de pieza a través del compositor Cualquier complemento o tema utilizando el código de tercera parte debe definir sus adicciones utilizando un archivo composer.json y no debe distribuir el director del proveedor. 2. El compositor central de WordPress debe venir al paquete con el compositor, eliminando la necesidad de que los usuarios finales lo instale manualmente. Esto sería lo mismo que cualquier otra biblioteca que requiere WordPress, como solicitudes o mercado simple.
3. Comportamiento personalizado del compositor entonces, debemos personalizar fuertemente el comportamiento básico del compositor para integrarse con WordPress. Específicamente, esto se integraría con el proceso de instalación del complemento/tema para leer el archivo composer.json del complemento, para combinarlo en todos los demás e instalar las adicciones. Debería detectar conflictos y responder al usuario (a través de la interfaz de usuario o CLI) para informarles sobre los problemas. También debe lidiar con esto cuando se actualiza un complemento. Drupal tiene un administrador compositor similar de 2013: Composer Manager permite que cada módulo contribuido se entregue con su propio archivo composer.json, que enumera los requisitos específicos del módulo. Luego combine los requisitos de todos los módulos encontrados en el archivo consolidado composer.json. Esto da como resultado un solo proveedor/director compartido entre todos los módulos, lo que evita la duplicación del código y los desajustes de las versiones. 4. Paquete de sandboxing La última parte de mi propuesta es un pensamiento menos azul del cielo, pero algunos trabajos recientes de Coen me dieron esperanza. El escenario ideal para WordPress y los usuarios no es tener conflictos en absoluto. Cada complemento debe poder ejecutar sus adicciones de manera segura, sin amenazar con interferir con los demás. Cargar varias versiones de la misma clase simplemente no es posible en PHP, pero el prefijo de nombres o clases para que puedan usarse aislados es algo que podría funcionar y se ha discutido previamente desde la perspectiva.
Mozart es un nuevo script Coen que prefijo automáticamente paquetes compatibles con PSR-0 y PSR-4 con un espacio de nombre personalizado, para que un complemento pueda usarlos de manera segura. La construcción de este tipo de funcionalidad en la parte del compositor de WordPress significaría que todas las adicciones utilizadas por los arados serán Sandbox y no se producirían conflictos. Por supuesto, se debe hacer más trabajo para que Mozart admite otros tipos de paquetes, como aquellos con mapas de clase automáticos o sin espacios de nombres, y este enfoque tendrá problemas con paquetes más complejos que usan la indicación de tipo y la inyección de adicción, pero El potencial está ahí. Consideraciones Hay algunos problemas obvios con esta propuesta, el número uno es que el compositor tiene un requisito mínimo de PHP 5.3. Soy optimista de que, si hasta esta propuesta continúa que solo mis palabras en esta publicación, que el soporte PHP 5.2 está en WordPress. Y si no es este proyecto, gana tracción, entonces espero servir como un peso adicional del argumento para exceder la versión mínima. El siguiente problema importante es la adopción. Este será un cambio sísmico en la forma en que las personas escriben complementos, en lo que ha sido efectivamente el salvaje oeste de las prácticas de codificación hasta ahora. Cualquier tercer código de pieza incluido deberá hacerse a través del compositor. El examen de complementos WordPress.org tendrá que estar a bordo, y algunas revisiones automáticas de los complementos existentes serían una opción. Además, porque WP-CLI ahora es un proyecto de WordPress.

Org, sería lógico agregar un estándar más definido a un andamio de complemento para incluir un archivo compositor.json. Si los paquetes no eran Sandbox y los conflictos seguían siendo un problema, entonces el uso del compositor introduce un problema en torno a la versión. Muchos paquetes tienen requisitos de Semver innecesariamente estrictos. Esto no es mucho si solo puede hacer un cambio o enviar un PR. Para los usuarios finales que simplemente no pueden instalar un complemento porque sus requisitos son demasiado estrictos, será extremadamente problemático. WordPress debe ser inteligente con la toma de decisiones aquí y cancelar las restricciones dentro de los límites confidenciales para que la experiencia del usuario final no sufra. El rendimiento es otra preocupación. Los servidores que generalmente ejecutan WordPress a menudo se optimizan para satisfacer solicitudes web, que no necesariamente consumen mucha memoria. Resolver la adicción al compositor es un proceso que requiere mucha memoria, a veces creando un árbol con más de 100,000 nudos que deben resolverse. Esto puede requerir fácilmente 256 MB o incluso 512 MB de memoria para ejecutar de manera confiable. Afortunadamente, esto se mejora, pero una instalación de WordPress con complementos que requieren adicciones múltiples aumentará sin duda el tiempo de instalación y consumirá más recursos del servidor que simplemente descargar y extraer un archivo zip. Finalmente, un problema para mí es la implementación. Veo lo que hay que hacer, pero no exactamente cómo hacerlo. Este tipo de proyecto necesita más personas para trabajar en él y no sabría dónde comenzar a convertir esto en un proyecto característico.

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

gkOVSBm5B8SgiXmo

Shopify vs WooCommerce – ¿Cuál es la mejor plataforma?(Comparación)

Shopify vs WooCommerce

Leave a Reply

Your email address will not be published. Required fields are marked *