-1

これは、返されたデータを処理または保存しなくても発生します。

コンテキストは次のとおりです。

HTMLには次のものが含まれています

<table border="0" cellpadding="2" cellspacing="0" class="formPanel" style="width:100%">
        <tbody><tr>
            <td>
                <span style="vertical-align:middle;">
    <span>Date:
        <input id="datePicker" name="DatePicker" maxlength="10" value="20130128"/>
    </span>
        <input id="go-btn" style="width:80px;" type="button" value="Go"/>
                </span>
            </td>
        </tr>
    </tbody></table>

そしてJavaScriptは

$(function(){
    // Extracted the previously anonymous function to reduce memory used to store "compiled code"
    function processData(data) {
        //process data
    }
    // Extracted the previously anonymous function to reduce memory used to store "compiled code"
    function clickHandler() {
        var keys = ['googlechrome','firefox','opera', 'webkit', 'ie']; 
        for(var i = 0; i < keys.length; i++) {
            /* Previously a method call
             */        
            var date = $("#datePicker").val().replace(/-/g, ''),
                // A local URL, That returns a max of 5MB.
                url  = "/get_usage?date="+date;

            url += '&user_agent=' + keys[i];
            url += "&min_count=250";


            $.getJSON(url, processData);
        } 

    }
    $("#go-btn").click(clickHandler);
});

ワンクリックで受信するデータの実際のサイズは約10MBですが、Chromeのタスクマネージャーの[メモリ]列が30MBをはるかに超えていることを確認すると、しばらくするとガベージは約4MBを収集します(それが無関係かどうかはわかりません)。

jQueryのgetJSONメソッドを削除して配列サイズを10倍に増やしても、メモリ全体に大きな違いはなかったので、私はjQueryのgetJSONメソッドを疑っています。

4

1 に答える 1

0

質問で述べたように、$。getJSONメソッドを含む行を削除しても、メモリにリークはありませんでした。これは、Erikが言及したJSONP呼び出しの問題だと思います。返信ありがとうございます

于 2013-10-09T21:34:01.460 に答える