Regarding your suggestion, I think it might be a little too costly to have separate processes, as in one per widget.
i did some googling and my idea is not new.