大致相同的处理,为什么消耗的内存却差很多

现状描述
1.使用了datatable.js,用来表示1.4万条数据。
2.ajax取的数据也大致一样
3.俩个画面表示的时间也基本一样。

为什么画面A要比画面B花的内存多很多
画面A
图片1
画面B
2020-02-07_19h47_13.png

想请教占用内存大小的问题,不是时间的问题,画面表示时间没有问题。

阅读 2.6k
3 个回答

特别感谢TensionMax的回复。
现在已经找了导致消耗大量内存的处理地方。
datatable.js有个columnDefs的属性,用来设置表的表示项目。
修改前代码是这样的:

mainCols = [{
            targets: 0,
            data: 'logon',
            searchable: true,
            render: function (value, type, row) {
                return sanitize(value);
            },
            className: 'tooltip_div'
        }, {
            targets: 1,
            data: 'last_name',
            searchable: true,
            render: function (value, type, row) {
                return sanitize(value);
            },
            className: 'tooltip_div'
        }, {
            targets: 2,
            data: 'first_name',
            searchable: true,
            render: function (value, type, row) {
                return sanitize(value);
            },
            className: 'tooltip_div'
        }, {
            targets: 3,
            data: 'group_name',
            searchable: true,
            render: function (value, type, row) {
                return sanitize(value);
            },
            className: 'tooltip_div'
        }, {
            targets: 4,
            data: 'user_id',
            visible: false,
            searchable: false
        }, {
            targets: 5,
            data: 'group_id',
            visible: false,
            searchable: false
        }, {
            targets: 6,
            data: 'bottom_group_id',
            visible: false,
            searchable: false
        }]

修改以后是这样的

    mainCols = [{
            targets: 0,
            data: 'logon',
            searchable: true,
            render: function (value, type, row) {
                return sanitize(value);
            },
            className: 'tooltip_div'
        }, {
            targets: 1,
            data: 'last_name',
            searchable: true,
            render: function (value, type, row) {
                return sanitize(value);
            },
            className: 'tooltip_div'
        }, {
            targets: 2,
            data: 'first_name',
            searchable: true,
            render: function (value, type, row) {
                return sanitize(value);
            },
            className: 'tooltip_div'
        }, {
            targets: 3,
            data: 'group_name',
            searchable: true,
            render: function (value, type, row) {
                return sanitize(value);
            },
            className: 'tooltip_div'
        }],

一般的话,从第4-6这三项因为设置了不可见,所以就忽略了。
实际上在表示大量数据的时候(我的项目是2万左右),这些项目都会占用很大的内存开销。
所以如果画面表示不需要的话,最好不要写。

还有就是扩展方法里不写的项目也能正常取到(rowData),不用担心。

    $.fn.dataTable.ext.search.push(
        function (settings, searchData, index, rowData, counter) {

这得看代码是不是新增什么变量,并且没有摧毁,造成内存占用过大,单纯这样看是看不出来的,按F12看看什么原因

这个问题通过“望”我实在是“望”不出来啥。。还得配合“闻问切”才行。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题