ユーザーブロマガは2021年10月7日(予定)をもちましてサービスを終了します

HTML5とFirefoxの動作について
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

HTML5とFirefoxの動作について

2017-04-22 07:36
  • 2
お久しぶりです。
 前回の「Flash Playerに見る様々な問題点」が、妙にアクセス数の多い記事になり、Google検索してみると関連キーワードで上位に表示されるように。

 どうしてこうなった。

 さて、2年ほどサボってしまって申し訳ない。私事で色々ありまして。
 今回は前回の続き、FlashPlayerではなく、HTML5についての話。といっても、相変わらず「千年戦争Aigis」絡みではありますが。これはこのゲームだけでなく、今後出てくるHTML5で動作する系のゲームやコンテンツすべてに対する話になるので、我慢せずに書くことになりました。
 千年戦争アイギスが、いつの間にかHTML5で動作するゲームになっていた。もしかして最初からだったのか? いやでも、FlashPlayerで動かしていたような記憶が。
■前置きのようなもの
 で。
 最近、千年戦争アイギスをプレイするのが億劫になってきた。理由は「1ステージクリアできるかどうか怪しいから」である。当方Firefox32bit版でプレイしているのだが、とにかく頻繁どころではないレベルでハングアップを起こしてゲームが停止する最悪、ブラウザを巻き込んでクラッシュしてしまう。
 いい加減、頭にきた私は懐石ツール誤字ではない。ネット黎明期を彷徨った勇者なら分かるな?)を走らせ、about:memoryで内部的な動作を見守ってテストした。
 結果から述べれば、これはHTML5で動作するゲームやアプリケーション(ニコニコ動画も例外にあらず)、バックグラウンドで動作するすべての処理に関する問題となることを突き止めた。ゲームの作りが悪いというわけではない。個人的意見を述べるなら、HTML5でよくもまあここまでやったもんだと素直に賞賛したい。
 が。開発環境が恵まれているからなのか、それとも動作試験してるのがGoogle Chromeだからなのか分からないが、あまりにもとんでもない状況になっているようなので、ここでちょっと情報を公開しようと思う。
 Windows7以降の64bit版OSかつ、FirefoxやInternet Explorerとかでゲームプレイしている人がいたら、ちょっと参考になるかもしれない。

 念のために述べておくが、コンテンツを見下したり、批判する意図はない。賞賛する意図もない。あくまで自分と似たような環境で困っている人のための書置きのようなものだ。この点留意して頂きたい。

■環境か、実装か、コンテンツか。

 今回のクラッシュ問題についてだが、前から挙動の怪しさについて指摘していた。
 FireFoxで起動しようとすると何も表示されない→プロファイルかキャッシュがブッ壊れていて、FireFoxをリフレッシュすると何事も無かったかのように動き出す
 ・・・とかね。ページやタブを開きすぎていた場合、「Out of memory」とか表示されて、こちらも動かなかったり。(e10s、つまりFireFoxの並列処理機能でメモリが無駄食いされていてゲーム側までメモリが回ってこない、なんてことも、しばしばあった)

 ここ最近、FireFox(32bit版、通常リリースのほう)でゲームを起動すると、ゲーム中にハングアップしたり、ブラウザを巻き込んでクラッシュしたりする頻度が劇的に増えた。ゲームにならない程に。で、先に書いたように、これはFireFoxに実装されている機能というより、実装そのもの、あるいはプラットフォーム依存の問題なのではないかと私は感じた。

ここで、ちょっとコンピュータに詳しい人なら知っている「メモリの壁」「32bitと64bitの壁」について、ふつーの人でも分かりやすい程度におさらいしようと思う。

オペレーティングシステムが32ビットの場合、
・32bitアプリケーションは2GB(実質1.7GB程度?)まで物理メモリを扱える
・64bitアプリケーションは動作しない
・オペレーティングシステム自体は4GBの物理メモリがあっても3GB少々までしか認識できない(Win8以降の32bit版の実装については詳しくないので割愛)

 という制約がある。語弊を恐れずに述べれば、ディスクを管理するファイルシステムにFATというものがあるが、あれがFAT12からFAT16、そしてFAT32になったり、exFATなんてのが出てきたのも、これ絡みの問題である。ようは、一度に処理できるデータ量の問題で、Windowsの場合は1バイト8bit(1オクテット)で、2バイト処理とか4バイト処理が「ひとつの」処理単位だった時の名残というか、つまり古い規格の問題だったわけだ。
 だから「理論上は4GBまで物理メモリを扱える」32bitのオペレーティングシステムでも、処理の都合上、あるいは実装の都合上、4GB目一杯までメモリを認識することができなかった、という話。

