-
12 Oct 2010 7:45 AM #1
[OPEN-1331] Extjs.Ajax (3.2.2) Leak
[OPEN-1331] Extjs.Ajax (3.2.2) Leak
ExtJs version: 3.2.2
Overview:
I have a Javascript file that sends an AJAX request out to a server which hosts a PHP script that returns a random number. The returned AJAX value is written to a text field in a form and then the same request is sent to the server again. This process continues indefinitely.
Issue: Web browser Memory usage is constantly increasing.
Test results:
Oct 8, 2010 at 4:03PM memory usage reported by Windows Task Manager
FF: 27 016K
Chrome: 15 616K
IE 8: 26 368K
Oct 12, 2010 at 8:36AM memory usage reported by Windows Task Manager
FF: 64 220K
Chrome: 49 304K
IE 8: 47 268K
As of recording the 8:36AM, memory usage has increased slightly.
Tested Browsers: IE 8.0.7600.16385, Chrome 6.0.472.63, Firefox 3.6.10
PHP source code:
HTML + JAVASCRIPT source:Code:<?php sleep(1); echo "response ".time(); ?>
Comment:Code:<html> <head> <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css"/> <script type="text/javascript" src="extjs/adapter/ext/ext-base-debug.js"></script> <script type="text/javascript" src="extjs/ext-all-debug.js"></script> </head> <body> <script type="text/javascript"> Ext.onReady(function(){ var simple = new Ext.FormPanel({ labelWidth: 75, // label settings here cascade unless overridden url:'save-form.php', frame:true, title: 'Simple Form', bodyStyle:'padding:5px 5px 0', width: 350, defaults: {width: 230}, defaultType: 'textfield', items: [ { id: 'response_field', fieldLabel: 'response', name: 'response' } ] }); simple.render(document.body); function makeRequest(){ Ext.Ajax.request({ url: 'router.php', success: function(response, opts){ Ext.getCmp('response_field').setValue(response.responseText); makeRequest(); }, failure: function(){ makeRequest(); }, params: { foo: 'bar' } }); } makeRequest(); }); </script> </body> </html>
Is this a leak in the framework or is there something I can do to prevent the browser memory usage from constantly increasing?Last edited by wsi; 12 Oct 2010 at 8:57 AM. Reason: Spelt the title wrong. Changed title from Extj.Ajax to Extjs.Ajax
-
12 Oct 2010 10:38 AM #2
Only one thing comes to my mind:
Try to not define failure and success functions inline - remove them to vars. If it doesn't help I can move this thread to bugs for the devel team to investigate the matter.Jozef Sakalos, aka Saki
A lot of valuable info at:
Saki's Extensions and Plugins
Saki's Extensions and Plugins Docs
Saki's Examples, Latest: Grid in Card Layout
Saki's Blog, Featured: Writing a Big Application in Ext, Latest: Grid MultiSearch Plugin Video
-
14 Oct 2010 11:24 AM #3
I modified the javascript to not use inline failure and success functions. The modified code is:
The test results are as followsCode:<html> <head> <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css"/> <script type="text/javascript" src="extjs/adapter/ext/ext-base-debug.js"></script> <script type="text/javascript" src="extjs/ext-all-debug.js"></script> </head> <body> <script type="text/javascript"> Ext.onReady(function(){ var simple = new Ext.FormPanel({ labelWidth: 75, // label settings here cascade unless overridden url:'save-form.php', frame:true, title: 'Simple Form', bodyStyle:'padding:5px 5px 0', width: 350, defaults: {width: 230}, defaultType: 'textfield', items: [ { id: 'response_field', fieldLabel: 'response', name: 'response' } ] }); simple.render(document.body); var success_handler = function(response, opts){ Ext.getCmp('response_field').setValue(response.responseText); makeRequest(); }; var failure_handler = function(){ makeRequest(); }; function makeRequest(){ Ext.Ajax.request({ url: 'router.php', success: success_handler, failure: failure_handler, params: { foo: 'bar' } }); } makeRequest(); }); </script> </body> </html>
Oct 13, 2010 @ 2:49PM
chrome: 33 656K
ff: 43 092K
ie 8: 40 598K
----------------------------
Oct 13, 2010 @ 4:44PM
chrome: 42 708K
ff: 58, 552K
IE 8: 40, 596K
----------------------------
Oct 14, 2010 @ 1:15PM
Chrome: 55 192K
FF: 62 664K
IE 8: 45 132K
The leak still exists.
-
14 Oct 2010 11:28 AM #4
OK, moving this thread to bugs for the devel team to fix/comment/explain.
Jozef Sakalos, aka Saki
A lot of valuable info at:
Saki's Extensions and Plugins
Saki's Extensions and Plugins Docs
Saki's Examples, Latest: Grid in Card Layout
Saki's Blog, Featured: Writing a Big Application in Ext, Latest: Grid MultiSearch Plugin Video
-
14 Oct 2010 11:35 AM #5Sencha - Community Support Team
- Join Date
- Mar 2007
- Location
- Frederick MD, NYC, DC
- Posts
- 16,169
- Vote Rating
- 28
to be honest, your test case is flawed. You should *NOT* be rendering items to the DOM when testing utilities such as Ext.Ajax.

