Sida 1 av 2

Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 12:41:33
av sodjan
Jag är lite intresserad av hur man åstakommer den typ av dynamisk
uppdatering som man t.ex kan se på http://bors.e24.com/
i rutan benämnd "Marknadsöversikt".

Är det kod i browsern som själv "hämtar" nya värden ? Eller är det någon
"push" teknik så att servern skickar ut nya värden regelbundet ?

Och om det är servern som "pushar" ut värderna, vad krävs det på server
sidan för att åstakomma detta (av t.ex web-servern) ?

Re: Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 12:53:41
av hubben
Kolla upp begreppet AJAX...
Browsern hämtar data med jämna mellanrum..

Re: Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 12:54:14
av X-IL
Jag gjorde på ett tidigare jobb ett enkelt chattsystem som var webbaserat. Där såg jag till att aldrig avsluta strömmen utan fyllde bara på varefter tiden gick och meddelanden kom in. Detta var i PHP. Men om man vill uppdatera annat(bilder, diagram etc) dynamiskt så finns det väl diverse tekniker färdigt (Java, JS, DHTML osv).

Re: Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 13:11:56
av sodjan
Java och JS är väl bara "språk" !?
Det jag är intresserad av hur själva server<->browser
kommunikationen går till.

Re: Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 13:20:42
av PHermansson

Re: Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 13:23:15
av TomasL
Enklast är väl

Kod: Markera allt

<meta http-equiv="refresh" content="sss"> 
där "s" är tid i sekunder

Re: Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 13:29:16
av PHermansson
Men det laddar om hela sidan? Med Ajax kan man uppdatera enbart innehållet i en enskild div-tagg.

Re: Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 13:30:55
av Nerre
Man kan göra en IFRAME, då funkar refresh.

Re: Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 13:56:25
av sodjan
OK, jag kollar lite snabbt på Ajax. Jag hade fått för mig att det
hade kopplingar till Java/Javascript, men det kanske är mer
generellt än så. Hur som helst, är det alltså Ajax som sidan
jag länkade till använder ?

Re: Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 14:16:18
av Zeela
Jo, med största sannolikhet AJAX med JavaScript som sköter anropen till serven.

Re: Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 14:25:43
av sodjan
OK.
Det finns ju även push tekniker där det enbart blir trafik server->browser
om det faktiskt finns något "att säga" så att säga. Pollning ger nästan alltid
en hel del onödig trafik, i alla fall om vill vill ha en rimlig svarstid när det
väl finns data tillgänglig.

Jag glömde att säga att detta i så fall skulle användas inom ett privat
företagsnät och jag har full kontroll över både server och klient sidan.

Jag antog faktiskt att det var någon slags push teknik som kördes
på sidan ovan eftersom "push" förekommer frekvent i sidans källkod.

Annan annan sak...
Någon som vet något verktyg för att "snygga till" Javascript kod som t.ex :
http://push.e24.com/files/js-api/1.4.1/mdg_js_api.js
så att det blir läsbart ?

Re: Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 14:27:45
av PHermansson
Jag kollade lite på den koden, och den är inte trivial. Inte nått bra sätt att börja lära sig alltså :)
Koden i min länk ovan med klockan är däremot lagom för att få en uppfattning om hur det funkar och hur man gör.

Re: Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 15:35:07
av TomasL
Någon som vet något verktyg för att "snygga till" Javascript kod som t.ex :
Notepad, sök och ersätt, typ

Re: Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 15:45:11
av TomasL

Kod: Markera allt

var MDG=new Object();

