{"id":15409,"date":"2014-09-06T20:37:25","date_gmt":"2014-09-06T15:07:25","guid":{"rendered":"http:\/\/www.tothenew.com\/blog\/?p=15409"},"modified":"2014-09-06T20:37:25","modified_gmt":"2014-09-06T15:07:25","slug":"check-global-object-pollution-using-global-object-guard","status":"publish","type":"post","link":"https:\/\/www.tothenew.com\/blog\/check-global-object-pollution-using-global-object-guard\/","title":{"rendered":"Check Global Object Pollution using global-object-guard"},"content":{"rendered":"<p style=\"text-align: left\">JavaScript is language for Ninjas some time mistake happens by Ninja also which slow down our Node Application, because unknowingly we are dynamically creating the property on GLOBAL objects or some time we get stuck in some closure issue&#8217;s which are not easy to trace and becomes a memory leak for the application. These are the common problem&#8217;s with Ninjas. During\u00a0all these problems I found some useful npm module called global-object-guard which become a solution for my problems related with GLOBAL objects.<\/p>\n<p style=\"text-align: center\"><strong>Lets discuss GLOBAL issues with the help of example.<\/strong><\/p>\n<pre class=\"sh_sourceCode\"><code class=\"lang-javascript\">_appSetting <span class=\"sh_symbol\">=<\/span> <span class=\"sh_cbracket\">{<\/span>\r\n    PORT<span class=\"sh_symbol\">:<\/span> <span class=\"sh_number\">2000<\/span><span class=\"sh_symbol\">,<\/span>\r\n    HOST<span class=\"sh_symbol\">:<\/span> <span class=\"sh_string\">\"http:\/\/localhost\"<\/span>\r\n<span class=\"sh_cbracket\">}<\/span><span class=\"sh_symbol\">;<\/span>\r\n\r\n_otherServerSetting <span class=\"sh_symbol\">=<\/span> <span class=\"sh_cbracket\">{<\/span>\r\n    <span class=\"sh_comment\">\/\/So on...<\/span>\r\n<span class=\"sh_cbracket\">}<\/span><span class=\"sh_symbol\">;<\/span>\r\n\r\n<span class=\"sh_comment\">\/\/ Do your code .......<\/span>\r\n\r\nobj <span class=\"sh_symbol\">=<\/span> <span class=\"sh_cbracket\">{<\/span>name<span class=\"sh_symbol\">:<\/span> <span class=\"sh_string\">\"Kashish\"<\/span><span class=\"sh_symbol\">,<\/span> age<span class=\"sh_symbol\">:<\/span> <span class=\"sh_number\">24<\/span><span class=\"sh_cbracket\">}<\/span><span class=\"sh_symbol\">;<\/span>\r\n\r\n<span class=\"sh_symbol\">(<\/span><span class=\"sh_keyword\">function<\/span> <span class=\"sh_symbol\">()<\/span> <span class=\"sh_cbracket\">{<\/span>\r\n    person <span class=\"sh_symbol\">=<\/span> <span class=\"sh_cbracket\">{<\/span>address<span class=\"sh_symbol\">:<\/span> <span class=\"sh_string\">\"B4-90 US\"<\/span><span class=\"sh_cbracket\">}<\/span>\r\n<span class=\"sh_cbracket\">}<\/span><span class=\"sh_symbol\">)();<\/span>\r\n\r\n<\/code><\/pre>\n<p style=\"text-align: left\">The above code polluting the GLOBAL object by making property dynamically which can be unknown to the developer<\/p>\n<p style=\"text-align: left\">When I write same code using npm module global-object-guard. Lets see how it will help us out to check whether code is hitting global object or not??<\/p>\n<p style=\"text-align: center\"><strong>Help your self with global-object-guard<\/strong><\/p>\n<pre class=\"sh_sourceCode\"><code class=\"lang-javascript\"><span class=\"sh_comment\">\/\/ Require this Package<\/span>\r\n<span class=\"sh_keyword\">var<\/span> GlobalObjectGuard <span class=\"sh_symbol\">=<\/span> <span class=\"sh_function\">require<\/span><span class=\"sh_symbol\">(<\/span><span class=\"sh_string\">'global-object-guard'<\/span><span class=\"sh_symbol\">);<\/span>\r\n\r\n<span class=\"sh_comment\">\/\/My All Global Object Settings<\/span>\r\n_appSetting <span class=\"sh_symbol\">=<\/span> <span class=\"sh_cbracket\">{<\/span>\r\n    PORT<span class=\"sh_symbol\">:<\/span> <span class=\"sh_number\">2000<\/span><span class=\"sh_symbol\">,<\/span>\r\n    HOST<span class=\"sh_symbol\">:<\/span> <span class=\"sh_string\">\"http:\/\/localhost\"<\/span>\r\n<span class=\"sh_cbracket\">}<\/span><span class=\"sh_symbol\">;<\/span>\r\n\r\n_otherServerSetting <span class=\"sh_symbol\">=<\/span> <span class=\"sh_cbracket\">{<\/span>\r\n    <span class=\"sh_comment\">\/\/So on...<\/span>\r\n<span class=\"sh_cbracket\">}<\/span><span class=\"sh_symbol\">;<\/span>\r\n<span class=\"sh_comment\">\/\/--------------------------------------------<\/span>\r\n\r\n<span class=\"sh_comment\">\/\/ Just Apply GlobalObjectGuard<\/span>\r\n<span class=\"sh_keyword\">var<\/span> gb <span class=\"sh_symbol\">=<\/span> GlobalObjectGuard<span class=\"sh_symbol\">.<\/span><span class=\"sh_function\">Create<\/span><span class=\"sh_symbol\">(<\/span>global<span class=\"sh_symbol\">);<\/span>\r\n\r\n<span class=\"sh_comment\">\/\/ Do your code .......<\/span>\r\n\r\n<span class=\"sh_comment\">\/\/ Some time Mistakes happen<\/span>\r\nobj <span class=\"sh_symbol\">=<\/span> <span class=\"sh_cbracket\">{<\/span>name<span class=\"sh_symbol\">:<\/span> <span class=\"sh_string\">\"Kashish\"<\/span><span class=\"sh_symbol\">,<\/span> age<span class=\"sh_symbol\">:<\/span> <span class=\"sh_number\">24<\/span><span class=\"sh_cbracket\">}<\/span><span class=\"sh_symbol\">;<\/span>\r\n\r\n<span class=\"sh_comment\">\/\/ Don't worry just check the Global Pollution if you want.<\/span>\r\n<span class=\"sh_keyword\">var<\/span> result <span class=\"sh_symbol\">=<\/span> gb<span class=\"sh_symbol\">.<\/span><span class=\"sh_function\">getDifference<\/span><span class=\"sh_symbol\">();<\/span>\r\nconsole<span class=\"sh_symbol\">.<\/span><span class=\"sh_function\">log<\/span><span class=\"sh_symbol\">(<\/span><span class=\"sh_string\">\"Checking Global Object Pollution: \"<\/span><span class=\"sh_symbol\">,<\/span> result<span class=\"sh_symbol\">);<\/span>\r\n<span class=\"sh_comment\">\/\/ Output: Checking Global Object Pollution:  { obj: [ { name: 'Kashish', age: 24 } ] }<\/span>\r\n\r\n<span class=\"sh_comment\">\/\/ You can reposition your global object state<\/span>\r\n<span class=\"sh_comment\">\/\/ This will Set your current global state as a default State<\/span>\r\n<span class=\"sh_comment\">\/\/ (NOTE: ALL THE GLOBAL POLLUTION BECOMES THE PART OF GLOBAL OBJECT)<\/span>\r\ngb<span class=\"sh_symbol\">.<\/span><span class=\"sh_function\">rePositionGlobalObject<\/span><span class=\"sh_symbol\">(<\/span>global<span class=\"sh_symbol\">);<\/span>\r\n\r\n<span class=\"sh_comment\">\/\/ Recheck the Status<\/span>\r\nresult <span class=\"sh_symbol\">=<\/span> gb<span class=\"sh_symbol\">.<\/span><span class=\"sh_function\">getDifference<\/span><span class=\"sh_symbol\">();<\/span>\r\nconsole<span class=\"sh_symbol\">.<\/span><span class=\"sh_function\">log<\/span><span class=\"sh_symbol\">(<\/span><span class=\"sh_string\">\"After Reposition the Global Object: \"<\/span> <span class=\"sh_symbol\">+<\/span> JSON<span class=\"sh_symbol\">.<\/span><span class=\"sh_function\">stringify<\/span><span class=\"sh_symbol\">(<\/span>result<span class=\"sh_symbol\">));<\/span>\r\n<span class=\"sh_comment\">\/\/ Output: After Reposition the Global Object: {}<\/span>\r\n\r\n<span class=\"sh_comment\">\/\/ Lets do some mistake<\/span>\r\n<span class=\"sh_symbol\">(<\/span><span class=\"sh_keyword\">function<\/span> <span class=\"sh_symbol\">()<\/span> <span class=\"sh_cbracket\">{<\/span>\r\n    person <span class=\"sh_symbol\">=<\/span> <span class=\"sh_cbracket\">{<\/span>address<span class=\"sh_symbol\">:<\/span> <span class=\"sh_string\">\"B4-90 US\"<\/span><span class=\"sh_cbracket\">}<\/span>\r\n<span class=\"sh_cbracket\">}<\/span><span class=\"sh_symbol\">)();<\/span>\r\n\r\nresult <span class=\"sh_symbol\">=<\/span> gb<span class=\"sh_symbol\">.<\/span><span class=\"sh_function\">getDifference<\/span><span class=\"sh_symbol\">();<\/span>\r\nconsole<span class=\"sh_symbol\">.<\/span><span class=\"sh_function\">log<\/span><span class=\"sh_symbol\">(<\/span><span class=\"sh_string\">\"Opes Just hit the global object: \"<\/span> <span class=\"sh_symbol\">+<\/span> JSON<span class=\"sh_symbol\">.<\/span><span class=\"sh_function\">stringify<\/span><span class=\"sh_symbol\">(<\/span>result<span class=\"sh_symbol\">));<\/span>\r\n<span class=\"sh_comment\">\/\/ Output: Opes Just hit the global object: {\"person\":[{\"address\":\"B4-90 US\"}]}<\/span>\r\n\r\n<span class=\"sh_comment\">\/\/ Let this GlobalObjectGuard take care this cleaning work. [ Dangerous it can kill your app also ]<\/span>\r\ngb<span class=\"sh_symbol\">.<\/span><span class=\"sh_function\">refreshGlobalObject<\/span><span class=\"sh_symbol\">();<\/span>\r\n\r\n<span class=\"sh_comment\">\/\/ Check the status. Every Thing is Clean Now.<\/span>\r\nresult <span class=\"sh_symbol\">=<\/span> gb<span class=\"sh_symbol\">.<\/span><span class=\"sh_function\">getDifference<\/span><span class=\"sh_symbol\">();<\/span>\r\nconsole<span class=\"sh_symbol\">.<\/span><span class=\"sh_function\">log<\/span><span class=\"sh_symbol\">(<\/span><span class=\"sh_string\">\"Everything is clean by GlobalObjectGuard: \"<\/span> <span class=\"sh_symbol\">+<\/span> JSON<span class=\"sh_symbol\">.<\/span><span class=\"sh_function\">stringify<\/span><span class=\"sh_symbol\">(<\/span>result<span class=\"sh_symbol\">));<\/span>\r\n<span class=\"sh_comment\">\/\/ Output: Everything is clean by GlobalObjectGuard: {}<\/span><\/code><\/pre>\n<p style=\"text-align: left\">Some useful link&#8230;<\/p>\n<p style=\"text-align: left\">NPM: https:\/\/www.npmjs.org\/package\/global-object-guard<\/p>\n<p style=\"text-align: left\">GitHub: https:\/\/github.com\/kashishgupta1990\/global-object-guard<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JavaScript is language for Ninjas some time mistake happens by Ninja also which slow down our Node Application, because unknowingly we are dynamically creating the property on GLOBAL objects or some time we get stuck in some closure issue&#8217;s which are not easy to trace and becomes a memory leak for the application. These are [&hellip;]<\/p>\n","protected":false},"author":135,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":0},"categories":[1],"tags":[1506,1508,1507,1163,1177],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/15409"}],"collection":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/users\/135"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/comments?post=15409"}],"version-history":[{"count":0,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/15409\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/media?parent=15409"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/categories?post=15409"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/tags?post=15409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}