オペレーティングシステムが64ビットの場合、
・32bitアプリケーションは3G少々(実質3.2GB~3.3GB程度?)まで物理メモリを扱える
・64bitアプリケーションは、物理メモリを全部使える
・オペレーティングシステム自体が扱えるメモリサイズは「エディション」(実装)によって異なる

 となる。同じ64bitのWindows7であっても、例えばWindows7 Home Premiumではメモリは16GBまでしか認識しない(例え32GB搭載していても超過分は無視される)、Professional以上だと192GBまで認識できる。余談となるが、確か現在発売されているWindowsの、最新かつ最高グレードのやつは、メモリが24TB(テラバイト)まで認識できるはずだが、まあそこは置いておく。
 共通認識というか、ここで注目すべき点は「64bitオペレーティングシステム上で動く32bitアプリケーションの扱える物理メモリ量が、32bitオペレーティングシステムで扱えた物理メモリ量とだいたい等しい」ことだ。

 そう、コンテンツより、実装より、環境がまず第一の壁なのだ。
■壁が見えない処理

 話を戻そう。FireFoxは通常リリースされているものは、32bit版である。コンピュータに物理メモリをたっぷり積んでいても、32bitアプリケーションなので3GBの壁が存在するのだ。

 最近のウェブコンテンツは昔と違って、リッチだ(データ量が多い)。ちょっと見栄えの良いサイトや動的コンテンツ、リアルタイム処理を要求されるようなところでは、データ通信量もそうだが、メモリを壊滅的に使う。利用者の環境が「最近の事情に合った どんぶり勘定」されて作られているのだ。まったく、困ったものだ。

 千年戦争アイギスとか御城プロジェクト:RE(だっけ?)なんかを動かすと分かるが、とにかくメモリを要求される。これでもか、これでもか、と。後者は確かFlashコンテンツだったと思うが、間違っていたら申し訳ない。
 まあ別にゲームに限った話ではないんだが、リッチなコンテンツは、とにかくメモリ要求が激しい。これはウェブブラウザで見るウェブサイトだけでなく、アプリケーションも同じなんだが。私の環境はWindows 7 Proで物理メモリは16GBほど積んであるが、こういう環境だととにかくメモリ問題に引っ掛かる。最近のコンテンツに合わせてアプリケーションを動かすと、メモリの壁にブチ当たってアプリケーションがクラッシュする。

 長い前置きになってしまったが、結局のところ、「壁が見えない(見えてない)処理」によって、利用者が不都合を被っている。
■解決策について
 FireFoxの場合、これを解決する手段はある。FireFox Developer Editionである。これは64bit構成されているFireFoxで、32bit環境では動かない(はず)。メモリの上限を気にすることなく使える。また、Flash Playerも64bit環境が既にリリースされている。リリースされたのは、かなり前の話だけど。これを使えば、上記のような問題はまず発生しない。使えるメモリの上限が、「許される限り、すべて」だからだ。最近のInternet Explorerもしくは後継のEdge?だっけ?は、恐らくOSのエディションに沿った実装がされていると思う。たぶん。

 注意すべきところは、コンテンツ制作側が、64bit側での動作を想定していないことが考えられる点。32bitブラウザ環境でテストしてリリースしてて、64bit側は確認していないよ、ということ。(逆も考えられる、64bitでチェックしてるから32bit環境では分からん、という場合。但し、単一のアプリケーションの場合はそもそも動作しない)
 ここらへんをちゃんと考慮したうえで、状況に応じてウェブブラウザを変更したり、アプリケーションやコンテンツを取り扱いたい。というか可能なら両環境でちゃんとテストして欲しいよね。

 勿論、どの環境においても、コンピュータの物理メモリは潤沢に欲しい。現在のウェブ環境下で、物理メモリが4GBに満たないコンピュータは、それだけで動作が厳しいと思う。お財布が痛いのは理解するが、貧弱な環境でリッチなコンテンツを楽しむのは無理があることも心得ておこう。

