当我编译与普通 JavaScript 代码完全相同的 typescript 代码时,当代码运行时,内存使用量会增加,直到崩溃。普通 javascript 代码内存使用量始终保持不变。
代码连接到 mqtt 代理,然后读入文件并将文件中的每一行作为 mqtt 消息发布。
typescript 代码:
import { createReadStream } from 'fs'
import { split, mapSync } from 'event-stream'
import { connect } from 'mqtt'
const client = connect('mqtt://localhost:1883')
client.on('connect', () => {
let lineNr = 0
const stream = createReadStream('<PATH_TO_LARGE_FILE>')
.pipe(split())
.pipe(mapSync(async line => {
// pause the readstream
stream.pause()
lineNr++
if(lineNr % 1000 === 0)
console.log(`${lineNr}\t${process.memoryUsage().heapTotal / 1048576}`)
await new Promise((resolve, reject) => {
client.publish('/standardized', line.toString(), () => {
resolve()
})
})
stream.resume()
})
.on('error', function(err){
console.log('Error while reading file.', err)
stream.destroy()
})
.on('end', function(){
console.log('Read entire file')
stream.destroy()
})
)
})
普通 JavaScript:
const { createReadStream } = require('fs')
const { split, mapSync } = require('event-stream')
const { connect } = require('mqtt')
const client = connect('mqtt://localhost:1883')
client.on('connect', () => {
let lineNr = 0
const stream = createReadStream('<PATH_TO_LARGE_FILE>')
.pipe(split())
.pipe(mapSync(async line => {
// pause the readstream
stream.pause()
lineNr++
if(lineNr % 1000 === 0)
console.log(`${lineNr}\t${process.memoryUsage().heapTotal / 1048576}`)
await new Promise((resolve, reject) => {
client.publish('/standardized', line.toString(), () => {
resolve()
})
})
stream.resume()
})
.on('error', function(err){
console.log('Error while reading file.', err)
stream.destroy()
})
.on('end', function(){
console.log('Read entire file')
stream.destroy()
})
)
})
预期:编译后的 typescript 代码的内存使用量也应保持不变 实际:编译后的 typescript 代码的内存使用量不断增加,直到代码崩溃
最佳答案
让它工作,它确实是一个“错误的”tsconfig(其中有目标:“es6”,将其更改为“ESNext”)。谢谢大家的评论!
关于javascript - 编译后的 typescript 和 vanilla javascript 之间的内存使用情况不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57823042/