Du bist nicht angemeldet. [Anmelden]
Seite 7 von 26 < 1 2 ... 5 6 7 8 9 ... 25 26 >
Optionen
Thema bewerten
Re: Fragen und Antworten * [Re: TobyB] - #2728677 - 15.04.2015, 09:47:26
djchrisnet
​Verified Prototype Hater

Registriert: 27.05.2006
Beiträge: 905
Ort: Rendsburg
Antwort auf: TobyB
Wenn ihr also Den Prototypen von Object erweitert habt, beispielweise weil ihr eine Bibliothek von irgenwoher eingebunden habt oder es gar selbst getan habt, dann wrde der for...in Loop hier ber diese Eigentschaften ebenfalls iterieren, was zu ungewnschten Nebeneffekten fhren kann.


das ist nur dann richtig, wenn man neue Methoden einfach ans Object "dranklatscht" statt sie ordentlich zu definieren

Dirty shit
Code:
if(!Object.prototype.size) {
	Object.prototype.size = function() {
		return Object.keys(this).length;
	}
}

nun wre die methode bei for(x in obj) dabei

Code:
if(!Object.prototype.size) {
	Object.defineProperty(Object.prototype, 'size', {
		enumerable:	false,
		configurable:	false,
		writable:		false,
		value: function() {
			return Object.keys(this).length;
		}
	});
}


Hierbei wird enumerable auf false gesetzt was einfach soviel heit wie "diese Methode nicht interieren", ist brigends standard bei Object.defineProperty

Der Code liee sich auch noch weiter krzen, da die settings aktuell default sind.
Code:
if(!Object.prototype.size) {
	Object.defineProperty(Object.prototype, 'size', {
		value: function() {
			return Object.keys(this).length;
		}
	});
}


Weitere Beispiele dazu gibts im Framework unter Tools
_________________________
AppEntwickler
Prototype Hater



[zum Seitenanfang]  
Re: Fragen und Antworten [Re: djchrisnet] - #2728683 - 15.04.2015, 12:05:40
TobyB
​Knuddelsteam

Registriert: 21.11.2003
Beiträge: 6.837
Ich kann dir aus Erfahrung sagen, die wenigstens Frameworks die man sich mal von irgendwo her holt machen Gebrauch von Object.defineProperty() ... leider. Das liegt daran, dass (mittlerweile weniger) bis vor leider gar nicht all zu langer Zeit zu wenige Browser dieses Feature untersttzt haben. Daher ist noch viel zu viel Code in Verwendung, der es nicht benutzt, oder auch nur beschissen polyfillt.

Und die .forEach() Variante funktioniert fr alle Flle wunderbar.

Vgl.:
Code:
var arr = new Array(5);
arr[0] = 0;
arr[3] = 3;
arr.forEach(function(){
	console.log('each', arguments);
});

und
Code:
var arr = new Array(5);
arr.forEach(function(){
	console.log('each', arguments);
});
_________________________
There is no good without evil, but evil must not be allowed to flourish.
There is passion, yet peace; serenity, yet emotion; chaos, yet order.

[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Enrico-nrp] - #2729774 - 23.04.2015, 11:27:55
Vampiric Desire
​ChannelMaster

Registriert: 15.09.2013
Beiträge: 1.681
Ich habe gerade angefangen die User-Klasse fr Spot It mit Prototype zu erweitern um wiederkehrenden Code nicht immer wieder neu zu schreiben.

Code:
User.prototype.getGamePoints = function() {
	var persis = this.getPersistence();
	return persis.getNumber("points",0);
}


Relativ unwichtig, aber Codetechnisch interessant. getPersistence() erzeugt immer ein neues Object, es wird nicht die Referenz gespeichert. Dies kann gerade bei hufigen Anwendungen unntig Zeit/Leistung kosten. Daher sollte man die Referenz zur Persistenz speicher. Daraus wird dann:


Code:
User.prototype.myPersis = null;
User.prototype.getMyPersistence = function() {
	if(this.myPersis == null)
		this.myPersis = this.getPersistence();
	return this.myPersis;
}

User.prototype.getGamePoints = function() {
	var persis = this.getMyPersistence();
	return persis.getNumber("points",0);
}



Bearbeitet von Vampiric Desire (23.04.2015, 11:29:31)
_________________________
/apps install 30559674.ChannelMaster

[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Vampiric Desire] - #2729844 - 23.04.2015, 18:48:03
Bizarrus
​Bizzi is activated.

Registriert: 29.07.2006
Beiträge: 2.581
Ort: Dortmund
Die Referenzierung ist eher Irrelevant und hat keinen Einfluss auf die Geschwindigkeit.
Viel mehr entstehen mglicherweise Performanceeinbussen wenn 5.000x hintereinander die getter/setter gecallt werden, einfach weil hier die Datenbankoperationen stattfinden.

