node性能优化

2022-04-15  本文已影响0人  姜治宇

1、代码优化

如果代码中使用了大对象作为缓存,会导致老生代的垃圾回收变慢。

const cache = {}
async function getUserInfo(id) {
    if (!cache[id]) {
        cache[id] = await getUserInfoFromDatabase(id)
    }
    return cache[id]
}

我们通过缓存用户信息,确实可以达到查询快的效果,但这个cache对象会变得无比巨大,如果不做限制就会有内存泄漏风险。
我们可以使用LRU cache来限制缓存的大小,或者干脆使用redis这样的外部缓存。

const LRU = require('lru-cache');
let cache = new LRU({
        max: 50
    });
async function getUserInfo(id) {
    if (cache.has[id]) {
        return cache.get(id);
    }
    
    let userinfo = await getUserInfoFromDatabase(id);
    cache.set(id,userinfo);
    return userinfo;
}

2、内存分配优化

如果新生代空间不足,就会导致频繁GC,从而降低性能。
Node.js 默认给新生代分配的内存是 64MB,但因为新生代 GC实际能使用的内存只有一半即32MB,当业务代码频繁地产生大量的小对象时,这个空间很容易就会被占满,从而触发 GC。虽然新生代的 GC 比老生代要快得多,但频繁的 GC 依然会很大地影响性能。
我们可以修改新生代的内存上限来减少 GC 的次数:

node --max-semi-space-size=128 app.js

当然,新生代也不是越大越好,如果gc次数减少,相应的每次gc时间就会延长,根据经验,一般分配64M~128M就够用了。

3、版本优化

升级新版本的node.js也会相应提升性能。

上一篇 下一篇

猜你喜欢

热点阅读