Top/Tips/高速化
  トップページへ   [ 一覧 | 検索 | 最終更新 ]   [ 差分 | 履歴 | 凍結 ]

高速化チューニング

警告!ここにある修正を加えなくても、通常は全く問題ありません。
予期しないトラブルの可能性もありますので、注意して利用してください。

はじめに

ヒトバシラ上等!な方に贈る、AYAv5用高速化チューニング。
イラチな方に最適です。

起動を高速化する

AYA利用ゴーストは、等しく起動が遅い!という難点を抱えていることが多く、悩みの種の方も多いでしょう。ここでは、起動高速化に関する簡単なチューニングを扱います。

たくさんゴーストをインストールした環境で起動が遅い

総ゴースト数が4桁程度まで膨れ上がった昨今、3桁レベルのインストール数の環境も多いかと思います。 ……それは良いのですが、本体側からのゴースト情報の通知も巨大になり、その解析にAYAが手間取るという難儀な問題も出てしまいます。

かんたんなTips

人柱度:★★☆☆☆

解決方法は簡単で、aya_shiori3.dicの最初の方にある #define の並びのうちいくつかを

#define IGLIST_MAX 0
#define REQUEST_LINES_LIMIT 30

などのように修正します。

IGLIST_MAX
本体に頼らず、AYAが内部でひたすらインストール済みゴーストの情報を探索する機能があります。それを有効にするかどうかを示し、0で無効、-1で無制限です。必要ない場合は無効で全く問題ありません。
REQUEST_LINES_LIMIT
本体とゴーストの間の通信は、何行にもわたる文字列で行われます。この設定は、それを解析する行数に制限をかけることで、大量の通知の解析を手間取らないようにしよう、という考えから生まれたものです。

なお、インストール済みのゴースト/バルーンなどの情報を扱いたいゴーストでは、これらの設定変更をするとトラブルの元になります。

もうちょっとやってみたい人向けTips

人柱度:★★★★☆

……さて、それでもまだ我慢ならねぇ!という方向けTips。ゴースト情報取得自体を無効にしてしまいましょう。

aya_shiori3.dicの600行目以降あたりに、On_installedghostnameというものがあるかと思います。これを全てコメントアウトしてしまいます。

/*On_installedghostname
{
    (ごにょごにょ)
}*/

こんな感じですね。

ランダムトークの出るのが遅い

ついに力作が完成!なんとランダムトークが数百個もあるゾ!!
……でも、遅いんだけどこれ……

という、ある種特殊な方向け高速化Tipsです。

サポート掲示板か日記あたりでumeiciさんが言っていたTipsの発展形です。最新のAYAで可能になりました。

シングルクオートによる高速化

人柱度:★★★★☆

ランダムトークは多分aya_aitalk.dicに書いているかと思います。

RandomTalk
{
   "ごにょごにょ"
}

こんな感じですね。

" " でくくって、SakuraScriptをナマでずらずら書いていくわけですが、実は新しいバージョンのAYAでは、" " 以外にも ' ' が使えるようになりました。

なんでそれが関係あるの!という説明の前に、先に変更例を書いてみます。
とりあえず理屈はええからすぐ使いたい!という人は、これをコピペして使ってください。

RandomTalk
{
    TOSTR(EVAL(CHR(0x22)+RandomTalkEx()+CHR(0x22)))
}

RandomTalkEx
{
    'ごにょごにょ'
}

はい、元あったRandomTalkの名前を適当に(RandomTalkExとしました)変えて、中身の文章の囲み方を ' ' に変えて、妙な命令のあるRandomTalkをつけくわえただけです。*1

……それでは、からくりを説明します。

AYA5の新しいバージョンで導入された ' ' の意味は、%()を展開しないです。
詳しくはAYAのマニュアルを見てほしいのですが、%hogehoge、やら、%(hogehoge)、やらで適当に変数やら関数やら式やらを埋め込めるという機能が、' ' 囲みにするとすべて無効になります。

元の " " の状態では、埋め込みする処理をすべて解析して結果とする処理が必要なのですが、' ' ですと囲まれた部分はただの文字列扱いですので、ほとんど何も処理する必要がありません。

ここでAYAの挙動を思い出していただきたいのですが、関数内にあるものはすべて評価されて、そのうちの1つがランダム(またはオプションに応じてどれか1つ)結果とされます。

……というややこしい話はほったらかして、要するに、ランダムトークをン百個書いたら%()の処理もン百回しなきゃならんということで、重くなるのは想像できるかと思います。*2

さて、これでRandomTalkExと名前を変えた部分の説明は終わりですが、このままですと%()の中身がちゃんと埋め込まれないという事態になってしまいます。これを解決するのが、

TOSTR(EVAL(CHR(0x22)+RandomTalkEx()+CHR(0x22)))

というわけです。TOSTRは「文字列として扱いなさい」という命令ですがここでは深い意味はありません。キモはEVALとその括弧の中身です

EVALは「括弧でくくって渡された中身をAYAのスクリプトとして実行しなさい」という命令です。そして、CHR(0x22)は " のことです。

……何が起こっているのか大体読めてきたと思います。EVALが実行するスクリプトは、

" + RandomTalkExの結果 + "

となり、%()の埋め込み処理を行う式を作っています。
延々ン百回も%()の処理をしなければならなかったものが、このEVALで囲まれた部分の1回分で済むわけで、これが軽くなるカラクリですね。

もっとマニアックに攻めてみたい方向け

ほかのゴーストに使える形ではない高速化の工夫などは

http://ssp.shillest.net/ghost.html

のEmily/Phase4にいろいろ導入されています。見本にするにはかなりキチャナイ辞書ではありますが、話のネタにはなるかと思います(苦笑)


*1 外側のTOSTRはたぶんいらないと思いますけど念のためです。気になる方はひっぺがして下さい。
*2 AYAの本当の内部処理を知っている方からツッコミが入りそうですが、ここでは分かりやすい説明にとどめました