Besser wre es wenn du hingehen wrdest und ein Globales Objekt erzeugst wo dann die Daten zwischengehalten werden und beim onJoin/onLeave dann erst die Operationen durchfhrst.
_________________________
Bot.public('I love >features/james-exchange/ft_james-exchange_surprised.gif<>James|/w "<');

[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Bizarrus] - #2729859 - 23.04.2015, 19:38:21
Vampiric Desire
​ChannelMaster

Registriert: 15.09.2013
Beiträge: 1.681
Antwort auf: Bizarrus

Besser wre es wenn du hingehen wrdest und ein Globales Objekt erzeugst wo dann die Daten zwischengehalten werden und beim onJoin/onLeave dann erst die Operationen durchfhrst.


Dir ist bekannt dass du bei jedem getUser/Event ein neues User Objekt bekommst, diese also nicht Global beim User speichern kannst - so dass du so oder so jede menge Memory verschwendest wenn wir von zig Usern reden?

Und dass es keine Zeit kosten wrde ist auch Bullshit, denn es dauert natrlich seine Zeit bis ein neues Objekt von der Persistence generiert wird. und der Funktionaufruf des Getters ist da im Gegensatz dazu geringfgig. Was aber stimmt ist, dass man die Werte beim User zwischenspeichern sollte, sofern man 500x die Funktion aufrufen will in einem Event
_________________________
/apps install 30559674.ChannelMaster

[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Vampiric Desire] - #2729931 - 24.04.2015, 08:20:48
TobyB
​Knuddelsteam

Registriert: 21.11.2003
Beiträge: 6.837
Ihr redet hier von Performance usw ... habt ihr denn gemessen was genau an der Arbeit mit der Persistence nun langsam ist? also habt ihr belastbare Zahlen, oder ist das nun alles theoretisches Gerede?
_________________________
There is no good without evil, but evil must not be allowed to flourish.
There is passion, yet peace; serenity, yet emotion; chaos, yet order.

[zum Seitenanfang]  
Re: Fragen und Antworten [Re: TobyB] - #2729935 - 24.04.2015, 09:44:17
djchrisnet
​Verified Prototype Hater

Registriert: 27.05.2006
Beiträge: 905
Ort: Rendsburg
die performance wurde zuletzt nochmal massiv gesteigert als UserPersistenceNumbers eingefhrt wurde sodass die Performance im letzlich ausser acht gelassen werden kann. wir reden hier von 1-2ms fr mehrfache Additionen (ja getestet unter realen bedingungen)
_________________________
AppEntwickler
Prototype Hater



[zum Seitenanfang]  
Re: Fragen und Antworten [Re: djchrisnet] - #2732704 - 08.05.2015, 13:10:13
Vampiric Desire
​ChannelMaster

Registriert: 15.09.2013
Beiträge: 1.681
Als kleines Snippet:
Code:
Card.Rarity = Object.freeze({
    COMMON: 0,
    UNCOMMON: 1,
    RARE: 2,
    LEGENDARY: 3
});


Ab und zu will man ENUMs definieren, die aber spter nicht aus vesehen verndert werden drfen. Hierbei hilft Object.freeze()
Nachdem ein Object gefreezed wurde, lsst es nicht mehr verndern.

Sollte euer Object aus mehreren Objecten bestehen lassen sich die Subelemente aber noch ndern. Hier sollte man sofern man es verhindern will, diese Objekte ebenfalls gefreezed werden. Dies lsst sich einfach per Rekursion und Object Freeze bewerkstelligen.
_________________________
/apps install 30559674.ChannelMaster

[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Vampiric Desire] - #2732707 - 08.05.2015, 13:44:24
djchrisnet
​Verified Prototype Hater

Registriert: 27.05.2006
Beiträge: 905
Ort: Rendsburg
oder man benutzt einfach eine Konstante

Beispiel:

Code:
var abc = 'write/read';
const = def = 'read_only';
_________________________
AppEntwickler
Prototype Hater



[zum Seitenanfang]  
Re: Fragen und Antworten [Re: djchrisnet] - #2732708 - 08.05.2015, 13:52:57
Vampiric Desire
​ChannelMaster

Registriert: 15.09.2013
Beiträge: 1.681
Antwort auf: djchrisnet
oder man benutzt einfach eine Konstante



Code:
const abc = { a: 1, b:2 } >>>> Object {a: 1, b: 2}
abc.a = 3 >>> Object {a: 3, b: 2}
abc.d = 1 >>> Object {a: 3, b: 2, d: 1}