MDG.BaseConfig=function(){this._d=new Array();

	for(var H=0;H<arguments.length;H++)
	{if(arguments[H]!=undefined){this._d.push(arguments[H]);

	}}this._d.push(new Object());
	this._d.reverse();
	var setDocDomain=this.getBooleanProperty("SET_DOC_DOMAIN");
	if(setDocDomain){var Tn=document.domain.split(".").reverse();
		var MR=this.getIntProperty("DOC_DOMAIN_COMMON_PARTS");
		if(Tn.length>MR){Tn.length=MR;
			document.domain=Tn.reverse().join('.');
		}}};
		MDG.BaseConfig.prototype.getProperty=function(name,bQ){var c=this._d[0][name];
			if(c!=undefined){if(c=="_undefined_"){return bQ;
			}return c;
		}for(var H=1,b=this._d.length;
		H<b;
		H++){var d=this._d[H][name];
			if(d!=undefined){this._d[0][name]=d;
				return(d=="_undefined_"?bQ:d);
			}}return bQ;
		};
		MDG.BaseConfig.prototype.removeProperty=function(name){this._d[0][name]="_undefined_";
		};
		MDG.BaseConfig.prototype.getBooleanProperty=function(name,bQ){var S7=this.getProperty(name);
			if(S7==undefined){return bQ;
			}if(S7=="true"||S7=="TRUE"||S7=="1"){return true;
			}return false;
		};
		MDG.BaseConfig.prototype.getIntProperty=function(name,bQ){var k=this.getProperty(name);
			if(k==undefined){return bQ;
			}return parseInt(k);
		};
		MDG.BaseConfig.prototype.getNumberProperty=function(name,bQ){var k=this.getProperty(name);
			if(k==undefined){return bQ;
			}return Number(k);
		};
		MDG.BaseConfig.prototype.setProperty=function(name,value,QI){if(this._d.length==0){return false;
		}if(QI==undefined){QI=true;
		}if(QI){this._d[0][name]=value;
			return true;
		}if(this.getProperty(name)!=undefined){return false;
		}this._d[0][name]=value;
		return true;
	};
	MDG.BaseConfig.prototype.getPropertyNames=function(){var sZ=new Array();
		var KP=new Object();
		for(var H=0,b=this._d.length;
		H<b;
		H++){for(d in this._d[H]){KP[d]=d;
		}}for(S7 in KP){sZ.push(S7);
		}return sZ;
	};
	String.prototype.startsWith=function(q9){return(this.indexOf(q9)===0);
	};
	String.prototype.endsWith=function(q9){var O=this.lastIndexOf(q9);
		if(O<0){return false;
		}return(O==(this.length-q9.length)?true:false);
	};
	String.prototype.findFirstNotOf=function(q9){var b=this.length;
		for(var H=0;
		H<b;
		H++){if(this.charAt(H)!=q9){return H;
		}}return-1;
	};
	String.prototype.firstLines=function(Uo){if(Uo==undefined){Uo=1;
	}var O=-1;
	for(var H=0;
	H<Uo;
	H++){O=this.indexOf("\r\n");
		if(O<0){O=this.indexOf("\n\r");
		}if(O<0){O=this.indexOf("\n\r");
		}if(O<0){O=this.indexOf("\r");
		}if(O<0){O=this.indexOf("\n");
		}}if(O>-1){return this.substring(0,O);
		}return this;
	};
	String.prototype.equals=function(Dl){if(Dl.length!=this.length){return false;
	}for(var H=0;
	H<this.length;
	H++){if(this.charAt(H)!=Dl.charAt(H)){return false;
	}}return true;
};
String.prototype.countTrailing=function(q9){var b=q9.length;
	if(b!=1){return 0;
	}var s=0;
	for(var H=this.length-1;
	H>=0;
	H--){if(this.charAt(H)==q9){s++;
	}else{return s;
	}}return s;
};
String.prototype.trimWithSuffix=function(maxLength,Z9){if(this.length<=maxLength){return this;
}if(Z9==undefined){Z9="...";
}var qr=this.substr(0,maxLength-Z9.length);
return qr+Z9;
};
ANvände UltraEdit

Sök och ersätt ; med ;^n (dvs ny rad efter varje semikolon)
sedan AutoIntendent.
Tog ca 30 s

Re: Dynamisk uppdatering av web-sidor.

Postat: 23 juni 2011, 16:18:51
av sodjan
> ANvände UltraEdit

Kör också UE (unlim upgrade license) och det var just vad jag hade
tänkt att testa. :-) Men OK, tack i alla fall.

> Koden i min länk ovan med klockan är däremot lagom för att få en uppfattning om hur det funkar och hur man gör.

Men det är fortfarande en poll/pull lösning som alltså ger trafik även
om det inte behövs (p.g.a att värderna på servern inte har ändrats).
Det är det som jag försöker komma ifrån och det är väl det som
push-lösningarna undviker.

Säg att jag har 20 klienter som visar samma data. Det blir lite skillnad på
att ha 20 st vanliga get/post anrop per sekund mot servern, mot att ha en
serverprocess som skickar ut samma data till 20 klienter samtidigt när det
behövs (kanske var 5-10 sekund ungefär). Problemet är det att samtidigt
som händelserna på servern kanske inträffar med 5-10 sek intervall, så
vill jag att bilden uppdateras utan "onödig" fördröjning, säg inom ca 1 sek.

Aja, får fundera vidare. Man har ju en sysslolös helg framför sig... :-)