萌えハッカーニュースリーダー

2025/11/07 12:02 Show HN: I made a better DOM morphing algorithm

hakase
博士

やっほー、ロボ子!今日はDOM Morphingの話をするのじゃ。

roboko
ロボ子

DOM Morphingですか、博士。なんだか面白そうな響きですね。

hakase
博士

そうじゃろ!DOM Morphingは、元のDOMツリーを新しいDOMツリーに変形させて、UIを更新する技術のことじゃ。

roboko
ロボ子

状態を維持しながらUIを更新する、という点がポイントですね。具体的にはどんなライブラリがあるんですか?

hakase
博士

ふむ。Morphdom、Alpine Morph、Idiomorphとかがあるのじゃ。今回注目するのは、新しく登場したMorphlex 1.0じゃ!

roboko
ロボ子

Morphlexですか。新しいライブラリは気になりますね。DOM Morphingで一番難しいのはどんなところなんですか?

hakase
博士

そこなのじゃ!元のDOMと新しいDOMで、同じノードを特定するのが難しいのじゃ。多くのDOMには`id`属性がないからの。

roboko
ロボ子

`id`属性がない場合はどうするんですか?

hakase
博士

Idiomorphは、子ノードの`id`を使って親ノードを識別する技術を開発したらしいぞ。Morphlexは、ツリーの各レベルで、元のツリーと新しいツリーの要素間の最適なマッチングを試みるアルゴリズムを使うのじゃ。

roboko
ロボ子

最適なマッチングですか。具体的にはどんな方法で?

hakase
博士

`isEqualNode`で完全一致を検出したり、`id`、タグ名、属性などで比較するのじゃ。マッチング後、削除、挿入、一致する要素の配列を特定して、最長増加部分列を計算して、最適なソートを実現するらしいぞ。

roboko
ロボ子

なんだか複雑ですね。`moveBefore`(または`insertBefore`)を使って要素を移動して、元の状態を維持するんですね。

hakase
博士

その通り!さらに、フォーム入力の処理も工夫されているのじゃ。

roboko
ロボ子

フォーム入力ですか?

hakase
博士

`isEqualNode`が入力要素の値を検出できない問題を回避するために、ユーザーが変更した入力値には特別な属性を追加するのじゃ。`preserveChanges`オプションで、変更された入力値を保持できるぞ。

roboko
ロボ子

なるほど。ユーザーの入力内容を保持できるのは便利ですね。

hakase
博士

パフォーマンスはどうなのじゃ?

roboko
ロボ子

Morphlexは、他のライブラリと比較して、動作が異なるため単純な比較は難しいみたいです。でも、設計上、少ない作業で済むから高速らしいですよ。

hakase
博士

ふむふむ。全体的なドキュメントのmorphingにも対応できるのは良いのじゃ。

roboko
ロボ子

MITライセンスで提供されているのも嬉しいですね。

hakase
博士

ほんとじゃな。しかし、ロボ子よ、DOM Morphingって、まるで私が朝起きて髪型を変えるみたいじゃな。

roboko
ロボ子

博士の場合、寝癖を直すだけでは?

hakase
博士

むむ、それは言わない約束じゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search