{"action":"opened","issue":{"url":"https://api.github.com/repos/yyx990803/vue/issues/1405","labels_url":"https://api.github.com/repos/yyx990803/vue/issues/1405/labels{/name}","comments_url":"https://api.github.com/repos/yyx990803/vue/issues/1405/comments","events_url":"https://api.github.com/repos/yyx990803/vue/issues/1405/events","html_url":"https://github.com/yyx990803/vue/issues/1405","id":110805779,"number":1405,"title":"Dom node leak in TODO app","user":{"login":"Vorror","id":3613230,"avatar_url":"https://avatars.githubusercontent.com/u/3613230?v=3","gravatar_id":"","url":"https://api.github.com/users/Vorror","html_url":"https://github.com/Vorror","followers_url":"https://api.github.com/users/Vorror/followers","following_url":"https://api.github.com/users/Vorror/following{/other_user}","gists_url":"https://api.github.com/users/Vorror/gists{/gist_id}","starred_url":"https://api.github.com/users/Vorror/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Vorror/subscriptions","organizations_url":"https://api.github.com/users/Vorror/orgs","repos_url":"https://api.github.com/users/Vorror/repos","events_url":"https://api.github.com/users/Vorror/events{/privacy}","received_events_url":"https://api.github.com/users/Vorror/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-10-10T16:59:34Z","updated_at":"2015-10-10T16:59:34Z","closed_at":null,"body":"I stumbled across and interesting library called [drool](https://github.com/samccone/drool). Which basically finds dom leaks and ran the vuejs todo app through it.\r\nAnd these were the results:\r\n```javascript\r\nbefore :{\"documents\":3,\"jsEventListeners\":7,\"jsHeapSizeUsed\":4845608,\"nodes\":261} after:{\"documents\":3,\"jsEventListeners\":7,\"jsHeapSizeUsed\":4526040,\"nodes\":361}                              ^\r\nAssertionError: node count should match\r\n```\r\ncode used:\r\n```javascript\r\nvar drool = require('drool');\r\nvar assert = require('assert');\r\n\r\nvar driver = drool.start({\r\n  chromeOptions: 'no-sandbox'\r\n});\r\n\r\ndrool.flow({\r\n  repeatCount: 100,\r\n  setup: function() {\r\n    driver.get('http://todomvc.com/examples/vue/');\r\n  },\r\n  action: function() {\r\n    driver.findElement(drool.webdriver.By.css('.new-todo')).sendKeys('find magical goats', drool.webdriver.Key.ENTER);\r\n    driver.findElement(drool.webdriver.By.css('.todo-list li')).click();\r\n    driver.findElement(drool.webdriver.By.css('.destroy')).click();\r\n  },\r\n  assert: function(after, initial) {\r\n    console.log(\"before :\" + JSON.stringify(initial) + \" after:\" + JSON.stringify(after));\r\n    assert.equal(initial.nodes, after.nodes, 'node count should match');\r\n  }\r\n}, driver)\r\n\r\ndriver.quit();\r\n```\r\nI don't know if this is implementation issue in the library itself or the how the app was written.\r\nIt may also be worthwhile to add this to the ci build? Since I see a few other frameworks doing it.\r\n"}}