Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Synchronous Requests == BAD

    Cosa ne pensate di questo
    articolo ?

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  2. #2
    effettivamente tutti i torti non li ha:
    http://www.3site.eu/examples/sjax/

    Però quando si sceglie di sfruttare un'interazione sincrona c'è sempre un motivo valido e dire che un approccio piuttosto che un altro è BAD a prescindere è sempre poco veritiero
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Ciao.
    Grazie della risposta.
    Ho utilizzato una richiesta sincrona in
    questo script dopo varie vicissitudini
    (l'array con i titoli come puoi immaginare non era
    disponibile (con la richiesta asincrona) al window.onload avevo optato per
    far stampare a php un array js con una classetta
    ma poi Cristiano sul forum di Google mi ha dato la dritta
    su questo thread )

    Che ne pensi lascio Ajax con la richiesta sincrona
    o scelgo l'altro metodo ?

    Alla luce dell'articolo opterei per l'altro ma aspetto
    numi


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  4. #4
    a me sembra che in quella discussione dicano tutti la stessa cosa ....

    esatto, dipende dal contesto, dalla necessità
    il problema è semplicemente che tu non hai alcuna necessità di prendere titoli in modo sincrono o asincrono, qualunque home page può essere creata direttamente tramite php (o linguaggio eventuale scelto) a prescindere che si crei un sistema asincrono o sincrono, insomma questo tuo esempio a me sembra un "semplice" abuso di ajax, te lo posso riproporre usando JavaScript (creandolo tramite PHP direttamente prima di servire la pagina) senza alcuna necessità di sfruttare XMLHttpReuqest e forse loro non cihanno fatto caso (hanno parlato più a livello teorico che a livello specifico per il tuo problema)


    Sunto: in questo caso non userei affatto XMLHttpRequest, per il semplice fatto che non serve usarlo.

    Per concludere, quel Cristiano mi sembra abbastanza preparato ma questa frase
    e anche dall'impostazione dello sviluppatore.
    non ha alcun senso ... lo sviluppatore non usa a prescindere sincrono per sua impostazione, sa scegliere quando usare asincrono o sincrono a seconda delle esigenze dell'applicativo e, come lui stesso ha detto, del contesto.

    Il sincrono non è il male, come ho già detto ... ed anche a me fa sorridere uno che fa un post approssimativo con scritto sincrono == MALE, solo impedisce di fare altro durante un caricamento e se lui non s'è mai posto il problema o non ha mai avuto problemi di rallentamenti non significa che lui abbia fatto sempre bene, se si scambia dati in JSON in area admin i dati potrebbero essere parziali (solo un componente dell'area) svincolati dal resto ed anche "numerosi", e vedi che bloccare tutto non avrebbe alcun senso, anzi, creerebbe disagio all'utilizzatore (la sensazione di un browser che si freeza non è mai bella, l'esempio l'ho messo apposta)

    Aggiungo l'imho, così faccio contento a questo Cristiano
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    "semplice" abuso di ajax
    Sono d'accordo faccio stampare a php
    un file js con un array tipo questo:

    var mylinks= new Array();
    mylinks[0]= new Array();
    mylinks[0][0]='1';
    mylinks[0][1]='tTitle1';
    ............
    da includere nella index.

    te lo posso riproporre usando JavaScript (creandolo tramite PHP direttamente prima di servire la pagina) senza alcuna necessità di sfruttare XMLHttpReuqest
    Cioè fai stampare a php tutto lo script
    non mi è molto chiaro .......

    Potresti fare un piccolo esempio di cosa intendi ?


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  6. #6
    Originariamente inviato da whisher
    Sono d'accordo faccio stampare a php
    un file js con un array tipo questo:
    ....
    da includere nella index.
    ----------------------------------
    Cioè fai stampare a php tutto lo script
    non mi è molto chiaro .......

    Potresti fare un piccolo esempio di cosa intendi ?
    Intanto ti consiglio di usare JSON, è stato creato appositamente per semplificare le assegnazioni e ridurre le dimensioni
    codice:
    var mioarray = <?php echo json_encode($quello_che_ti_pare); ?>
    dove s enon hai la libreria json puoi usare quella Pear, ma qui sforiamo dal forum

    Detto questo, far stampare all'arrivo dell'utente tutto da php (o altro linguaggio server) per creare il JS necessario è una pratica vecchia di svariati anni, diciamo quasi la prassi ... e considera che richiamare tramite ajax le informazioni o mostrarle in script tramite php richiede lo stesso identico spreco di banda solo nel tuo caso aggiungi una request al server (doppia chiamata, doppia connsessione al db, se necessario, doppio tutto), quindi seppur in modo irrisorio appesantisci il server per ogni utente che arriva con 2 chiamate invece di una.

    Va bene l'onload, ma l'xml puoi sfruttarlo tramite JS in questo evento oppure non crearlo affatto ed usare json per creare direttamente l'array.

    Per maggiori dettagli chiedi un problema specifico con pochi dati (per semplificare anche la risposta) che cerco di aiustarti


    [edit]
    per farla breve: se una pagina alla sua apertura richiede un blocco per una richiesta asincrona c'è qualcosa che non va a livello logico sicuramente migliorabile (oppure è una necessita molto particolare ma non mi sembra questo il caso)
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    Grazie del chiarimento.
    Ok per JSON

    Va bene l'onload, ma l'xml puoi sfruttarlo tramite JS in questo evento oppure non crearlo affatto ed usare json per creare direttamente l'array.
    Lo script utilizza file xml quindi il file sarebbe
    già pronto e utilizza una semplice classe per
    il caching che serializza l'array dei vari items.
    Questa classe oltre a scrivere ovviamente il
    file di caching scrive il feed rss e l'array js
    (visto che nella classe recupero l'array dei dati)
    (suggerimenti ) ad ogni modo hai ragione te
    le chiamate al server sarebbero sempre due


    Ad ogni modo l'array lo faresti stampare nella pagina
    o in un file separato ti posto la classe così mi dici
    se ti sembra un procedimento giusto :
    Scusate mod

    Codice PHP:
    class JsBuilder{
        private 
    $jsFile'';
        private 
    $arrayname'';
        private 
    $jsStatement'';
         public function 
    __construct($jsFile,$arrayname='mylinks'){
               
    $this->jsFile$jsFile;
            
    $this->arrayname$arrayname;
        }
        public function 
    write(){
            if(!
    $fp=fopen($this->jsFile,'w')){
                 throw new 
    FileException('Error opening ['.$this->jsFile.'] file in ['.__CLASS__.']');
            }
            if(!
    flock($fp,LOCK_EX)){
                throw new 
    FileException('Unable to lock ['.$this->jsFile.'] file in ['.__CLASS__.']');
            }
            if(!
    fwrite($fp,$this->jsStatement)){
                throw new 
    FileException('Error writing to ['.$this->jsFile.'] file in ['.__CLASS__.']');
            }
            
    flock($fp,LOCK_UN);
            
    fclose($fp);
            unset(
    $fp);
           }
        public function 
    prepare($data){
             if(!
    is_array($data)){
                throw new 
    InvalidArgException('Error! Expects an array, string given in ['.__CLASS__.']');
            }
            
    $this->jsStatement.= 'var '.$this->arrayname."= new Array();\n";
            foreach(
    $data as $k => $v){
                
    $this->jsStatement.= $this->arrayname.'['.$k."]= new Array();\n";
                    foreach(
    $v as $key => $value){
                        if(
    $key=='id'){
                            
    $this->jsStatement.= $this->arrayname.'['.$k.']'."[0]='".$value."';"."\n";
                        }
                        if(
    $key=='title'){
                            
    $this->jsStatement.= $this->arrayname.'['.$k.']'."[1]='".$value."';"."\n";
                        }
                    }
            } 
        }
    }
    ?> 
    da richiamare nella classe cache in questo modo:

    Codice PHP:

    <?php 
    class Cache{
        private 
    $tonull;
        public 
    $rss2Parsernull;
        private 
    $jsBuildernull;
        private 
    $expiry0//  cache expire time in seconds 
        
    private $cacheFile''
         private 
    $data= array(); 
        public function 
    __construct(Data $to,Rss2Parser $rss2Parser,JsBuilder $jsBuilder,$expiry,$cacheFile){
            
    $this->to$to;
            
    $this->rss2Parser$rss2Parser;
            
    $this->jsBuilder$jsBuilder;
            if(!
    is_int($expiry)||($expiry==0)){
                throw new 
    InvalidArgException('Error! Expects an integer, string given in ['.__CLASS__.']');
            }
            
    $this->expiry$expiry;
            
    $this->cacheFile$cacheFile;
            
    $this->query();
        }
           private function 
    query(){
            if(!
    $this->isValid()){
                              
    /* QUI */
                
    $this->data$this->to->getData();
                
    $this->rss2Parser->makeRss2($this->data);
                
    $this->jsBuilder->prepare($this->data);
                
    $this->jsBuilder->write();
                
    $this->write();
            }
            else{
                
    $this->read();
            }
            
        }
        private function 
    write(){
            if(!
    $fp=fopen($this->cacheFile,'w')){
                 throw new 
    FileException('Error opening ['.$this->cacheFile.'] file in ['.__CLASS__.']');
            }
            if(!
    flock($fp,LOCK_EX)){
                throw new 
    FileException('Unable to lock ['.$this->cacheFile.'] file in ['.__CLASS__.']');
            }
            if(!
    fwrite($fp,serialize($this->data))){
                throw new 
    FileException('Error writing to ['.$this->cacheFile.'] file in ['.__CLASS__.']');
            }
            
    flock($fp,LOCK_UN);
            
    fclose($fp);
            unset(
    $fp);
           }
        private function 
    read(){
               if(!
    $this->data=unserialize(file_get_contents($this->cacheFile))){
                throw new 
    FileException('Error reading from cache file');
            }
           }
           
    // determine cache validity based on a time expiry trigger
        
    private function isValid(){
            
    $isValidfalse;
            if(
    file_exists($this->cacheFile)&&filemtime($this->cacheFile)>(time()-$this->expiry)){
                
    $isValidtrue;
            }
           return 
    $isValid;
           }
        public function 
    getData(){
               return 
    $this->data;
           }
        final public function 
    __destruct(){
            unset(
    $this->to);
            unset(
    $this->expiry);
            unset(
    $this->cacheFile);
            unset(
    $this->data);
        }
    }
    ?>
    Ti sembra valido come metodo ?
    Con JSON vorrei fare + o - la stessa cosa.
    Scusa se approffitto





    PS
    Se non ricordo male c'è una tua classe
    che trasforma dati php in notazione JSON
    ACE no ? o è un'altra cosa ?
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  8. #8
    io ho fatto una serialize/unserialize JavaScript, alleggerisce il server ma è più lenta nel client (cosa che personalmente preferisco)

    Riguardo la tua classe non mi sembra male ma con json la dimezzi (entrambe) ... non ha molto senso fare un JSBuilder proprietario e potenzialmente limitato quanro JSON è un protocollo "universale" e la serialize ha una versione client (la mia) che semplifica il tutto.

    P.S. non vedo la cache ... cache significa "non fare niente se già fatto", tu mi sembra crei ogni volta il file

    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #9

    ........

    P.S. non vedo la cache ... cache significa "non fare niente se già fatto", tu mi sembra crei ogni volta il file
    Codice PHP:
        private function query(){
            if(!
    $this->isValid()){
    /* Se valid ritorna false scrivo */
                
    $this->data$this->to->getData();
                
    $this->rss2Parser->makeRss2($this->data);
                
    $this->jsBuilder->prepare($this->data);
                
    $this->jsBuilder->write();
                
    $this->write();
            }
            else{
    /* Se valid ritorna true leggo */
                
    $this->read();
            }
            
        }
    private function 
    isValid(){
            
    $isValidfalse;
            if(
    file_exists($this->cacheFile)&&filemtime($this->cacheFile)>(time()-$this->expiry)){
                
    $isValidtrue;
            }
           return 
    $isValid;
           } 
    Però mi sembra stranissimo che ti sia sfuggita !
    C'è qc ata ?????????


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  10. #10
    Mi hai fatto pure sbagliare thread
    dallo spavento VVoVe:

    [edit: discussioni unite]
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.