Hola Jhon,
en ppio el codigo puede ser mejorado, hay un par de consultas que se podrian ‘cachear’ en variables de clase para no repetirlas.
Alguna llamada que no termino de entender bien que objeto tiene y que probablemente podria no existir, me refiero al primer ‘set_metadatos_extendidos’.
En el metodo que agrega el campo, podrias cambiar los IF por un SWITCH ya que las condiciones parecen mutuamente excluyentes y por lo tanto no necesitan ser testeadas si o si todas ellas.
Igualmente creo que el grueso pasa por otro lado. Esta parte del codigo se usa mucho y es altamente ineficiente, claramente se conocen los subindices del recordset, por lo que se podrian asignar los valores directamente en lugar de hacer un ciclo.
foreach ($filas as $reg_fila => $value) {
if ($reg_fila == 'asa_id') $identificador = $value;
if ($reg_fila == 'asa_tipo_actividades') $tipo_actividad = $value;
if ($reg_fila == 'asa_codigo') $codigo_actividad = $value;
if ($reg_fila == 'asa_cantidad') $cantidad = $value;
if ($reg_fila == 'tipact_abreviatura') $abreviatura = $value;
if ($reg_fila == 'tipact_nombre') $descripcion = $value;
if ($reg_fila == 'asa_porcentaje') $porcentaje = $value;
if ($reg_fila == 'asa_porcentaje') $porcentaje = $value;
}
Tene en cuenta que ya de por si en el metodo se tiene codigo de orden cuadratico, este ciclo lo unico que hace es incrementar mas la constante de multiplicacion.
Miralo, puede que con un par de condicionales puedas lograr el mismo resultado y asi eliminas un ciclo de al menos 15 vueltas segun decis… ademas se usa el mismo metodo en un par de lugares, tanto al leer como al grabar.
Eso del lado del servidor, la contraparte del lado del cliente tambien debe influir bastante. Por lo que me comentas, se estan procesando aproximadamente 750 valores en el cliente, eso genera una carga importante en JS y dependiendo de la eficiencia del browser puede llegar a tardar bastante en renderizar la pagina y procesarla.
Por ejemplo, cuando se lanza la validacion del formulario se recorren cada uno de esos 750 valores para verificarlos, eso va a llevar un tiempo… mucho mayor si la maquina cliente no es tan poderosa. En mi humilde opinion, un ML no deberia tener tal cantidad de datos para manejar… ya que tiene un overhead importante, una opcion es subdividir el conjunto de datos de manera de reducir la cantidad de filas o de columnas, aunque no se si en este caso se pueda.
Bueno, espero que lo que te comente te sirva, seguramente con algunos cambios puedas al menos lograr una menor carga en el servidor si es que el lado cliente no lo podes tocar.
Saludos