Ik ben een back-office systeem in Javascript aan het schrijven. Gegevensuitwisseling met database verloopt via Ajax en PHP.
Voor elk user-interface onderdeel heb ik een class, bijvoorbeeld invoervelden, selecties, maar ook geavanceerdere dingen zoals een datum-picker en een interface om afbeeldingen te linken aan content. Elke ui heeft ook weer ui-objecten in zich, zo bestaat de ui om users toe te voegen uit een flinke verzameling invoervelden.
Het werkt allemaal prima.
Maar.. het aantal objecten wordt wel groot. Ik laad nu alle Javascript-files in via de html. Dat is voor de definitieve site niet wenselijk (veel te veel requests naar server) maar tijdens development wel gemakkelijk.
Ik moet een keuze maken voor als ik 'live' ga:
- Alle Javascript-bestanden in één groot bestand plaatsen
- Kleinere Javascript-bestanden handhaven, maar dan alleen laden als ze nodig zijn
Ik neig naar alles in één groot bestand, maar vreet dat geen geheugen. Ik heb namelik het idee dat klassen definiëren ook veel geheugen kost.
Bijvoorbeeld:
Code is fictief puur om te laten zien wat mijn overweging is.
Ik wil abstract klassen gebruiken. Dat gebeurt in Javascript met prototype. Om een prototype te geven moet ik van een abstract klasse bij overerving iedere keer een object maken om te voorkomen dat (in dit voorbeeld) de ui_invoerveld en ui_selectie elkaars methoden krijgen.
Stel ik heb een stuk of 30 ui-classes, wordt het geheugengebruik dan niet groot? Zelfs als ik geen objecten maak (een dialoog gebruikt maar een klein deel van de beschikbare ui-componenten), nemen de klassen al geheugen omdat bij de definitie van de overerving objecten worden gemaakt.
Als ik er voor zorg dat klassen van ui's alleen worden geladen als ze nodig zijn, dan is dat bezwaar weg, maar dan krijg je wel veel requests naar de server.
Wat is in dit geval de beste optie?
Voor elk user-interface onderdeel heb ik een class, bijvoorbeeld invoervelden, selecties, maar ook geavanceerdere dingen zoals een datum-picker en een interface om afbeeldingen te linken aan content. Elke ui heeft ook weer ui-objecten in zich, zo bestaat de ui om users toe te voegen uit een flinke verzameling invoervelden.
Het werkt allemaal prima.
Maar.. het aantal objecten wordt wel groot. Ik laad nu alle Javascript-files in via de html. Dat is voor de definitieve site niet wenselijk (veel te veel requests naar server) maar tijdens development wel gemakkelijk.
Ik moet een keuze maken voor als ik 'live' ga:
- Alle Javascript-bestanden in één groot bestand plaatsen
- Kleinere Javascript-bestanden handhaven, maar dan alleen laden als ze nodig zijn
Ik neig naar alles in één groot bestand, maar vreet dat geen geheugen. Ik heb namelik het idee dat klassen definiëren ook veel geheugen kost.
Bijvoorbeeld:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| // UI abstract class ui = function() { } ui.prototype.set_error = function(msg) { // code } ui.prototype.destroy = function() { // code } // UI-class voor invoerveld ui_invoerveld = function(jqo, params) { // constructor code } ui_invoerveld.prototype = new ui(); ui_invoerveld.prototype.select_all = function() { // code } ui_invoerveld.prototype.val = function(nieuw) { // code } // UI-class voor selectie ui_selectie = function(jqo, params) { // constructor code } ui_selectie.prototype = new ui(); ui_selectie.prototype.optie_toevoegen = function(waarde, tekst) { // code } |
Code is fictief puur om te laten zien wat mijn overweging is.
Ik wil abstract klassen gebruiken. Dat gebeurt in Javascript met prototype. Om een prototype te geven moet ik van een abstract klasse bij overerving iedere keer een object maken om te voorkomen dat (in dit voorbeeld) de ui_invoerveld en ui_selectie elkaars methoden krijgen.
Stel ik heb een stuk of 30 ui-classes, wordt het geheugengebruik dan niet groot? Zelfs als ik geen objecten maak (een dialoog gebruikt maar een klein deel van de beschikbare ui-componenten), nemen de klassen al geheugen omdat bij de definitie van de overerving objecten worden gemaakt.
Als ik er voor zorg dat klassen van ui's alleen worden geladen als ze nodig zijn, dan is dat bezwaar weg, maar dan krijg je wel veel requests naar de server.
Wat is in dit geval de beste optie?