Scheint nicht fr Objekte zu funktionieren :-D
_________________________
/apps install 30559674.ChannelMaster

[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Vampiric Desire] - #2732777 - 08.05.2015, 21:14:35
Ironist

Registriert: 08.04.2003
Beiträge: 1.260
Ort: Deutschland, Dachau
Antwort auf: Vampiric Desire
Antwort auf: djchrisnet
oder man benutzt einfach eine Konstante



Code:
const abc = { a: 1, b:2 } >>>> Object {a: 1, b: 2}
abc.a = 3 >>> Object {a: 3, b: 2}
abc.d = 1 >>> Object {a: 3, b: 2, d: 1}



Scheint nicht fr Objekte zu funktionieren :-D


Nun ja, dein Beispiel ist nicht ganz korrekt.

Code:
const abc = { a: 1, b:2 } >>>> Object {a: 1, b: 2}
abc = 'Foo'; >>>> code breaks


[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Ironist] - #2732778 - 08.05.2015, 21:31:28
Vampiric Desire
​ChannelMaster

Registriert: 15.09.2013
Beiträge: 1.681
Was prinzipiell richtig ist Iro, ich aber Speziell auf Objekte und ihren Elementen eingegangen bin und dies nicht ohne erhhten schreibaufwand zu realisieren wre ber const.
_________________________
/apps install 30559674.ChannelMaster

[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Vampiric Desire] - #2732996 - 10.05.2015, 18:43:53
Aquacold
Forumuser

Registriert: 23.04.2015
Beiträge: 7
Heyho =),

Wre jemand so nett und wrde mir das mit dem Speichern von Usersachen (z.B Points von Spielen) und auch laden erklren?

Ich blicke da irgendwie nicht durch...

Wrde mich freuen, wenn sich da jemand findet, der mir das mal ein wenig erklren knnte..


Freundliche Gre,

[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Aquacold] - #2733025 - 10.05.2015, 21:10:47
Ironist

Registriert: 08.04.2003
Beiträge: 1.260
Ort: Deutschland, Dachau
Antwort auf: Microlost
Heyho =),

Wre jemand so nett und wrde mir das mit dem Speichern von Usersachen (z.B Points von Spielen) und auch laden erklren?

Ich blicke da irgendwie nicht durch...

Wrde mich freuen, wenn sich da jemand findet, der mir das mal ein wenig erklren knnte..


Freundliche Gre,


user.getPersistence().setNumber('points', 3);
var points = user.getPersistence().getNumber('points');


http://developer.knuddels.de/docs/classes/UserPersistence.html#method_setNumber

[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Ironist] - #2733068 - 10.05.2015, 23:37:39
Aquacold
Forumuser

Registriert: 23.04.2015
Beiträge: 7
Antwort auf: Ironist
Antwort auf: Microlost
Heyho =),

Wre jemand so nett und wrde mir das mit dem Speichern von Usersachen (z.B Points von Spielen) und auch laden erklren?

Ich blicke da irgendwie nicht durch...

Wrde mich freuen, wenn sich da jemand findet, der mir das mal ein wenig erklren knnte..


Freundliche Gre,


user.getPersistence().setNumber('points', 3);
var points = user.getPersistence().getNumber('points');


http://developer.knuddels.de/docs/classes/UserPersistence.html#method_setNumber


Danke,

Ich hatte es eigtl genau so drinne, hatte jedoch das Speichern an die falsche Stelle platziert, womit es natrlich nicht aufgerufen wurde.. (Auer man war im Spiel)..


[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Aquacold] - #2734418 - 20.05.2015, 02:12:31
Dave20009
​Der King!

Registriert: 27.07.2006
Beiträge: 1.225
Ort: Kniglicher Palast
Ich habe mal eine Frage: Ich habe ein Code (siehe unten) in meine App eingebaut mit der alle gewisse Zeit ffentliche Nachrichten vom Bot gesendet werden, so weit so gut, aber sobald die Zeit um ist und die erste Nachricht versendet wurde, fngt pltzlich das Bot an zu spinnen und sendet anstatt alle 20 und 30 Minuten, in 3-5 Minuten intervall und das fngt dann schon leicht zu spammen an aber woran liegt das? Das nervt nicht nur mich, sondern auch andere anwesende User enorm.

Und ist es irgendwie mglich, eine art "pool" zu erstellen? Also das der Bot sich z.B. alle 30 min immer eine andere Message raussucht und diese ffentlich postet? So wrde ich mir ein hsslichen Code mit milliarden arrays wie unten Sparen und so wrde immer zu einer festen Zeit eine andere Message kommen und nicht nach 20 min die, 10 min spter die andere usw. Wenn es mglich ist, wie programmier ich das? Ich habe irgendwie keine Ahnung, da meine Javascript kenntnisse noch lange nicht dem eines Profi entsprechen...

