◆ DOM API の textContent/innerHTML は「"」がエスケープされない
◆ textContent/innerHTML と正規表現のパフォーマンス比べると前者のほうが少し早め
  ◆ ただ エスケープするテキストに応じて変わりそうなので絶対ではないと思う

そろそろ JavaScript でも標準で HTML エスケープする関数がほしいですよね
なんか textContent で入れればいいから標準で用意する必要はないみたいな話を昔聞きましたが全部を textContent 使うなんて無理です
HTML を動的に作って innerHTML でセットすることは頻繁にあり その中にユーザ入力のものが挟まるとエスケープは必須なんです

今のところは textContent を通すか正規表現で置換するかのどっちかになると思います

DOM 使う

DOM にアタッチしない一時的な要素を作って textContent で入れて innerHTML で取り出す方法です

const div = document.createElement("div")
div.textContent = text
const escaped_html = div.innerHTML

これ用の要素が必要ですし 印象的には速いとは言えなそうです
また 要素の子になる textNode としてセットするので 「"」 はエスケープ対象になりません
Chrome で確認したところ 「&<>」 の 3 種類のみのようです
そのため この機能を関数化してエスケープ処理とするなら 属性にセットためのエスケープには使えません

const escaped_html = `<div name="${esc(name)}">${esc(body)}</div>`

こうした場合に body の方は問題ありませんが name に 「"」 が含まれるとそこから HTML がおかしくなります

正規表現

「"」も対応となると正規表現を使うことになります
自分で正規表現を調整できるので 好きな文字を HTML エンティティ化することもできます
HTML の属性を 「'」 で書く人は 「'」 もエスケープしないといけないですし 正規表現で対応するほうが万能ではあります

const map = {
"&": "&amp;",
'"': "&quot;",
"<": "&lt;",
">": "&gt;",
}
const escaped_html = text.replace(/[&"<>]/g, e => map[e])

パフォーマンスは

どっちが速いのか見た目的にはどっちとも言いづらいものです
DOM の API 使うと内部でいろいろやってそうだし これくらいのシンプルさなら正規表現のほうが速いかな?と予想して計測してみました

コード
const div = document.createElement("div")
const map = {
"&": "&amp;",
'"': "&quot;",
"<": "&lt;",
">": "&gt;",
}
const text = `abc!"#$%&'()=~|_?><.,xyz`
const count = 100000

console.time(1)
for(let i=0;i<count;i++){
esc1(text)
}
console.timeEnd(1)

console.time(2)
for(let i=0;i<count;i++){
esc2(text)
}
console.timeEnd(2)

function esc1(text){
div.textContent = text
return div.innerHTML
}

function esc2(text){
return text.replace(/[&"<>]/g, e => map[e])
}

div や map は毎回作るだけ無駄なので事前に用意済みで使いまわします
対象文字列はアルファベットや記号を適当にいろいろ入れたもので 10 万回実行します

何度か実行した結果です

1: 118.119873046875ms
2: 127.381103515625ms

1: 96.527099609375ms
2: 115.8720703125ms

1: 96.574951171875ms
2: 108.189208984375ms

1: 96.714111328125ms
2: 104.965087890625ms

Chrome 70 で確認してます
予想に反して DOM API のほうが速かったです
「"」 のエスケープが不要なら textContent 設定して innerHTML 取り出しのほうがいいかもしれません

ただ 同じ div の使い回しなので 同じ text の代入なら内部処理が省略されてるかもしれないですし 正規表現の方はマッチする回数が多くなるほど関数呼び出しのコストがあるから遅くなるなど状況に応じて変わってくると思います
エスケープ処理が遅くて改善必要ってなったら実際のテキストに応じて試してみるのが一番だと思います