InDesignのスクリプトでフォント情報を取得

スクリプトの話です。 InDesignのスクリプトでシステムにインストールされているフォントを取得して何らかの操作を行う場合、ExtendScriptでは
var fns = app.fonts;
for (var i = 0; i < fns.length; i++) {
    $.writeln(fns[i].location); //フォントの保存先フォルダ
}
などとするのが普通の考え方(『イチからわかる! InDesign JavaScript 指南書』でもそう書きました)ですが、これがとにかく遅い。私の環境で1000フォント処理するの12分かかります。 さらに悪いことに、実際にはインストールされていないフォントもリストアップされます。Windows 10の場合、標準で「BIZ UDP明朝 Medium」がインストールされています。「BIZ UDP明朝」のファミリーでインストールされているのは「Medium」だけなんですが、InDesignのExtendScriptでは「BIZ UDP明朝 Regular」を検出してしまいます。当然そんなフォントはないので上の例ではエラーになってしまいます。 これでは非常に都合が悪いですね。 そこで色々やっていたんですが、これを次のようにして解決することにしました。これが最善かどうか分かりませんが、実行速度が格段に速く(私の環境で1000フォント処理するのに数秒)、かつ存在しないフォントを無視できるようになりました。
var fnm = app.fonts.everyItem().name;
for (var i = 0; i < fnm.length; i++) {
    var fn = app.fonts.itemByName(fnm[i]);
    if (fn.status != FontStatus.NOT_AVAILABLE) {
        $.writeln(fn.location); //フォントの保存先フォルダ
    }
}
app.fonts.everyItem().nameでフォントの名前を配列に入れます。そして名前からフォントオブジェクトを作成します。次にそのフォントオブジェクトのステータスを調べます。これNOT_AVAILABLEであれば実際には存在しないフォントということになるので、それ以外のフォントについて処理を行うということです。 フォントのステータスは次のようになっています。
FontStatus.INSTALLED 正常にインストールされているフォント
FontStatus.NOT_AVAILABLE 存在しないフォント。Applicationオブジェクトの場合のみ
FontStatus.SUBSTITUTED 代替表示されている(システムにない)フォント。Documentオブジェクトの場合のみ
FontStatus.FAUXED 偽装されているフォント)。まだ出会ったことがない。
FontStatus.UNKNOWN それ以外のフォント。まだ出会ったことがない。