I’m trying to find a document that describes Atom’s high-level architecture, something that explains the relationship between the embedded “node” that exists somewhere inside Atom, the WebKit view that is obviously the UI layer and how these things tie together. Something analagous to the Chrome Extension “Overview” (https://developer.chrome.com/extensions/overview). If I googled wrong or searched wrong for using the wrong terms, forgive me!
I am curious about this because Atom “hangs” routinely for me. I’ve never had it happen out-of-the-box, but once I start making it useful to me with a few packages, it starts to occasionally stall out. This indicates to me that plugin code is allowed to run inside the “window” (or in Node) in such a way that runaway loops in some plugin somewhere can cause the whole system to come to a halt. Also, when this occurs I don’t get the option to “shut down the plugin”, or whatever. If atom were a web application that I was writing, I would force plugins into “web workers”, and expose the API in the form of messages, so that if they didn’t respond to a “hey, what’s up” in a timely way, I could prompt the user with “Oh, plugin was unresponsive, would you like to kill it?”, and not interrupt their typing. I don’t really know what the round trip time for this kind of messaging architecture is, so it might be “too slow” for typing-interactive packages, but building the “live” part and the “asynchronous” part separately would do a lot to fix this problem. I also can’t find any documentation for “standard” ways of running random JS off of the UI process, just ways of running normal system processes.
Anyway - thanks for an editor so good that I am inspired to improve it!