■HTML5についてそして何があったのか

 実は私はHTML5が大嫌いだ。設計思想が先進的なのは理解できるが、なんでもかんでも基本は1言語で処理してしまえ、といわんばかりのパワープレイ実装が大嫌いだ。
 おそらく、動的かつリッチコンテンツなFlashを駆逐する最強の対抗馬なのだろうが(恐らくと述べているがほぼ確実にそれっぽい)、それが利用者の環境をブッ壊すような代物になっているのがとにかく気に入らん。
 ビデオの再生サポート、描画を標準機能としておき(従来はユーザー環境依存)、それにJavaScriptやAjaxとか、そういうものを組み入れてダイナミックなウェブコンテンツが形成できる。まあこれは分かる。
 ただ、実装されている機能がデカ過ぎて、どうにもなってねーんじゃねぇの?と、私は考える。

 例えもへったくれも無く、「千年戦争アイギス」で例えよう。

 まず、ブラウザを起動する。落ち着いたら、ゲームプレイ画面を開く。タイトル画面が表示され、データを選択する。ここまでは別に良い。
 データを選択すると、コンポーネント(実際のゲームデータ)のダウンロードが始まる。ダウンロード量は150MB程度だ。これをダウンロードし、展開するだけでメモリは300MB近く使用される。

 FireFoxにはガベージコレクト機能(以下GC)が当然実装されていて、これは「使っていないメモリをいったん掃除する」機能なのだが、状況によってはロード・ダウンロード中にこれが起きる。GCがロード中に発生するのは、他のタブやページが起因することもあるので、正常な動作のうちには入るだろう。ただし、邪魔な割り込み処理が入って瞬間的に排除されるが、どっちにしてもゲームの動作には必要なので結局メモリは再確保される。

 ミッションを選択してゲームを開始すると、状況は一変する。キャラクターの会話で使用メモリが増え、ミッション開始で一気に使用メモリが増える。ユニットを配置してメモリが増え、ユニットを選択して瞬間的にフリーズし(裏でGCが働いている、そしてまたもメモリ再確保)、さらに固有能力があるユニットが混じると計算が複雑になるのかさらにメモリを要求される。
 これを執筆している現在の「緊急ミッション」は「オーク格闘家の王子軍入門」なのだが、これの最終ミッションは凄まじいことになっている。会話が終わってスタートした瞬間に、数十を超える敵ユニットが一気に配置、さらに自分たちのユニットを配置する状況。この段階でメモリを2GB要求された。自軍ユニットを3~4ほど置くと、さらにメモリのおかわりを要求され、ユニットのスキルを使用するとさらにさらにメモリのおかわりを要求される。
 ここでGCが働くと、「メモリのごみ掃除」「メモリの再確保」「メモリの追加要求」がほぼ同時に発生する。ただでさえ32bitの環境ではカツカツな状況、しかもGCしても効果がない状況(私は仮想メモリをゼロにしている)でこれをやられると、ハングアップが発生する。(メモリの追加要求をされても、もう1アプリケーションあたりのメモリの上限量まで使い切ってしまっている)
 こうなると、他のタブを開いても真っ白、再起動要求をしても応答しない。そして少しするとブラウザが動作限界を迎えて突然死する。
 おそらく「掃除中に瞬間的にメモリが空いた瞬間に追加要求されたうえ、再確保でまとめて持っていかれて、再確保も追加要求もどっちも出来なくなる手詰まり状態でロックされてしまった」という状況なんだと推測する。

 ちなみに、64bit版のFireFoxへ切り替えたところ、ちゃんとクリアできた。但し、メモリの要求量を確認したところ、ピークで4GB以上を要求されていた。これはアプリケーション全体ではなく、コンテンツを開いていない、落ち着いた状態のメモリ量を差し引いた量である。(アプリケーションの総使用メモリ量は5GBに迫る状況だった)

 これでは32bitアプリケーションのブラウザで動作するわけが無い。

 これはまず、(ゲーム)開発側のアプリケーション実装の問題がある。仕方が無い点もあるが、ユニットが増えてグラフィックが増えて、計算が増えて、とにかく常時処理とメモリが必要になるうえに、各種効果を使えば即座に計算を変更してグラフィックも変えなければいけない。破綻は目に見えている。かといって逐次処理(必要になった都度ダウンロードする)はオーバーヘッド(処理の無駄)の発生となるのでパフォーマンスの深刻な低下をもたらす(グラフィックなりをダウンロード完了するまで次の処理に進めない)。
 これらはトレードオフだから仕方が無いのは理解できる。が、それにしたってこれは異常だ。もうちょっと何とかならないものか。

 アプリケーション(ウェブブラウザ)側の処理の問題も大きい。私は仮想メモリを切ってコンピュータを動作させているが、ブラウザ側には「ディスクキャッシュ」機能がある。使っていないタブのデータを一時的にディスクへ収納したり、取り出したり出来る。やろうと思えばフォアグラウンド(或いはフォーカスされている、つまり現在実行中)のタブに対しても、ここらへんの処理は多少出来るはず。スクリプトから要求された通りにガンガンにメモリを明け渡してしまって良いのだろうか。また、メモリ不足でクラッシュする前に、まだ出来ることがあるのではないだろうか。(そうは言っても、1つのページで数ギガバイト単位のメモリを呼び出される処理のほうが異常なのかもしれないが)
 でも、このままでは、例えばウェブコンテンツとしてのエディタ(文章だろうがドロー[描画]系だろうがなんでも良い)やリアルタイムな通信を要求されるもの、生データをダウンロードしてブラウザ上で描画するもの(例:株価の長期チャートのようなグラフ)等、ウェブベース・クラウドベースなアプリケーションが今後増えるにあたって、こういう事態が頻発することになりかねない。

 結局のところ現状は、ユーザーが出来ることの有無、というより、ユーザーが「割と最新の環境にあること」を強いられている状態だ、と言わざるを得ない。
 開発者は余裕を持った環境でテストできるかもしれない。でも、ユーザーは開発者とは違う。マシンは自腹で購入するものなのだから。会社が用意する「理想のマシン」とは何もかも違う。

 まったく。環境の誤差を吸収したり、あるいは感じさせないために生まれたはずの規格が、ハードウエアやクライアントソフトウエアに振り回されるとは、何とも皮肉な話だな。



