{"action":"closed","issue":{"url":"https://api.github.com/repos/sandstorm-io/sandstorm/issues/564","labels_url":"https://api.github.com/repos/sandstorm-io/sandstorm/issues/564/labels{/name}","comments_url":"https://api.github.com/repos/sandstorm-io/sandstorm/issues/564/comments","events_url":"https://api.github.com/repos/sandstorm-io/sandstorm/issues/564/events","html_url":"https://github.com/sandstorm-io/sandstorm/issues/564","id":93879007,"number":564,"title":"wishlist: show a loading throbber for the time between grain launch and first HTTP reply","user":{"login":"zarvox","id":307325,"avatar_url":"https://avatars.githubusercontent.com/u/307325?v=3","gravatar_id":"","url":"https://api.github.com/users/zarvox","html_url":"https://github.com/zarvox","followers_url":"https://api.github.com/users/zarvox/followers","following_url":"https://api.github.com/users/zarvox/following{/other_user}","gists_url":"https://api.github.com/users/zarvox/gists{/gist_id}","starred_url":"https://api.github.com/users/zarvox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zarvox/subscriptions","organizations_url":"https://api.github.com/users/zarvox/orgs","repos_url":"https://api.github.com/users/zarvox/repos","events_url":"https://api.github.com/users/zarvox/events{/privacy}","received_events_url":"https://api.github.com/users/zarvox/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/sandstorm-io/sandstorm/labels/shell","name":"shell","color":"eb6420"}],"state":"closed","locked":false,"assignee":{"login":"jparyani","id":1595880,"avatar_url":"https://avatars.githubusercontent.com/u/1595880?v=3","gravatar_id":"","url":"https://api.github.com/users/jparyani","html_url":"https://github.com/jparyani","followers_url":"https://api.github.com/users/jparyani/followers","following_url":"https://api.github.com/users/jparyani/following{/other_user}","gists_url":"https://api.github.com/users/jparyani/gists{/gist_id}","starred_url":"https://api.github.com/users/jparyani/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jparyani/subscriptions","organizations_url":"https://api.github.com/users/jparyani/orgs","repos_url":"https://api.github.com/users/jparyani/repos","events_url":"https://api.github.com/users/jparyani/events{/privacy}","received_events_url":"https://api.github.com/users/jparyani/received_events","type":"User","site_admin":false},"milestone":null,"comments":1,"created_at":"2015-07-08T20:10:23Z","updated_at":"2015-07-11T20:07:16Z","closed_at":"2015-07-11T20:07:16Z","body":"Right now, some apps take a while to start up because they do migrations, or create databases, or scan thousands of directories, or do some otherwise expensive work on startup.  For instance, for the Piwik package I'm working on, grain launch to content in frame is over 6 seconds.  I intend to reduce this for Piwik, but it'd be nice if the experience were decent even if a third-party app is not the most efficient.\r\n\r\nIt would be nice if we showed some sort of \"Loading...\" spinner while the grain spins up and hid it as soon as the first request is completed.  I'm not sure if doing so is compatible with iframe sandboxing, though, since I think we then can't spy the iframe.onload.  Another approach would be to have the proxy emit some signal as it starts/completes proxying the first response to the frontend to hide the spinner, which could go over the Meteor socket.\r\n\r\n(sidenote: the fact that we have the disk usage number updating in realtime as the grain launches is actually quite helpful, since it shows the user that something is happening.  But the empty grain frame still feels empty.)"}}