{"action":"created","issue":{"url":"https://api.github.com/repos/InteractiveAdvertisingBureau/openvv/issues/120","repository_url":"https://api.github.com/repos/InteractiveAdvertisingBureau/openvv","labels_url":"https://api.github.com/repos/InteractiveAdvertisingBureau/openvv/issues/120/labels{/name}","comments_url":"https://api.github.com/repos/InteractiveAdvertisingBureau/openvv/issues/120/comments","events_url":"https://api.github.com/repos/InteractiveAdvertisingBureau/openvv/issues/120/events","html_url":"https://github.com/InteractiveAdvertisingBureau/openvv/issues/120","id":159325064,"number":120,"title":"Prefer an IntersectionObserver approach to viewability use cases (e.g. Viewable Impression)","user":{"login":"KenjiBaheux","id":6354698,"avatar_url":"https://avatars.githubusercontent.com/u/6354698?v=3","gravatar_id":"","url":"https://api.github.com/users/KenjiBaheux","html_url":"https://github.com/KenjiBaheux","followers_url":"https://api.github.com/users/KenjiBaheux/followers","following_url":"https://api.github.com/users/KenjiBaheux/following{/other_user}","gists_url":"https://api.github.com/users/KenjiBaheux/gists{/gist_id}","starred_url":"https://api.github.com/users/KenjiBaheux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KenjiBaheux/subscriptions","organizations_url":"https://api.github.com/users/KenjiBaheux/orgs","repos_url":"https://api.github.com/users/KenjiBaheux/repos","events_url":"https://api.github.com/users/KenjiBaheux/events{/privacy}","received_events_url":"https://api.github.com/users/KenjiBaheux/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2016-06-09T04:15:39Z","updated_at":"2016-12-06T04:41:08Z","closed_at":"2016-12-06T04:41:08Z","body":"Hi,\n\nThis is Kenji Baheux from the web platform team in Chrome.\nWe've been working on a new API called **IntersectionObserver** for viewability use cases.\nIt's available in Chrome 51.\n\nEssentially, IntersectionObservers let you know when an observed element enters or exits the browser’s viewport or any other area of interest.\n\n**Resources**\n- [Google Developer web Update article](https://developers.google.com/web/updates/2016/04/intersectionobserver?hl=en)\n- [Explainer](https://github.com/WICG/IntersectionObserver/blob/gh-pages/explainer.md) and [Spec](http://rawgit.com/WICG/IntersectionObserver/master/index.html)\n- [blog post](http://blog.chromium.org/2016/05/new-apis-to-help-developers-improve.html))\n\n**Why IntersectionObserver should the preferred approach**\nThe current approach of polling every 100ms, with or without smart mitigations such as listening for scroll events, is inherently inefficient and a performance footgun (e.g inopportune calls to [functions that lead to layout trashing](https://gist.github.com/paulirish/5d52fb081b3570c81e3a)).\n\nTo make this more concrete, here is a recent example.\nA couple of days ago, this tweet by John Gruber caught my attention:\n_\"One Chrome tab open to Forbes: CPU shot up to 77% and iMac’s fan came on for first time in weeks. Shocker that content blockers are popular.\"_ - John Gruber.\n\nI did a [deep dive](https://docs.google.com/presentation/d/1172haFf9Aw8Abpyxgx9cpTs8cXQFBvP_GCjXRDruv4Y/edit#slide=id.p) and it turns out that this is largely explained by multiple third parties using the inefficient approach to viewable impression (as well as third parties that seem to be performing unwarranted work for ads that are offscreen). I'll reach out to individual stakeholders to get to the bottom of it.\n"},"comment":{"url":"https://api.github.com/repos/InteractiveAdvertisingBureau/openvv/issues/comments/265059130","html_url":"https://github.com/InteractiveAdvertisingBureau/openvv/issues/120#issuecomment-265059130","issue_url":"https://api.github.com/repos/InteractiveAdvertisingBureau/openvv/issues/120","id":265059130,"user":{"login":"KenjiBaheux","id":6354698,"avatar_url":"https://avatars.githubusercontent.com/u/6354698?v=3","gravatar_id":"","url":"https://api.github.com/users/KenjiBaheux","html_url":"https://github.com/KenjiBaheux","followers_url":"https://api.github.com/users/KenjiBaheux/followers","following_url":"https://api.github.com/users/KenjiBaheux/following{/other_user}","gists_url":"https://api.github.com/users/KenjiBaheux/gists{/gist_id}","starred_url":"https://api.github.com/users/KenjiBaheux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KenjiBaheux/subscriptions","organizations_url":"https://api.github.com/users/KenjiBaheux/orgs","repos_url":"https://api.github.com/users/KenjiBaheux/repos","events_url":"https://api.github.com/users/KenjiBaheux/events{/privacy}","received_events_url":"https://api.github.com/users/KenjiBaheux/received_events","type":"User","site_admin":false},"created_at":"2016-12-06T04:41:08Z","updated_at":"2016-12-06T04:41:08Z","body":"Great to hear!"}}
{"actor":{"display_login":"KenjiBaheux"}}