{"action":"created","issue":{"url":"https://api.github.com/repos/freedomjs/freedom/issues/271","labels_url":"https://api.github.com/repos/freedomjs/freedom/issues/271/labels{/name}","comments_url":"https://api.github.com/repos/freedomjs/freedom/issues/271/comments","events_url":"https://api.github.com/repos/freedomjs/freedom/issues/271/events","html_url":"https://github.com/freedomjs/freedom/issues/271","id":76445486,"number":271,"title":"One-way void method calls for performance","user":{"login":"bemasc","id":191945,"avatar_url":"https://avatars.githubusercontent.com/u/191945?v=3","gravatar_id":"","url":"https://api.github.com/users/bemasc","html_url":"https://github.com/bemasc","followers_url":"https://api.github.com/users/bemasc/followers","following_url":"https://api.github.com/users/bemasc/following{/other_user}","gists_url":"https://api.github.com/users/bemasc/gists{/gist_id}","starred_url":"https://api.github.com/users/bemasc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bemasc/subscriptions","organizations_url":"https://api.github.com/users/bemasc/orgs","repos_url":"https://api.github.com/users/bemasc/repos","events_url":"https://api.github.com/users/bemasc/events{/privacy}","received_events_url":"https://api.github.com/users/bemasc/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/freedomjs/freedom/labels/enhancement","name":"enhancement","color":"84b6eb"},{"url":"https://api.github.com/repos/freedomjs/freedom/labels/in%20progress","name":"in progress","color":"ededed"}],"state":"open","locked":false,"assignee":{"login":"bemasc","id":191945,"avatar_url":"https://avatars.githubusercontent.com/u/191945?v=3","gravatar_id":"","url":"https://api.github.com/users/bemasc","html_url":"https://github.com/bemasc","followers_url":"https://api.github.com/users/bemasc/followers","following_url":"https://api.github.com/users/bemasc/following{/other_user}","gists_url":"https://api.github.com/users/bemasc/gists{/gist_id}","starred_url":"https://api.github.com/users/bemasc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bemasc/subscriptions","organizations_url":"https://api.github.com/users/bemasc/orgs","repos_url":"https://api.github.com/users/bemasc/repos","events_url":"https://api.github.com/users/bemasc/events{/privacy}","received_events_url":"https://api.github.com/users/bemasc/received_events","type":"User","site_admin":false},"milestone":null,"comments":4,"created_at":"2015-05-14T18:22:42Z","updated_at":"2015-05-18T17:39:45Z","closed_at":null,"body":"Prototype at https://github.com/freedomjs/freedom/tree/bemasc-oneway\r\n\r\nCurrently, every freedom module method call requires two IPCs, one for the call and one for the return value.  However, there are many cases where the caller of a method wishes to ignore the return value, and does not care to be notified after the method succeeds.  When these method calls are on a performance-critical path, the unnecessary response event can represent a significant inefficiency.\r\n\r\nThe above prototype, tested with uproxy-churn, increases throughput by ~12%.\r\n\r\nTODO:\r\n * Figure out how to handle errors.\r\n * Determine an appropriate API."},"comment":{"url":"https://api.github.com/repos/freedomjs/freedom/issues/comments/103145053","html_url":"https://github.com/freedomjs/freedom/issues/271#issuecomment-103145053","issue_url":"https://api.github.com/repos/freedomjs/freedom/issues/271","id":103145053,"user":{"login":"mollyling","id":4954150,"avatar_url":"https://avatars.githubusercontent.com/u/4954150?v=3","gravatar_id":"","url":"https://api.github.com/users/mollyling","html_url":"https://github.com/mollyling","followers_url":"https://api.github.com/users/mollyling/followers","following_url":"https://api.github.com/users/mollyling/following{/other_user}","gists_url":"https://api.github.com/users/mollyling/gists{/gist_id}","starred_url":"https://api.github.com/users/mollyling/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mollyling/subscriptions","organizations_url":"https://api.github.com/users/mollyling/orgs","repos_url":"https://api.github.com/users/mollyling/repos","events_url":"https://api.github.com/users/mollyling/events{/privacy}","received_events_url":"https://api.github.com/users/mollyling/received_events","type":"User","site_admin":false},"created_at":"2015-05-18T17:39:45Z","updated_at":"2015-05-18T17:39:45Z","body":"At some point you'll want to know that the messages got processed by the other side, and it's how you encapsulate an async api inside of a synchronous one.  For example, say I want to issue a bunch of messages that modify a DOM tree.  I don't want to wait for each mutation.  Instead, I'd like to just issue them, do anything else I cared about, and then make sure that the changes are in before returning from my own promise."}}