javascript - 编译后的 typescript 和 vanilla javascript 之间的内存使用情况不同

标签 javascript node.js typescript mqtt

当我编译与普通 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/

相关文章:

javascript - 更改responsiveCollapse模型中的默认+/-图标

javascript - 在函数之间传递参数时出现 TypeScript 错误

javascript - Angular 2 : Multiple html lines of code(template) not rendering in browser

javascript - 将 JSON 对象渲染成 HTML,渲染函数不渲染深层对象

javascript - 将 Javascript 文件导入 REPL session

javascript - 使用javascript读取多个输入行

typescript - 无法在带有 typescript 的vue中使用Mixins

javascript - 来自表达式的 Angular 6 错误调用函数

javascript - 如何使用 jQuery 获取元素的宽度属性?

javascript - 根据类别更新对象类型的mongodb字段