Tsuyoshin blog

所属団体とは関係なく、個人的なblog

iosアプリからのwebviewはレンダリングは通常のブラウザに比べたら遅いよねという話

はじめに

  • あるプロダクトでIOSのネイティブアプリからwebviewで既存のページを参照した時のレンダリングのメトリックスの話
  • そもそも半分わかっていた事ではあるが、普通のブラウザでのレンダリングとネイティブアプリからwebviewのレンダリングを比べたら普通のブラウザのが早いに決まってるがそれを目の当たりにした話

計測したツール

  • New Relicのブラウザ版
  • 下記のグラフはネイティブアプリのwebviewから既存ページを参照をはじめた時を境にしたNew RelicのApdexのグラフの図です
  • アプリケーションサーバのパフォーマンスは変わらず
  • フロントエンドのパフォーマンスだけが悪化
  • このグラフの波があった時期になんの変更をしているかと言えばネイティブアプリからwebviewで既存ページにアクセスをはじめたぐらい

少し考慮をすべき点

  • ネイティブアプリではよく画面の遷移をよりスムーズにする為に一画面を描画するのにあえて複数ページ or 複数画像を事前に読み込んでたりするのでクライアント(モバイル端末)の仕事が多い点がある
  • でも数値的に顕著に悪化してしまってるのでこれはこれで考えどころ

まとめ的に言いたい事

  • フロントエンド周りの数値をKPIに据えて頑張っているチームはネイティブアプリのwebviewの部分はノイズになる可能性があるので外して計測すべし
    • 一概には言えないけどネイティブアプリの利点をフルに活用して必要な部分だけAPI化してネイティブアプリで描画するべし
    • ネイティブアプリのwebviewでのレンダリングのメトリックスは除外するようにNew Relicの設定を変えるべき
      • Enable via New Relic APM -> Copy/Paste Javascript Codeに切り替えてUAをサーバ側で判定して計測JSを出力する方法しか今のところ無さそうです
  • だいぶ今更だけど、ほぼwebviewだけの側アプリはユーザ体験としてはむしろマイナスんじゃなかろうか
    • ネイティブアプリを出す理由は色々とあるけど、より快適にサクサク使えるという意味においてはwebviewはなるべく無くすべき