{"action":"created","issue":{"url":"https://api.github.com/repos/facebook/AsyncDisplayKit/issues/285","labels_url":"https://api.github.com/repos/facebook/AsyncDisplayKit/issues/285/labels{/name}","comments_url":"https://api.github.com/repos/facebook/AsyncDisplayKit/issues/285/comments","events_url":"https://api.github.com/repos/facebook/AsyncDisplayKit/issues/285/events","html_url":"https://github.com/facebook/AsyncDisplayKit/pull/285","id":56474936,"number":285,"title":"Custom Ranges Mechanism","user":{"login":"rnystrom","id":739696,"avatar_url":"https://avatars.githubusercontent.com/u/739696?v=3","gravatar_id":"","url":"https://api.github.com/users/rnystrom","html_url":"https://github.com/rnystrom","followers_url":"https://api.github.com/users/rnystrom/followers","following_url":"https://api.github.com/users/rnystrom/following{/other_user}","gists_url":"https://api.github.com/users/rnystrom/gists{/gist_id}","starred_url":"https://api.github.com/users/rnystrom/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rnystrom/subscriptions","organizations_url":"https://api.github.com/users/rnystrom/orgs","repos_url":"https://api.github.com/users/rnystrom/repos","events_url":"https://api.github.com/users/rnystrom/events{/privacy}","received_events_url":"https://api.github.com/users/rnystrom/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":3,"created_at":"2015-02-04T03:22:56Z","updated_at":"2015-02-19T01:16:04Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/facebook/AsyncDisplayKit/pulls/285","html_url":"https://github.com/facebook/AsyncDisplayKit/pull/285","diff_url":"https://github.com/facebook/AsyncDisplayKit/pull/285.diff","patch_url":"https://github.com/facebook/AsyncDisplayKit/pull/285.patch"},"body":"This PR introduces the concept of the \"Preload Range\" which is defaulted to 2 screens trailing and leading of the current visible range (e.g. the nodes on the screen). Included in this update:\r\n\r\n- Preload range concept implemented into the `ASLayoutController`, `ASFlowLayoutController`, `ASRangeController`, `ASTableView`, and `ASCollectionView`\r\n- `fetchExternalContent` and `purgeFetchedContent` APIs to fetch and destroy content that is expensive to fetch\r\n- `ASNetworkImageNode` to unload its fetched contents in the new `purgeFetchedContents` method"},"comment":{"url":"https://api.github.com/repos/facebook/AsyncDisplayKit/issues/comments/74983124","html_url":"https://github.com/facebook/AsyncDisplayKit/pull/285#issuecomment-74983124","issue_url":"https://api.github.com/repos/facebook/AsyncDisplayKit/issues/285","id":74983124,"user":{"login":"rnystrom","id":739696,"avatar_url":"https://avatars.githubusercontent.com/u/739696?v=3","gravatar_id":"","url":"https://api.github.com/users/rnystrom","html_url":"https://github.com/rnystrom","followers_url":"https://api.github.com/users/rnystrom/followers","following_url":"https://api.github.com/users/rnystrom/following{/other_user}","gists_url":"https://api.github.com/users/rnystrom/gists{/gist_id}","starred_url":"https://api.github.com/users/rnystrom/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rnystrom/subscriptions","organizations_url":"https://api.github.com/users/rnystrom/orgs","repos_url":"https://api.github.com/users/rnystrom/repos","events_url":"https://api.github.com/users/rnystrom/events{/privacy}","received_events_url":"https://api.github.com/users/rnystrom/received_events","type":"User","site_admin":false},"created_at":"2015-02-19T01:16:04Z","updated_at":"2015-02-19T01:16:04Z","body":"WIP, please do not merge.\r\n\r\nTodo:\r\n\r\n- Investigate if we still need [discardNode](https://github.com/facebook/AsyncDisplayKit/blob/master/AsyncDisplayKit/Details/ASRangeController.mm#L91-103). Killing it is ideal, or at the least moving it into `ASRenderRangeDelegate`\r\n- Figure out if we need `render` to counterbalance `clearRendering`\r\n- Profile `ASNetworkImageNode` and `ASMultiplexImageNode` to make sure that they aren't over-fetching whether or not they are in a range\r\n- Test w/ Kittens and Multiplex example projects\r\n- Unit tests?"}}