03
2016

ティラノスクリプトで作成したゲームをWEBで公開したら重すぎる件についての対策 その3

Category技術
(記事:じゅんくん)

その3です。

その1とその2で

「シナリオファイルの取得に時間がかかると不具合の原因になる」
「シナリオファイルが変わる場合はその都度サーバーからシナリオファイルを取得しに行くので時間がかかる」

ということを書いてきました。
今回は対策について書いていきます。

以下の三つの対策を考えてみました。

1.すべてのシナリオを一つのファイルに記述する
2.ブラウザでプレイできる形式での公開はしない
3.キャッシュを使う

それぞれの対策について詳しく解説します。


1.すべてのシナリオを一つのファイルに記述する

シナリオファイルが変わることによって遅延が発生するのであれば、
すべてのシナリオをfirst.ksに書いてしまえばサーバーアクセスが発生しなくなることになりますね。
ですが、すべての処理を一つのファイルに書くというのは保守性が悪いですし、
そもそもティラノスクリプトでは「first.ks」と「make.ks」の最低でも二つのシナリオファイルが存在するのでこの案は没です。


2.ブラウザでプレイできる形式での公開はしない

その1でも話した通り、
シナリオファイルの取得に時間がかかるのはブラウザでプレイした際には「サーバーに取得しに行っているから」なんですね。
ですがWindowsアプリ、Macアプリ、スマートフォンアプリとして公開した場合は違います。
全ての素材は最初にダウンロードが完了しているので、
シナリオファイルが変わる場合は「サーバー」から取得するのではなく「ローカル」から取得します。
ネットワークを介さないので一つ一つのファイルの取得があっという間に終わります。
「シナリオファイルの移動を伴う[call][jump][macro]」も使い放題です。
ブラウザでプレイする形式では公開しなくてもいいや、という人であればこの対策で十分かと思います。


3.キャッシュを使う

ブラウザには、一度取得したファイルを貯めておいて、
再び同じファイルが必要になったらサーバーへ取得しに行くのではなく貯めておいたファイルを使う「キャッシュ」という機能が存在します。
「キャッシュ」はローカルに貯めておくので、取得するのにネットワークを介さず高速です。

ティラノスクリプトではこのキャッシュ機能が、シナリオファイルの取得に関してのみオフになっています。
キャッシュをオンにしてやれば、シナリオファイルの取得が高速になり不具合解消につながります。

キャッシュのオンオフ切り替えは以下で出来ます。
tyrano/libs.jsの中の$.loadTextという処理の中に、

url: file_path + "?" + Math.floor(Math.random() * 1000000),
cache: false,

となっている部分があります。
これを

url: file_path,
cache: true,

に変更してやります。

これでキャッシュが有効になります。

ただ、キャッシュが有効になっているということは、
シナリオファイルを更新してもキャッシュからファイルを取得してしまうので変更が反映されないということになってしまいます。
なので、こんな感じで↓

url: file_path + "?" + 1,
cache: true,

file_pathに適当な固定値を付与してやれば、キャッシュからではなく新たにサーバーからファイルを取得しに行ってくれます。
ゲームのバージョンアップのタイミングで数字を増やしていけば、
バージョンアップするたびにキャッシュが無効になるので常に最新の状態を保つことができます。


今回紹介した対策のうち、バディコレでは3の方法を採用しています。
(まだ適用できていないサイトもありますが・・・)
3の方法が運用するうえで一番楽だという判断です。

長くなってしまいましたが、ティラノスクリプトで作成したゲームをWEBで公開したら重すぎる件についての対策でした。
記事でわからない部分などあれば、コメントでもtwitterでもなんでもいいので質問していただければ可能な限りお答え致します。


ここまで読んでいただきありがとうございました!
スポンサーサイト

0 Comments

Leave a comment