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 w├╝rde der for...in Loop hier ├╝ber diese Eigentschaften ebenfalls iterieren, was zu ungew├╝nschten Nebeneffekten f├╝hren 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 w├Ąre 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 hei├čt wie "diese Methode nicht interieren", ist ├╝brigends standard bei Object.defineProperty

Der Code lie├če sich auch noch weiter k├╝rzen, 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.835
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 unterst├╝tzt haben. Daher ist noch viel zu viel Code in Verwendung, der es nicht benutzt, oder auch nur beschissen polyfillt.

Und die .forEach() Variante funktioniert f├╝r alle F├Ąlle 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 f├╝r 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 h├Ąufigen Anwendungen unn├Âtig 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 m├Âglicherweise Performanceeinbussen wenn 5.000x hintereinander die getter/setter gecallt werden, einfach weil hier die Datenbankoperationen stattfinden.

Besser w├Ąre es wenn du hingehen w├╝rdest und ein Globales Objekt erzeugst wo dann die Daten zwischengehalten werden und beim onJoin/onLeave dann erst die Operationen durchf├╝hrst.
_________________________
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 w├Ąre es wenn du hingehen w├╝rdest und ein Globales Objekt erzeugst wo dann die Daten zwischengehalten werden und beim onJoin/onLeave dann erst die Operationen durchf├╝hrst.


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 w├╝rde ist auch Bullshit, denn es dauert nat├╝rlich seine Zeit bis ein neues Objekt von der Persistence generiert wird. und der Funktionaufruf des Getters ist da im Gegensatz dazu geringf├╝gig. 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.835
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 eingef├╝hrt wurde sodass die Performance im letzlich ausser acht gelassen werden kann. wir reden hier von 1-2ms f├╝r 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 sp├Ąter nicht aus vesehen ver├Ąndert werden d├╝rfen. Hierbei hilft Object.freeze()
Nachdem ein Object gefreezed wurde, l├Ąsst es nicht mehr ver├Ąndern.

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 l├Ąsst 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 f├╝r 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 f├╝r 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 erh├Âhten schreibaufwand zu realisieren w├Ąre ├╝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 =),

W├Ąre jemand so nett und w├╝rde mir das mit dem Speichern von Usersachen (z.B Points von Spielen) und auch laden erkl├Ąren?

Ich blicke da irgendwie nicht durch...

W├╝rde mich freuen, wenn sich da jemand findet, der mir das mal ein wenig erkl├Ąren k├Ânnte..


Freundliche Gr├╝├če,

[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 =),

W├Ąre jemand so nett und w├╝rde mir das mit dem Speichern von Usersachen (z.B Points von Spielen) und auch laden erkl├Ąren?

Ich blicke da irgendwie nicht durch...

W├╝rde mich freuen, wenn sich da jemand findet, der mir das mal ein wenig erkl├Ąren k├Ânnte..


Freundliche Gr├╝├če,


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 =),

W├Ąre jemand so nett und w├╝rde mir das mit dem Speichern von Usersachen (z.B Points von Spielen) und auch laden erkl├Ąren?

Ich blicke da irgendwie nicht durch...

W├╝rde mich freuen, wenn sich da jemand findet, der mir das mal ein wenig erkl├Ąren k├Ânnte..


Freundliche Gr├╝├če,


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 nat├╝rlich nicht aufgerufen wurde.. (Au├čer 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: K├Âniglicher 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, f├Ąngt pl├Âtzlich das Bot an zu spinnen und sendet anstatt alle 20 und 30 Minuten, in 3-5 Minuten intervall und das f├Ąngt 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 m├Âglich, 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 w├╝rde ich mir ein h├Ąsslichen Code mit milliarden arrays wie unten Sparen und so w├╝rde immer zu einer festen Zeit eine andere Message kommen und nicht nach 20 min die, 10 min sp├Ąter die andere usw. Wenn es m├Âglich 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 vertr├Ągt, 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 w├╝rde ich das ein bisschen anders l├Âsen...


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 Gr├╝├če
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 ver├Ąndern :-)
_________________________
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: K├Âniglicher 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 ├Ąu├čerst 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 bl├Âde gespamme hat aufgeh├Ârt :) 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 vertr├Ągt, 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