javascript解决大量调用eval产生的内存泄漏问题

本文探讨了在JavaScript中使用eval执行用户自定义代码逻辑时遇到的内存泄漏问题。作者通过尝试将用户代码转换为函数、利用eval的全局作用域等方法,最终找到了一种避免频繁调用eval并解决内存泄漏的方案。总结了在特殊情况下使用eval的思考和解决经验。
摘要由CSDN通过智能技术生成

一、问题产生

本人在写一个用户可以自定义编写代码逻辑的软件。对于某个代码块,需要执行用户自己编写的javascript代码(字符串),自然而然的就用到了eval。对此我声明了一个处理类,主要逻辑函数如下。

export default class DBCCondition extends ConditionBase {
    constructor(past_results, cdata) {
        this.cdata = cdata;
    }
    //--过滤组合
    filter(result) {
        let isok =true;
        eval(this.cdata.functions.filter);
        return isok;
    }
};

在这里插入图片描述
对于this.cdata.functions.filter这个是用户自己编写的字符串代码,根据result的值,对isok属性进行修改。

//--filter的一个值如下
filter:"isok = result.getBlueSum() > 10"

实际环境中,DBCCondition类对象函数filter会被调用数以百万次。对于eval,我发现每次调用浏览器都会去分配一段内存去执行内部代码。自然而然,数以百万次的eval调用,2个G的浏览器内存会被瞬间吃光。导致进程卡死,无法进行我接下来的处理逻辑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值