Soporte » Plugins y Hacks » WooCommerce » Actualización de estado de pedido tarda mucho

  • Hola a tod@s,

    Estoy desarrollando un plugin a medida para un cliente en el que tiene la posibilidad de subir un CSV con un listado de resultados en JSON. Cada fila de ese CSV empieza por un código, que se corresponde con un itemmeta del pedido. Voy iterando por cada código en busca del pedido correspondiente para hacer una serie de acciones que toma unos 0.0007 sec, pero a la hora de actualizar el estado del pedido le lleva más de 4 sec por cada uno.

    Pensé que era por utilizar el método $order->update_status() y lo cambié por el nuevo $order->set_status();$order->save(), pero sigue igual.

    Aquí les dejo un benchmark simple:

    Leer el CSV: 0.0003 sec
    Combinar el CSV: 0.0001 sec
    Empieza el ciclo for

    _ _ Duplicar los resultados de los códigos con “i” en “r”: 0.0001 sec
    _ _ Localizar el pedido asociado y crear el JSON: 0.0007 sec
    _ _ Subir al pedido el JSON: 0.0031 sec
    _ _ Actualizar el estado del pedido: 5.8185 sec–Order ID: #2244

    _ _ Duplicar los resultados de los códigos con “i” en “r”: 0.0001 sec
    _ _ Localizar el pedido asociado y crear el JSON: 0.0006 sec
    _ _ Subir al pedido el JSON: 0.002 sec
    _ _ Actualizar el estado del pedido: 6.8691 sec–Order ID: #2243

    _ _ Duplicar los resultados de los códigos con “i” en “r”: 0.0001 sec
    _ _ Localizar el pedido asociado y crear el JSON: 0.0006 sec
    _ _ Subir al pedido el JSON: 0.0021 sec
    _ _ Actualizar el estado del pedido: 4.7419 sec–Order ID: #1414

    _ _ Duplicar los resultados de los códigos con “i” en “r”: 0.0001 sec
    _ _ Localizar el pedido asociado y crear el JSON: 0.001 sec
    _ _ Subir al pedido el JSON: 0.0027 sec
    _ _ Actualizar el estado del pedido: 4.8132 sec–Order ID: #1413

    _ _ Duplicar los resultados de los códigos con “i” en “r”: 0.0001 sec
    _ _ Localizar el pedido asociado y crear el JSON: 0.0015 sec
    _ _ Subir al pedido el JSON: 0.0051 sec
    _ _ Actualizar el estado del pedido: 6.9639 sec–Order ID: #1412

    _ _ Duplicar los resultados de los códigos con “i” en “r”: 0.0001 sec
    _ _ Localizar el pedido asociado y crear el JSON: 0.0009 sec
    _ _ Actualizar el pedido con el JSON: 0.003 sec
    _ _ Actualizar el estado del pedido: 6.9301 sec–Order ID: #1406

    _ _ Duplicar los resultados de los códigos con “i” en “r”: 0.0001 sec
    _ _ Localizar el pedido asociado y crear el JSON: 0.001 sec
    _ _ Actualizar el pedido con el JSON: 0.0026 sec
    _ _ Actualizar el estado del pedido: 5.8801 sec–Order ID: #1405

    Tiempo total de ejecución: 42.0449 sec
    Actualizados: 7

    Y aquí el código de actualización:

    if ($update) {
    	$order = wc_get_order( $order_id );
    	if (!empty($order)) {
    		// $order->update_status('generating-report', 'Se ha subido un CSV con los resultados de este test.' );  // DEPRECATED since WC 3.0
    		$order->set_status( 'analyzing-sample', 'Se ha subido un CSV con los resultados de este test.' ); // WC 3.0 need this
    		$order->save(); // WC 3.0 need this
    	}
    	$registros++;
    }

    ¿Alguien sabe porqué WooCommerce tarda tanto en actualizar los estados de pedidos?

Viendo 1 respuesta (de 1 total)
  • Moderador Rafa Poveda

    (@bi0xid)

    Buenas.

    Yo diría que es por el $order->save();, que consume una barbaridad de tiempo. El por qué, si puedes hacer un trace de qué es lo que hace en el guardado, quizá puedas reducir algo.

    También tienes la opción de intentar hacerlo a través de la REST API directamente, y puede que reduzcas también el tiempo.

    Ya nos cuentas si encuentras algo.

Viendo 1 respuesta (de 1 total)
  • Debes estar registrado para responder a este tema.