Cosa ne pensate di questo
articolo ?
![]()
Cosa ne pensate di questo
articolo ?
![]()
Without faith, nothing is possible. With it, nothing is impossible
http://ilwebdifabio.it
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![]()
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
a me sembra che in quella discussione dicano tutti la stessa cosa ....
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)esatto, dipende dal contesto, dalla necessità
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
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.e anche dall'impostazione dello sviluppatore.
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![]()
Sono d'accordo faccio stampare a php"semplice" abuso di ajax
un file js con un array tipo questo:
da includere nella index.var mylinks= new Array();
mylinks[0]= new Array();
mylinks[0][0]='1';
mylinks[0][1]='tTitle1';
............
Cioè fai stampare a php tutto lo scriptte lo posso riproporre usando JavaScript (creandolo tramite PHP direttamente prima di servire la pagina) senza alcuna necessità di sfruttare XMLHttpReuqest
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
Intanto ti consiglio di usare JSON, è stato creato appositamente per semplificare le assegnazioni e ridurre le dimensioniOriginariamente 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 ?
dove s enon hai la libreria json puoi usare quella Pear, ma qui sforiamo dal forumcodice:var mioarray = <?php echo json_encode($quello_che_ti_pare); ?>
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)
Grazie del chiarimento.
Ok per JSON
Lo script utilizza file xml quindi il file sarebbeVa 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.
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
da richiamare nella classe cache in questo modo: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";
}
}
}
}
}
?>
Ti sembra valido come metodo ?Codice PHP:
<?php
class Cache{
private $to= null;
public $rss2Parser= null;
private $jsBuilder= null;
private $expiry= 0; // 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(){
$isValid= false;
if(file_exists($this->cacheFile)&&filemtime($this->cacheFile)>(time()-$this->expiry)){
$isValid= true;
}
return $isValid;
}
public function getData(){
return $this->data;
}
final public function __destruct(){
unset($this->to);
unset($this->expiry);
unset($this->cacheFile);
unset($this->data);
}
}
?>
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
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
![]()
P.S. non vedo la cache ... cache significa "non fare niente se già fatto", tu mi sembra crei ogni volta il filePerò mi sembra stranissimo che ti sia sfuggita !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(){
$isValid= false;
if(file_exists($this->cacheFile)&&filemtime($this->cacheFile)>(time()-$this->expiry)){
$isValid= true;
}
return $isValid;
}
C'è qcata ?????????
![]()
Without faith, nothing is possible. With it, nothing is impossible
http://ilwebdifabio.it
Mi hai fatto pure sbagliare thread![]()
dallo spaventoVVoVe:
[edit: discussioni unite]
Without faith, nothing is possible. With it, nothing is impossible
http://ilwebdifabio.it