Warnung! Spoiler!
Code:
var dev = KnuddelsServer.getAppDeveloper();
	
	rmsg = [
		'Du hast einen _Bug_ gefunden? Dann schreibe  >sm_classicII_01...b.pw_29.ph_15.gif< _BB>_hdem Entwickler eine Nachricht|/m '+dev+'<r_.'
	];
	intid = setInterval(function() {
		KnuddelsServer.getDefaultBotUser().sendPublicMessage(rmsg[Math.floor(Math.random() * rmsg.length)]);
	}, 30*60000);
	
	KnuddelsServer.getPersistence().setNumber('msgint', intid);

//Ausgabe 2
var dev = KnuddelsServer.getAppDeveloper();

	amsg = [
		'Du magst _diesen_ Channel? Dann mach ihn jetzt  >sm_sign_mag-ich...b.pw_29.ph_15.gif< _BB>_hzu deinem LieblingsMyChannel|/edit setlmc<r_.'
	];
	intid = setInterval(function() {
		KnuddelsServer.getDefaultBotUser().sendPublicMessage(amsg[Math.floor(Math.random() * amsg.length)]);
	}, 20*60000);
	
	KnuddelsServer.getPersistence().setNumber('msgint', intid);


Bearbeitet von Dave20009 (20.05.2015, 02:13:06)
_________________________
Ich werde immer sagen, was ich denke. Wer die Wahrheit nicht vertrgt, soll mir nicht meine Zeit stehlen.


[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Dave20009] - #2734432 - 20.05.2015, 09:20:00
Ironist

Registriert: 08.04.2003
Beiträge: 1.260
Ort: Deutschland, Dachau
Hallo Dave,

ich glaube du machst es dir ein bisschen schwer. So wie ich deine Anforderung verstanden habe wrde ich das ein bisschen anders lsen...


Warnung! Spoiler!
Code:
App.onAppStart = function()
{
    var messages = ['Nachricht1', 'Nachricht2', 'Nachricht3'];
    const MESSAGE_INTERVAL = 1000 * 60 * 30;

    setInterval(function() {
        var randomMessage = RandomOperations.getRandomObject(messages);
        KnuddelsServer.getDefaultBotUser().sendPublicMessage(randomMessage);
    }, MESSAGE_INTERVAL);
}


Knuddelige Gre
Ironist

[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Ironist] - #2734436 - 20.05.2015, 09:41:31
Bizarrus
​Bizzi is activated.

Registriert: 29.07.2006
Beiträge: 2.581
Ort: Dortmund
Im Notfall kannst du dir auch mal SpamMessages anschauen, ist OpenSource und du kannst dir hier einiges abschauen oder auch verndern :-)
_________________________
Bot.public('I love >features/james-exchange/ft_james-exchange_surprised.gif<>James|/w "<');

[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Ironist] - #2734520 - 20.05.2015, 18:39:00
Dave20009
​Der King!

Registriert: 27.07.2006
Beiträge: 1.225
Ort: Kniglicher Palast
Antwort auf: Ironist
Hallo Dave,

ich glaube du machst es dir ein bisschen schwer.

Ja, ich mache es mir irgendwie immer schwerer als es ist, ich bin ein uerst komplizierter Mensch, der immer das schwierigste versucht obwohl es auch wesentlich einfacher geht :/ hatte mir letzte nacht auch so berlegt es mal mit var messages zu versuchen, weil mir das am logischsten erschien aber war mir nicht ganz sicher, deswegen hab ich es erstmal gelassen aber mit dem Code da von dir Iro, hat es nun endlich funktioniert und das blde gespamme hat aufgehrt :) deswegen Danke an Iro und Bizzi.


Bearbeitet von Dave20009 (20.05.2015, 18:39:19)
_________________________
Ich werde immer sagen, was ich denke. Wer die Wahrheit nicht vertrgt, soll mir nicht meine Zeit stehlen.


[zum Seitenanfang]  
Re: Fragen und Antworten [Re: Dave20009] - #2734636 - 21.05.2015, 13:11:55
LordLex
Nicht registriert


Hi,

Gibt es in JS eine Short-IF wie unter PHP?

var count = (null === param ? BotObject.getKnuddelAmount():param);

Oder muss ich die if/else bauen?

Danke schonmal,

Lg Lex

[zum Seitenanfang]  
Seite 7 von 26 < 1 2 ... 5 6 7 8 9 ... 25 26 >


Moderator(en):  Misterious