TOUCHLINE / PERFORMANCE
5つの操作を1/5以下へ
ゲームの計算・記録を維持し、保存と繰り返し計算を短縮した。
結果
変更前と変更後を交互に3回ずつ測定。新規キャリアと1月まで進めたキャリアの両方で、全5操作の中央値が変更前の20%以下になった。同じ初期状態・乱数条件で、保存したゲーム内容、結果・スタッツ・疲労・MOTMが一致した。
新規キャリア — 9月15日
| 操作 | 変更前 | 変更後 | 変更前に対する割合 |
|---|---|---|---|
| トレーニング開始 | 2.44秒 | 0.28秒 | 11.3% |
| 翌日へ | 3.32秒 | 0.65秒 | 19.6% |
| メンバー確定 | 3.39秒 | 0.25秒 | 7.3% |
| キックオフへ | 2.58秒 | 0.19秒 | 7.5% |
| 試合終了・MOTM | 2.10秒 | 0.14秒 | 6.8% |
進行済みキャリア — 1月25日・自チーム27試合
| 操作 | 変更前 | 変更後 | 変更前に対する割合 |
|---|---|---|---|
| トレーニング開始 | 11.17秒 | 0.39秒 | 3.5% |
| 翌日へ | 11.52秒 | 0.65秒 | 5.6% |
| メンバー確定 | 13.30秒 | 0.63秒 | 4.7% |
| キックオフへ | 13.25秒 | 0.55秒 | 4.1% |
| 試合終了・MOTM | 21.72秒 | 0.75秒 | 3.5% |
本PCのEdge、390×844px、独立したブラウザーで測定。実際のボタンの処理から、保存・画面更新を終えて2フレーム描画するまでを含める。試合終了は終了済みエンジンの集計・MOTM・保存・描画を測定。試合全体の再生時間ではない。外部画像の通信待ちは除外。端末負荷で時間は変動し、iPhone実機での数値は未測定。
原因と変更
最大の待ち時間は、操作のたびにキャリア全体をLZ圧縮して保存する処理だった。さらに、国内杯の日程に同じクラブの全選手データを何度も重複保存し、他クラブの試合で同じ選手適性・個別指示・所属名簿を繰り返し評価していた。
- ゲームを計算同じ評価を繰り返す
- 保存全体を再圧縮日程にクラブ情報を重複
- 途中画面も描画最終画面へ差し替え
- ゲームを計算同じ入力の評価を再利用
- 変更した部分を圧縮クラブ情報は一度だけ保存
- 最終画面を描画処理中表示・エラー復帰は維持
- 保存を項目ごとに分割し、変更のない項目は圧縮結果を再利用。内容全体を比較するため、既存データの直接変更も検知する。
- 同一クラブIDでも、時期・階層・内容の異なるクラブ記録を区別する。読み込む際は従来のゲーム構造へ戻す。
- 通常は高速なGZIPを使用。大きなシーズン記録だけ圧縮率を上げ、主保存と復旧用保存の両方を維持する。
- 戦術・適性・所属名簿を必要な範囲で再利用し、能力・体力・個別指示・移籍・ローン変更を反映する。
- 操作中の中間描画をまとめ、選手写真の識別も事前索引へ変更する。
使用したOSS:fflate 0.8.2(MIT)。公式npm配布の整合性を検証し、ローカルに同梱した。
保存とゲーム内容の確認
旧JSON・LZ形式を読み込める。保存失敗、二重操作、他タブの古い保存による上書き拒否、再保存、ロールバックを維持した。ユーザーのキャリアは初期化していない。
- 旧・新保存の移行、Unicode、配列順、同じIDの異なるクラブ記録、直接変更、保存・再読み込み。
- 40条件の試合で、変更前のイベント・統計・交代・疲労・乱数状態と完全一致。
- 30スカッド・13システムの相手配置、移籍・ローン・返却時の所属名簿の一致。
- トレーニング、試合前の確定ロック、Club Base/Match Plan、自動日付進行、保存失敗時の復帰。
- PL380試合、4海外リーグ1372試合、欧州3大会531試合、国内7杯を完走。主保存・復旧用保存・再読み込みを確認。
全シーズンの検証では、当初の新方式が保存上限を超えたため、大きなセーブの圧縮率を上げた。再検証時は約243万文字の主保存と同一の復旧用保存を維持できた。