Here are my findings after profiling the loading of Roboto-Regular.ufo.
- the Lib.update(...) call is expensive (4.9%), mainly because of postNotification and _set_dirty
- creating Lib is expensive, mainly because of beginSelfNotificationObservation (3.4%), _get_dispatcher is a large contributor of the time spent (2.5%) as it does a chain of calls from getfont to getlayerset to getlayer
- _set_dirty (0.5%)