QmlWeb/Qml.js/Design Questions and Decisions

From KDE Community Wiki
< QmlWeb‎ | Qml.js
Revision as of 08:44, 4 March 2015 by Akreuzkamp (talk | contribs)

This page intends to collect questions about software architecute and software design, pros and cons as well as the decisions made on the topic.

Runtime Architecture

Getter/Setter Technique

Possibilities:

C++ style getters and setters
this.width(); and this.setWidth(width);
  • C++ style
  • fast in all browsers
Transparent getter/setter using Object.defineProperty
Object.defineProperty(this, "width", { get function(){}, set: function(){} });
  • nice while debugging
  • worse performance in IE
  • horrible performance in Firefox
Transparent getter/setter using literal notation
  • nice while debugging
  • worse performance in IE
  • you can't use object literals and inheritance at the same time in a standard compliant manner


Benchmark: http://jsperf.com/getter-setter/7

Decision: Use C++ style getters and setters

Storing properties

As we're using setters and getters in either way, we need to store the actual property value separated. There're multiple possibilities for that:

Private member using closures
Private member using like _width
Using property objects and direct object references
Using property indexes and a properties array
  • If done right, it might provide weak references
Using a properties object and access it per name
  • Bad bad bad performance