広告
×
やっぱりブラウザの壁のような物は感ぜざるを得ないですな現状。まず頻繁にタブがクラッシュする。
今現在も度々アイギス環境だと落ちますねぇ…骨董品ノートの8GB、内蔵NVIDIAがちょっぴりある程度。
動作環境としては快適ではあるんだけど負荷が掛かる所では不安になりますね。

Chromium派生のSRWIron、kinzaといった物を使用していますが、単純にブラウザ内蔵のフラッシュプレイヤーとシステムにインストールしたフラッシュの競合かなと思い起動オプション類でブラウザ側のフラッシュを停止。つい最近まではこれで良かったんですが…アプデ後毎に何やら怪しい事に処理や対策方法が違うみたいな感じですね。
WIN7かWIN10かでも対処法が変わる感じ…Firefoxのそんなエディションがあったんすね試して見てどうなるか…。
40~60万KB程度でアイギスは動いてるけど(瞬間3桁万いくこともあるが…)それでも止まらず動いていた事もあるんですが、PC側にも余力がある内からタブクラッシュが頻発。
クローム共通のショートカットに仕込む「起動オプション」の一つで作成プロセス数を弄ってメモリ消費を抑えるといった事をしていたのが仇になった可能性もあります。以前はそれでブラウザごとクラッシュする現象と無縁ともいうべき蜜月を過ごす事が出来たんですが、昨今になってものすごくアイギス環境が不安定になったなぁという印象です。

フラッシュゲーム側もクラッシュするし、HTML5のアイギスもクラッシュするし・・・ブラウザの限界なのかなーと。
まぁ、まだ試して居ない事が沢山あるんで何かしらでクラッシュさせないように出来るかも知れないですが…正直、もうお手上げですね。笑
40ヶ月前
×
 コメントありがとうございます。
 運営曰く「Chromeでプレイしないと動作保障できないよ」と言っていますね。しかしそれでも物理メモリの問題は解決できないですね。
 FireFox Developer Editionは64bitアプリですので、32bit環境では動作しない可能性があります。64bit環境なら、格段に安定性があがります。が、物理メモリ8GBは必須でしょう。グラフィックボードはおそらくオンボードで十分(ハードウエアアクセラレーションが使われている場合は話が別)でしょう。

 ブラウザの限界というよりも、パワープレイ(CPU&メモリ)に頼る以外に現在のウェブ環境は有り得ない、という感じなのでしょうか。

 HTML5は非常に便利ですが、しかしながら問題点も多いです。互換性と柔軟性のために、処理能力とメモリをべらぼうに食いつぶす感じです。FLASHは嫌いですが、じゃあどっちが良いのかというと正直どっちもどっちな気が・・・。
40ヶ月前
コメントを書く
コメントをするには、
ログインして下さい。