excelsystems

Members
  • Content count

    5
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by excelsystems


  1. Every execution of FusionCharts increases memory consumed by the browser.

     

    In our case we may have many screens in one-page app which contain charts and some customers run out of memory after running screens with FusionCharts for a while.

     

    I've composed example which demonstrates this issue. Just open it and keep pressing "Update charts" button, then you should notice that memory size consumed by the browser keeps growing.

     

    http://esdi.excelsystems.com/websmart/smh/sc_test/sc_js.html

     

    Issue is especially noticeable in Internet Explorer


  2. We use FusionCharts in Ajax application which replaces contents of some element with HTML which has FusionChart in it.

    The issue is that if FusionChart won't finish rendering and HTML will be replaced with another HTML which has FusionChart, it will throw an exception.

     

    Unfortunately this exception is impossible to catch with try/catch block because in raiseEWEvent exception it is thrown in another context because of:  

     

    // Throw error in a separate scope so that the execution of this script
    // is not blocked. Do this only when debugMode is enabled

    window.setTimeout(function () {

                    throw err;
                }, 0);
     
    Also comment is a bit misleading because debug mode is disabled in my case, but exception is still thrown.

  3. In my application content of the page which contains Fusion Chart is reloaded multiple times with AJAX request, so chart is regenerated several times which at some point causes infinite loop ONLY IE 7.

    I've tracked down problem to the code of the function "global.normalizeCSSDimension" and particularly:

    --

     

     

    if (w.match(/^\s*\d*\.?\d*\%\s*$/) && !w.match(/^\s*0\%\s*$/) &&

    container.offsetWidth === 0) {

    while ((p = container.offsetParent)) {

    if (p.offsetWidth > 0) {

    w = (p.offsetWidth * parseFloat(w.match(/\d*/)[0]) / 100).toString();

    break;

    }

    }

    }

     

    if (h.match(/^\s*\d*\.?\d*\%\s*$/) && !h.match(/^\s*0\%\s*$/) &&

    container.offsetHeight <= 20) {

    while ((p = container.offsetParent)) {

    if (p.offsetHeight > 0) {

    h = (p.offsetHeight * parseFloat(h.match(/\d*/)[0]) / 100).toString();

    break;

    }

    }

    }

    --

     

    The problem is that offsetHeight and offsetWidth can be 0 at the very beginning which will cause these loop never end.

    I've fixed it by modifying code like this:

    --

     

    if (w.match(/^\s*\d*\.?\d*\%\s*$/) && !w.match(/^\s*0\%\s*$/) &&

    container.offsetWidth === 0) {

    if ((p = container.offsetParent) && p.offsetWidth > 0) {

    w = (p.offsetWidth * parseFloat(w.match(/\d*/)[0]) / 100).toString();

    }

    }

     

    if (h.match(/^\s*\d*\.?\d*\%\s*$/) && !h.match(/^\s*0\%\s*$/) &&

    container.offsetHeight <= 20) {

    if ((p = container.offsetParent) && p.offsetHeight > 0) {

    h = (p.offsetHeight * parseFloat(h.match(/\d*/)[0]) / 100).toString();

    }

    }

    --

    it would be great if this issue will be fixed in the next versions of Fusion Charts