Yii Framework Forum: Richieste Ajax Molto Lente - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Richieste Ajax Molto Lente Rate Topic: -----

#1 User is offline   dragonWeb 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 18
  • Joined: 16-February 13

Posted 08 April 2013 - 10:14 AM

Ciao a tutti!

Ho dei problemi di performance con Yii, quando faccio una richiesta Ajax ad un controller, anche solo per restituire un numero ci mette almeno 3 secondi, che se carico diverse richieste sono tanti ...

Il problema credo sia dovuto al fatto che per fare una richiesta Ajax carica tutti i controller, c'è un modo per risolvere questo problema?

Per spigarmi meglio io nel controller ho messo una actionGetSaldo() e con jquery faccio una richiesta all'indirizzo: baseUrl/controller/GetSaldo

questa richiesta prende 3 secondi, come mai? Come faccio a velocizzare il processo?

Grazie mille per la disponibilità.

Ciao!
0

#2 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 08 April 2013 - 10:41 AM

Puoi mostrarci il codice di actionGetSaldo()?
0

#3 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 303
  • Joined: 10-April 12

Posted 08 April 2013 - 06:28 PM

posta la richiesta che fai con jquery pure. non credo sia il problema che dici, cioè che carica tutti i controller, al massimo carica il controller che richiedi e a meno che non sia un controller gigante o che ha dei problemi non dovresti avere un risultato del genere.

altra domanda, stai lavorando tutto in locale? con una richiesta post o get normale hai problemi di questo tipo, sempre sullo stesso controller? magari anche sulla stessa action?
0

#4 User is offline   Maurizio Domba Cerin 

  • Yii - Yesss It Is !!!
  • Yii
  • Group: Yii Dev Team
  • Posts: 4,317
  • Joined: 12-October 09
  • Location:Croatia

Posted 09 April 2013 - 01:55 AM

Hai provato a eseguire "baseUrl/controller/GetSaldo" dal browser per vedere se e proprio li che si "spendono" i 3 secondi ?
Find more about me.... btw. Do you know your WAN IP?
0

#5 User is offline   dragonWeb 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 18
  • Joined: 16-February 13

Posted 10 April 2013 - 03:25 AM

Grazie mille per le risposte allora il codice GetSaldo semplice fa una QUERY al db e restituisce una somma.

@st4nny: Andando avanti il fatto è che il problema non è solo a quella richiesta in particolare, ma è lento su tutte le richieste Ajax che faccio.

Il sito è tutto in locale.

@Maurizio Domba: sì andando all'indirizzo non è così lento, è lento solo quando chiamo Ajax.

Avete qualche idea? Grazie!

AGGIORNAMENTO: Scrivendo la stessa risposta in json al di fuori di Yii la risposta diminuisce da 3 secondi a 300ms, quindi il problema è di Yii, ma non capisco dove sia il problema
0

#6 User is offline   Maurizio Domba Cerin 

  • Yii - Yesss It Is !!!
  • Yii
  • Group: Yii Dev Team
  • Posts: 4,317
  • Joined: 12-October 09
  • Location:Croatia

Posted 10 April 2013 - 05:05 AM

Ma come mai sei arrivato alla conclusione che il problema e di Yii?

Se andando direttamente all'indirizzo non e lento alora non e Yii... il problema e nel ajax/jQuery e quello che fa prima/dopo della ajax chiamata... ci puoi far vedere il codice che fa la chiamata ajax()
Find more about me.... btw. Do you know your WAN IP?
0

#7 User is offline   dragonWeb 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 18
  • Joined: 16-February 13

Posted 10 April 2013 - 08:45 AM

View PostMaurizio Domba, on 10 April 2013 - 05:05 AM, said:

Ma come mai sei arrivato alla conclusione che il problema e di Yii?

Se andando direttamente all'indirizzo non e lento alora non e Yii... il problema e nel ajax/jQuery e quello che fa prima/dopo della ajax chiamata... ci puoi far vedere il codice che fa la chiamata ajax()


Questo è un esempio:

$.get(baseUrl+'/BankAccount/GetSaldo/'+id, {},
		function(data){
			$("#saldoTotale span").html(data);
		});


Inoltre la stessa chiamata fatta ad uno script che produce lo stesso risultato fuori da Yii ha un tempo di riposta di 50ms contro i 4000ms della chiamata al controller di Yii.

Grazie, ciao!
0

