×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
three.jsファイルサイズ軽量化計画 2020.03.03 three.js Meetup Tokyo #1 by Takumi Hasegawa
Slide 2
Slide 2 text
unshift (アンシフト)という屋号で フリーランスのディベロッパーをやっています。 趣味でクリエイティブコーディングをしたりします。 長谷川 巧 (はせがわ たくみ) Front-end / Creative developer Portfolio: https://unshift.jp/ Twitter: @_unshift
Slide 3
Slide 3 text
昔作ったポートフォリオサイトが three.jsのサイトに載ってます。 (今のはthree.js製じゃない、、、)
Slide 4
Slide 4 text
昔の(私の)three.jsの使い方
Slide 5
Slide 5 text
サイトからダウンロードした three.min.jsをそのまま配置して scriptタグに記述。 (200KB ~ 300KB)
Slide 6
Slide 6 text
最近は、three.jsの膨大な機能も 大して使いこなせないし 必要最低限の機能を実装した オレオレWebGLフレームワークを 使ってました。
Slide 7
Slide 7 text
久々にthree.jsを使おうと思ったら
Slide 8
Slide 8 text
609KB !!!
Slide 9
Slide 9 text
そんな中、 知り合いのスーパーディベロッパー である なかのさん(@misaki_mofujp) のtweetを見て、 three.jsのファイルサイズ軽量化 について調べ始めました。 ※Tree Shakingについては後述
Slide 10
Slide 10 text
three.jsのファイルサイズを減らすには 方法1: カスタムビルド 方法2: Tree Shaking
Slide 11
Slide 11 text
方法1: カスタムビルド three.jsのGitHubリポジトリには ソースからビルドするための環境が入っているので それをカスタマイズして必要な機能のみ入れた カスタム版three.jsをつくる。
Slide 12
Slide 12 text
※Node.jsが必要です。 Node.jsわからんって人はこの機会に 覚えてもいいかもしれません。 インストールする事自体は簡単。 説明は省略します。
Slide 13
Slide 13 text
build/three.js build/three.module.js build/three.min.js が生成される。 ダウンロードしたリポジトリの ディレクトリで $ npm install でモジュールインストールが完了したら $ npm run build-closure するだけ。 ビルド自体は超簡単
Slide 14
Slide 14 text
src/Three.js の「export」から 始まる行の中で、使いたいもの以外を コメントアウト (または削除)。 機能を絞るには そして $ npm build-closure を実行。
Slide 15
Slide 15 text
方法2 (応用編): モジュールバンドラーによる Tree Shaking WebpackやRollupなどのモジュールバンドラーによる Tree shakingによって必要な機能だけに絞る。
Slide 16
Slide 16 text
※Tree Shakingとは ざっくり言うと、 使用していないコード (デッドコード)を 削除してくれる機能のこと。
Slide 17
Slide 17 text
Webpackを例として Tree Shakingするには… 1. モジュールの書き方をCommonJS形式でなく、 ES Module形式で書く 2. Webpackの設定でmodeを”production”に設定 3. babelやTypescriptの設定に気をつける
Slide 18
Slide 18 text
1. モジュールの書き方をCommonJS形式でなく、 ES Module形式で書く
Slide 19
Slide 19 text
2. Webpackの設定でmodeを”production”に設定 https://webpack.js.org/configuration/mode/
Slide 20
Slide 20 text
3. babelやTypescriptの設定に気をつける デフォルトの設定だと、ES Module形式で記述しても CommonJSに変換されてしまう。ので、対処する。 ・@babel/preset-envならoptionでmodules: false ・TypescriptならtsconfigでcompilerOptionsの module: “es2015”などに設定
Slide 21
Slide 21 text
準備ができたので早速試してみる。
Slide 22
Slide 22 text
まずは全部入りになる記述 561KB
Slide 23
Slide 23 text
使う機能だけ読み込み 561KB
Slide 24
Slide 24 text
あれ、変わらない、、
Slide 25
Slide 25 text
いろいろ調べた結果、 three.jsは Tree Shakingはできないとのこと。
Slide 26
Slide 26 text
解決策は3つ 1. カスタムビルドしたものを使う 2. モジュールのソースを直接読み込む 3. プラグインを使う
Slide 27
Slide 27 text
1. カスタムビルドしたものを使う
Slide 28
Slide 28 text
2. モジュールのソースを直接読み込む
Slide 29
Slide 29 text
3. プラグインを使う three-minifierという、 WebpackとRollupで使えるプラグインがある https://github.com/yushijinhun/three-minifier
Slide 30
Slide 30 text
まとめ 使う機能がわかってれば カスタムビルドが一番良さそう。