He estado aprendiendo los fundamentos de Big(o)
y después de mirar un código antiguo que he escrito, habitualmente uso for loops
anidados para problemas como este en lugar de implementar un mejor enfoque con un tiempo de ejecución más rápido. Por ejemplo:
const webhooks = [ [ { topic: "CUSTOMERS_CREATE", path: `${process.env.HOST}/webhooks/customers/create`, }, { topic: "CUSTOMERS_UPDATE", path: `${process.env.HOST}/webhooks/customers/update`, }, { topic: "CUSTOMERS_DELETE", path: `${process.env.HOST}/webhooks/customers/delete`, }, ], [ { topic: "CHECKOUTS_CREATE", path: `${process.env.HOST}/webhooks/checkouts/create`, }, { topic: "CHECKOUTS_UPDATE", path: `${process.env.HOST}/webhooks/checkouts/update`, }, ], [ { topic: "ORDERS_CREATE", path: `${process.env.HOST}/webhooks/orders/create`, }, { topic: "ORDERS_UPDATED", path: `${process.env.HOST}/webhooks/orders/update`, }, { topic: "ORDERS_DELETE", path: `${process.env.HOST}/webhooks/orders/delete`, }, ], [ { topic: "PRODUCTS_CREATE", path: `${process.env.HOST}/webhooks/products/create`, }, { topic: "PRODUCTS_UPDATE", path: `${process.env.HOST}/webhooks/products/update`, }, { topic: "PRODUCTS_DELETE", path: `${process.env.HOST}/webhooks/products/delete`, }, ], ]; // Registering the webhooks webhooks.forEach(async (elm) => { elm.forEach(async (el) => { Shopify.Webhooks.Registry.addHandler(el.topic, { path: el.path, webhookHandler: webhookController, }); }); });
En este fragmento, estoy recorriendo la matriz inicial, luego la matriz anidada para finalmente obtener el topic
y la path
para cada elemento. Luego realizo una llamada de función con esas propiedades para su posterior procesamiento. Si bien funciona un for loop
anidado, sé que tendrá un tiempo de ejecución de O(n^2)
que es horrible a escala. Pensé en convertir esta matriz de objetos en un mapa , pero ¿hay advertencias sobre este enfoque que me estoy perdiendo? Si es así, ¿qué métodos alternativos podría usar para lograr un tiempo de ejecución mucho más ideal como O(log(n))
?