スマホで3Dサイトを作るデメリット|iPhoneが落ちる理由と回避策

スマホで3Dサイトを作るデメリット|iPhoneが落ちる理由と回避策

※この記事にはプロモーションが含まれています

iPhoneでページが落ちました。

自分で作った3Dホームページを実機で開いたときのことです。パソコンでは何の問題もなく動いていた。それがスマートフォンでは、スクロールの途中でブラウザごと落ちる。

原因を調べたら、画面いっぱいの画像を6枚抱えただけでメモリが200MBを超えていました

この記事では、3Dサイトをスマートフォンで動かすときに何が起きるかを、実測値つきで書きます。デメリットの話が中心です。作る前に知っておくと、そもそも3Dを選ぶかどうかの判断が変わると思います。

目次

デメリット1:メモリで落ちる

画像1枚33MB、6枚で200MBに達しiPhoneのブラウザが落ちる

一番深刻なのがこれです。

3Dの画面に文字を表示するとき、文字をそのまま置くのではなく、いったん画像に変換してから3D空間に貼り付けます。この画像が重い。

画面サイズの画像を高精細で作ると、1枚あたり約33MBになります。文章が6つあれば6枚。それだけで200MBです。

スマートフォンのブラウザが1ページに使えるメモリは、パソコンよりずっと少ない。だから文章を6つ並べただけで、iPhoneは落ちます

対処法

僕が実装で入れているのは2つです。

1つめは前後1つぶんだけを持ち、離れたら捨てる。読んでいる箇所の前後だけをメモリに置き、通り過ぎたものは明示的に破棄します。これで常時3枚程度に収まります。

2つめは画像の解像度に上限をかける。端末が高精細でも、一定以上には上げない。見た目の差はわずかですが、メモリは半分以下になります。

この2つを外すと、文章を追加した瞬間にまた落ちます。節を増やすときは必ず一緒に見直してください。

デメリット2:端末が熱くなる

画面外に出た3Dも描画され続け発熱とバッテリー消費につながる

見落としやすいのがこれです。

3Dは1秒間に何十回も画面を描き直しています。この処理はスマートフォンにとって重い。

問題は、3Dの部分が画面の外に出ても、描き続けてしまうことです。ユーザーがページの下のほうを読んでいる間も、上にある3Dが動き続ける。

結果、端末が熱くなり、バッテリーが減ります。長く読ませたいページほど、この影響が出ます。

対処法

画面内にあるかどうかを判定して、外に出たら描画そのものを止める。これだけです。

実装は難しくありませんが、やっていないサイトは実際に多いです。作っているときはページの上のほうしか見ないので、気づかないまま公開されます。

自分のサイトで確かめるなら、スマートフォンでページの一番下まで行き、そこで1分ほど止まってみてください。本体が温かくなるようなら、この処理が入っていません。

デメリット3:文字が読めない大きさになる

縦長のスマートフォンでは文字が18pxまで小さくなる

縦長の画面で起きます。

文字の大きさを決めるとき、画面の幅と高さの両方を見て「小さいほうに合わせる」という計算をします。パソコンでは問題ありません。

ところが縦長のスマートフォンでは、高さが大きいぶん幅が効いてしまい、文字が18pxまで小さくなりました。本文としては読めますが、3Dの演出の中で見せる大きな文字としては小さすぎます。

対処法

画面幅が一定より狭いときは、計算式そのものを切り替える。高さ基準をやめて幅基準に寄せます。

これは実際に自分の型で踏んで、あとから分岐を足しました。パソコンで作っている限り、絶対に気づきません。

デメリット4:スクロールでガタつく

アドレスバーの伸縮で高さが変わる。100vhではなく100svhを使う

スマートフォン特有の現象です。

スマートフォンのブラウザには、スクロールすると上のアドレスバーが隠れる動きがあります。このとき画面の高さが変わります

画面いっぱいの3Dを「画面の高さぴったり」で作っていると、アドレスバーが動くたびに高さが計算し直され、スクロールを始めた瞬間に画面がガクッとずれます

対処法

高さの指定を、アドレスバーの伸縮に影響されない単位に変える。具体的には 100vh ではなく 100svh を使います。

1文字違うだけですが、体感はまったく違います。既存のコードを触るときに、うっかり vh に戻さないよう注意してください。

デメリット5:動画が再生されない

音声トラックが残っているとiOSで自動再生されない

3Dの演出に動画を使うことがあります。ここでも罠がありました。

