JSFiddle - React, Tailwind, and code Playground

HTML

<!DOCTYPE html>
<html lang="en">

  <head>
    <title>mxGraph sample</title>

    <script type="text/javascript">
      const mxLoadResources = false
      const mxLoadStylesheets = false

    </script>
    <script type="text/javascript" src="https://www.unpkg.com/mxgraph/javascript/mxClient.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://www.unpkg.com/mxgraph/javascript/src/css/common.css">
  </head>

  <body>
    <div id='export-button'></div>
    <div id="container"></div>
  </body>

</html>

JavaScript

measure(2000)

function measure(nodeNum) {
  performance.mark('start')
  paintGraph(nodeNum)
  performance.mark('end')
  performance.measure(
    'mxGraph',
    'start',
    'end'
  )
  console.log(`nodes=${nodeNum}, duration=${performance.getEntriesByName('mxGraph')[0].duration}ms`)
}

// nodeNum個のノードを1列に繋いだグラフを描画する
function paintGraph(nodeNum) {
  // グラフを表示する領域を確保
  const container = document.getElementById('container')
  // グラフのインスタンス生成
  const graph = new mxGraph(container)

  // グラフにノードやエッジを追加する際に必要
  const parent = graph.getDefaultParent()
  // 今回は階層グラフを自動レイアウトで描画したいため、レイアウトのインスタンスを生成
  const layout = new mxHierarchicalLayout(graph)

  // 高速化その1:グラフモデル更新中は描画をOFFにする
  graph.getView().setRendering(false)

  // 高速化その2:ignoreStringSizeを有効にする
  mxText.prototype.ignoreStringSize = true

  // グラフの形状やデザインの変更を行う(グラフモデルを変更する)際は
  // beginUpdate -> グラフモデル変更 -> endUpdate の順に行う
  graph.getModel().beginUpdate()

  try {
    // tryブロックの中でグラフの形状やデザインの変更を行う

    // ノード追加	
    for (let i = 1; i <= nodeNum; i++) {
      graph.insertVertex(parent, `node${i}`, `${i}`, null, null, 30, 30, null)
    }

    // エッジ追加
    for (let i = 1; i < nodeNum; i++) {
      const src = graph.getModel().getCell(`node${i}`)
      const dst = graph.getModel().getCell(`node${i+1}`)
      graph.insertEdge(parent, null, null, src, dst, null)
    }

    // 追加したノード・エッジに基づいてレイアウトの自動計算を行う
    layout.execute(parent)
  } finally {
    graph.getModel().endUpdate()
  }

  // 描画をオンに戻す
  graph.getView().setRendering(true)
  graph.refresh()
}