Jay Garcia @ModusJesus || Modus Create co-founder
Ext JS in Action author
Sencha Touch in Action author
Get in touch for Ext JS & Sencha Touch Touch Training
We are also working on Video-based Sencha Touch training: Check it out here.
-
14 Oct 2010 12:10 PM #6
I am a little confused about your comment; can you direct me to the line of code that renders items to the DOM? I am making a guess that you are referring to the line.
If that line is causing the issue, would the following modification fix the issue?Code:Ext.getCmp('response_field').setValue(response.responseText);
Code:<html> <head> <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css"/> <script type="text/javascript" src="extjs/adapter/ext/ext-base-debug.js"></script> <script type="text/javascript" src="extjs/ext-all-debug.js"></script> </head> <body> <script type="text/javascript"> Ext.onReady(function(){ var single_text_field = new Ext.form.TextField({ fieldLabel: 'response', name: 'response' }); var simple = new Ext.FormPanel({ labelWidth: 75, // label settings here cascade unless overridden frame:true, title: 'Simple Form', bodyStyle:'padding:5px 5px 0', width: 350, defaults: {width: 230}, defaultType: 'textfield', items: [ single_text_field ] }); simple.render(document.body); var success_handler = function(response, opts){ single_text_field.setValue(response.responseText); makeRequest(); }; var failure_handler = function(){ makeRequest(); }; function makeRequest(){ Ext.Ajax.request({ url: 'router.php', success: success_handler, failure: failure_handler, params: { foo: 'bar' } }); } makeRequest(); }); </script> </body> </html>
-
14 Oct 2010 12:13 PM #7Sencha - Community Support Team
- Join Date
- Mar 2007
- Location
- Frederick MD, NYC, DC
- Posts
- 16,169
- Vote Rating
- 28


Jay Garcia @ModusJesus || Modus Create co-founder
Ext JS in Action author
Sencha Touch in Action author
Get in touch for Ext JS & Sencha Touch Touch Training
We are also working on Video-based Sencha Touch training: Check it out here.
-
14 Oct 2010 12:14 PM #8Sencha - Community Support Team
- Join Date
- Mar 2007
- Location
- Frederick MD, NYC, DC
- Posts
- 16,169
- Vote Rating
- 28
Also, how are you testing this? Are you refreshing the page?! If so, you're doing it wrong (again).
nm i get it.
Jay Garcia @ModusJesus || Modus Create co-founder
Ext JS in Action author
Sencha Touch in Action author
Get in touch for Ext JS & Sencha Touch Touch Training
We are also working on Video-based Sencha Touch training: Check it out here.
-
14 Oct 2010 12:20 PM #9
Simply put, Jay is saying that your example has both a Form and the Ajax request, so there is no way to know which is causing the memory leak.
Might be the form, field, layout, getCmp, setValue, etc, etc, etc.
Just make it simpler and test again. ie:
PHP Code:var success_handler = function(response, opts){
makeRequest();
};
var failure_handler = function(){
makeRequest();
};
function makeRequest(){
Ext.Ajax.request({
url: 'router.php',
success: success_handler,
failure: failure_handler,
params: {
foo: 'bar'
}
});
}
makeRequest();
-Shea
My Blog:VinylFox | Twitter:@VinylFox | JavaScript Magazine:JSMag | Curator of the Baltimore/DC JavaScript Meetup | Author: Learning ExtJS 3.x Book
ExtJS Extensions & Plugins: GMapPanel UX | HtmlEditor Buttons Plugin | Selection Enabler Plugin | Grid DataDrop Plugin | Additional Ext.Fx
Sencha Touch Plugins: Swipe Tabs | List Pull Refresh | Accelerometer Tabs
-
14 Oct 2010 12:23 PM #10Sencha - Community Support Team
- Join Date
- Mar 2007
- Location
- Frederick MD, NYC, DC
- Posts
- 16,169
- Vote Rating
- 28
Thx Shea.
I'm bouncing around a lot today (too much to do ++ too much caffeine
).
Jay Garcia @ModusJesus || Modus Create co-founder
Ext JS in Action author
Sencha Touch in Action author
Get in touch for Ext JS & Sencha Touch Touch Training
We are also working on Video-based Sencha Touch training: Check it out here.
Thank you for reporting this bug. We will make it our priority to review this report.
Similar Threads
-
[OPEN-1001] Memory leak on buttons inside a window
By VT-TizianoF in forum Ext 3.x: BugsReplies: 2Last Post: 14 Oct 2010, 11:37 PM -
[OPEN][3.x] Floating Menu memory Leak - Ext.Shadows are never destroyed
By Pyja in forum Ext 3.x: BugsReplies: 14Last Post: 9 Dec 2009, 9:40 AM -
Partial solution to memory leak by ajax
By sean.zhou in forum Community DiscussionReplies: 4Last Post: 18 Nov 2008, 9:35 AM -
[2.2] Ext.QuickTips + ASP.NET AJAX = IE Memory Leak?
By SeiginoRaikou in forum Ext 2.x: BugsReplies: 14Last Post: 23 Sep 2008, 12:40 PM -
Ext.QuickTips + ASP.NET AJAX = IE Memory Leak?
By SeiginoRaikou in forum Ext 2.x: Help & DiscussionReplies: 1Last Post: 15 Sep 2008, 9:19 PM


Reply With Quote