iPhoneでは、音声トラックが残っている動画は自動再生されません。「音を消す」設定を付けていても、ファイル自体に音声のデータが入っていると止まる端末があります。

見た目には「動画の部分だけ真っ黒」という形で現れます。

対処法

書き出すときに音声トラックそのものを削除する。音を消すのではなく、データごと無くします。

ffmpeg -i 元動画.mp4 -an -c:v libx264 -crf 24 -pix_fmt yuv420p -movflags +faststart 出力.mp4

-an が音声を削る指定です。

デメリット6:そもそも重い

ページ全体919KBのうちthree.jsが687KB。総転送量は変わらない

最後に、根本的な話です。

3Dを動かすライブラリだけで687KBあります。ページ全体では919KB。スマートフォンの回線では、この重さがそのまま待ち時間になります

読み込む順番を工夫すれば、本文を先に表示させることはできます。ただし総転送量は変わりません。減るのは待たされる時間であって、通信量ではない。

通信量を気にする人が多い相手なら、そもそも3Dは向いていない可能性があります。

それでも動かなかったときの逃げ道を作る

4秒で読み込み画面を消し12秒で静止表示へ切り替える段階的な縮退

ここまで対処法を書きましたが、それでも動かない環境はあります。古い端末、通信が不安定、設定で機能を切っている場合。

だから僕は、3Dが起動しなかったときに自動で普通のページに切り替わる仕組みを入れています。

具体的には、読み込み画面が出たまま4秒経っても3Dが始まらなければ、読み込み画面を消して静止した状態で表示する。12秒経ったら強制的に切り替える。

これで何が起きても「真っ暗なまま何も読めない」状態にはなりません

3Dが動かないこと自体は、そこまで問題ではないと思っています。問題なのは、動かなかったときに何も残らないことです。

作る前に決めておくこと

作る前に決める3項目。実機確認の端末を決めることが最重要

ここまで読んで「面倒だな」と思われたなら、その感覚は正しいです。

スマートフォン対応は、3D制作の中でかなりの割合を占めます。パソコンで動くものを作るのは難しくない。スマートフォンで落ちないようにするほうが手間がかかります

だから作る前に、この3つを決めてください。

  1. スマートフォンからの訪問がどれくらいあるか。半分以上なら、対応の手間を見込んで予算を組む
  2. スマートフォンでは演出を簡略化するか。同じ表現を無理に再現せず、軽い版を用意する選択もある
  3. 実機で確認する端末を決めておく。最低でもiPhoneの実機1台は必要

3つめが特に大事です。パソコンのブラウザで画面を狭めるだけでは、メモリ不足も発熱も再現できません。

まとめ

スマホで3Dを作る結論3点

この記事の核心は3点です。

  1. スマートフォンでの最大の問題はメモリ。画像1枚33MB、6枚で200MB、iPhoneはこれで落ちる
  2. 見落としやすいのが画面外での描画。止めないと端末が熱くなり続ける
  3. 対処はすべて実装で可能。ただし手間がかかるので、作る前に予算と方針を決めておく

正直に書くと、ここに挙げたデメリットは全部、僕が実際に踏んだものです。特にメモリで落ちたときは、原因にたどり着くまで時間がかかりました。パソコンでは一度も落ちないので、コードを疑う場所が分からない。

そしてスマートフォンで落ちるサイトは、落ちたことに気づかれません。訪問した人は黙って閉じるだけです。エラーの報告も来ない。だから公開後も気づかないまま放置されることがあります。

3Dのホームページは、演出としては強い。ただしスマートフォンを主戦場にする事業なら、その手間を払う価値があるかを先に考えたほうがいいと思います。演出で選ばれる商売なのか、それとも別の理由で選ばれているのか。そこ次第です。

自分のサイトが今どう見えているのか、まず確かめたい方へ。URLを入れるだけで、AI検索への対応度を8つの軸で採点するツールを配っています。公式LINEに登録して「AIO」と送ってください。

https://online.zoroya.co.jp/line/open/0RvI2YIDwo6D?mtid=215Go3drIXpK

出典

  • メモリ使用量・文字サイズ・転送量の実測値は、すべて自社の3Dホームページ生成ツールの出力を計測したもの
  • iOSの動画自動再生の挙動:実機検証で確認
  • 100svh の仕様:MDN Web Docs
「良いな」と思ったらシェアしてください!損はさせません
  • URLをコピーしました!
  • URLをコピーしました!
目次