Wie man sich userIds NICHT merken sollte und warum

In der letzten Woche habe ich erklärt, warum man zur Referenzierung von Nutzern userIds und nicht Nicknamen speichern sollte. Heute geht es darum, wie man userIds nicht speichern sollte.

 

Fällt dir irgendetwas Besonderes auf, wenn du diese Zeilen Code siehst?

this.onUserJoined = function(user)
{
    var userId = user.getUserId();
    usersJoined[userId] = user.getNick();
}

Auf den ersten Blick sieht daran gar nichts schlimm aus. In einem Objekt werden sich alle User gemerkt, die bereits im Channel waren.

Die Frage ist, wie die Variable userJoined definiert ist. Ist sie ein Array oder ein beliebiges anderes Object?

Warum ist das so wichtig?

In JavaScript-Objekten lassen sich beliebige Key-Value-Paare merken. Das ist gutartig und findet oft sinnvolle Verwendung. Wenn das Objekt  ein Array und der Key eine Zahl ist, dann kommt es aber zu Problemen.

Arrays nutzen diese Methode, um das sich selbst zu befüllen.

var obj = {};
obj[5000] = 'Test';
// Es gibt nun ein Object mit einem Eintrag für den Key 5000 

var arr = [];
arr[5000] = 'Test';
// Es gibt nun ein Array mit 5000 leeren Einträgen (Index 0 - 4999)
// und einem Eintrag 'Test' an Index 5000.

 

Das Array bläht sich auf und ist riesig. Dies ist aus mehreren Gründen schlecht:

  • Arbeitsspeicher – Deiner App stehen maximal 10MB zur Verfügung
  • Persistenz – Deiner App stehen maximal 100MB zur Verfügung
  • Datenversand an User Interface – Pro Event können maximal 10.000 Zeichen gesendet werden

 

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s