#8 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 303
  • Joined: 10-April 12

Posted 10 April 2013 - 11:09 AM

prova così e facci sapere, forse non usi yii come dovresti, o forse c'è qualcosa nel tuo codice che non torna

nella view:
funzione js
<script type="text/javascript">
function test_func()
{
    <?php echo CHtml::ajax(array(
            'url'=>array('bankaccount/getsaldo/'.$model->id.''),
            'data'=> "js:$(this).serialize()",
            'type'=>'post',
            'dataType'=>'json',
            'success'=>"function(data)
            {
               $("#saldoTotale span").html(data.html);
            } ",
            ))?>
    return false; 
}
</script>


Bottone:
<?php echo CHtml::button('Test ajax',array('onclick'=>'test_func();return false;'))?>


nel controller:
public function actionGetsaldo($id)
{
    if (Yii::app()->request->isAjaxRequest)
    {
        $dato_calcolato = 100;
	echo CJSON::encode(array('html'=>$dato_calcolato));
	exit;
    }
		
}

0

#9 User is offline   dragonWeb 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 18
  • Joined: 16-February 13

Posted 10 April 2013 - 12:08 PM

st4nny grazie per la risposta ma è comunque lento, ti riporto la funzione:

if (Yii::app()->request->isAjaxRequest)
	    {
	        $dato_calcolato = BankAccount::getSaldoAl($id);
	        echo CJSON::encode(array('html'=>$dato_calcolato));
	        exit;
	    }


Dove BankAccount::getSaldoAl($id);

è

public static function getSaldoAl($id, $data = 0){
		
		if( $data = 0 ){
			$data = time();
		}
		
		//$startBalance = BankAccount::model()->findByPk($id)->opening_balance;
		
		$startBalance = 1000;
		
		$sql = 'SELECT value, type FROM trasaction 
					WHERE bank_account_id = ' . $id . ' AND date<'.$data;
					
		$cc=Yii::app()->db->createCommand($sql)->queryAll();
		
		$saldo = $startBalance;
		
		foreach( $cc as $t ){
			if( $t['type'] == 'in' ){
				$operator = 1;	
			}
			else {
				$operator = -1;
			}
			$saldo += $t['value']*$operator;
		}
		
		return $saldo;
	}


0

#10 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 303
  • Joined: 10-April 12

Posted 10 April 2013 - 05:27 PM

sbaglio o la query non è chiusa?
0

#11 User is offline   dragonWeb 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 18
  • Joined: 16-February 13

Posted 11 April 2013 - 02:27 AM

In che senso?
Scusa :)
0

#12 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 11 April 2013 - 09:08 AM

View Postst4nny, on 10 April 2013 - 05:27 PM, said:

sbaglio o la query non è chiusa?


sbagli =)
0

#13 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 11 April 2013 - 09:09 AM

Questo codice:
                if( $data = 0 ){
                        $data = time();
                }


forse andava scritto così?
                if( $data == 0 ){
                        $data = time();
                }

0

#14 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 303
  • Joined: 10-April 12

Posted 11 April 2013 - 04:58 PM

no perchè io me le scrivo sempre in questa maniera, però per come si concatenano le stringhe in php non ci dovrebbero essere problemi.

 $sql = 'SELECT value, type FROM trasaction 
         WHERE bank_account_id = ' . $id . ' AND date<'.$data.'';


cmq se a $dato_calcolato assegni un valore statico, il dato ti ritorna dopo 3 secondi?
perchè se non è così, il problema ce l'hai in getSaldoAl, è questa funzione ad essere lenta
non la richiesta ajax. Poi sulla rilevazione che ti ha fatto sensorario concordo, ma non so se inficia sul funzionamento della funzione.
0

#15 User is offline   vangelis1977 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 37
  • Joined: 09-April 13

Posted 12 April 2013 - 04:09 AM

Ciao,
Sono un babè di Yii quindi ho poca esperienza. Pero' ieri, ho avuto un problema simile, con la questione delle province e comuni. Dopo che con la select scegli la provincia, la seconda select si aggiorna di conseguenza. Con FF 15.xx sul primo onchange, 3 o 4 secondi di elaborazione e poi andava, anche se con Firebug vedevo che la richiesta XHR era molto rapide, invece con Chrome filava subito liscio. Vedi se cambiando Browser hai lo stesso problema.
Ciao,
Stefano
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users