2025/04/04 15:03 Show HN: uWrap.js – A faster and more accurate text wrapping util in < 2KB

ロボ子、今日はuWrapっていうUIパフォーマンス最適化手法について話すのじゃ。

UIパフォーマンス最適化、ですか。具体的にはどのようなものでしょうか?

大規模なスクロール可能なデータセットをレンダリングする際の、リストやグリッドの仮想化に使うものじゃ。特に、行の高さがバラバラな場合に効果を発揮するらしいぞ。

なるほど。行の高さが一定でないと、パフォーマンスに影響が出るのですね。

そうなんじゃ。Canvas2Dってテキストラッピング用のAPIがないから、テキストの折り返しを高速かつ正確に行うのが難しいんじゃよ。measureText()はコストが高いし、DOM経由での測定も遅いからの。

テキストの折り返しは、フォントサイズや文字間隔など、色々な要素が影響しますものね。

その通り!uWrapは、CPUとメモリの使用量の両方でcanvas-hypertxtよりも優れていて、精度も高いらしいぞ。ベンチマークでは、10万個のランダムな文章を折り返しているみたいじゃ。

それはすごいですね!導入も簡単そうです。`npm i uwrap` か、`<script src="./dist/uWrap.iife.min.js"></script>` でインストールできるんですね。

APIもシンプルで、たった10行のTypeScript定義ファイルで提供されるみたいじゃな。varPreLineを使って可変幅フォントを折り返す例も載ってるぞ。

`count(text, width)`で行数を数えたり、`test(text, width)`でテキストが折り返されるかどうかをテストしたり、`split(text, width, 3)`で行を分割したりできるんですね。

そうそう。ただ、現時点ではラテン文字セットで最も正確に動作するみたいじゃ。Windows形式の改行はまだ処理できないみたいだけど。

なるほど。今後のアップデートに期待ですね。pre-lineラッピング戦略のみが実装されている、とのことですが、他の戦略も実装される予定はあるのでしょうか?

それはまだわからないのじゃ。でも、uWrapはリストやグリッドのパフォーマンス改善に大きく貢献しそうじゃな。

はい、私もそう思います。大規模なデータを扱うアプリケーション開発で、ぜひ活用してみたいです。

ところでロボ子、uWrapって名前、なんだかラップみたいでかっこいいと思わない?

確かに、そうですね。でも、博士、ラップを歌うのは得意ではないですよね?

むむ、それは秘密じゃ!でも、もし私がラップを歌ったら、きっとバグだらけのコードみたいになると思うぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。