TOUCHLINE / STARTUP REFACTOR

旧画面の再描画を止め、
現在の画面を一度だけ表示する

旧デザインが順番に現れる原因と、起動・保存・描画の整理。

2026年9月29日 / 実装・検証記録

原因

指摘の通り、追加ファイルを使う改修が積み重なっていた。変更前のHTMLには103本のscriptタグと45本のゲーム用スタイルシートがあり、37か所の独立した起動時描画と、9段の描画関数の差し替えがあった。読み込み途中に旧画面を表示し、後続の処理が完成するたびに画面全体を作り直していた。

新規キャリアの計測では、メイン画面のHTMLを45回差し替えていた。ファイルが多いことだけでなく、初期化と描画を各機能で混在させていたことが問題だった。103本すべてが不要な旧デザインのファイルではなく、選手データ、規程、試合・成長モデルなども含まれる。

変更した構成

起動の流れ
  1. 現在のアセット順序を保つdefer読み込み
    完成したゲーム用CSSを1本で配信
  2. データ準備キャリアと基準編成の復元
    必要な大会・移籍の更新
  3. 一度だけ描画現在の画面と5分類のナビ
    準備中の旧画面は描画しない

作者用のCSSファイルは保守のために残す。現在の画面が使う共通定義や大会テーマも含まれるため、古いファイル名だけを根拠に削除していない。CSSの統合は既存の優先順位を保ち、ゲームのデザイン自体を変更しない。試合・成長・移籍などのモデルをひとつのスクリプトに無理に結合してはいない。

計測

新規キャリアの画面差し替え45 → 1回
新規キャリアの保存5 → 2回
ゲーム用CSSの読込45 → 1本
独立したテスト環境変更前変更後
新規キャリア・file起動約7.0秒約5.3秒
保存済みキャリア・HTTP起動約2.9秒 / 44回描画約2.7秒 / 1回描画

このPC、Edgeの独立したブラウザー、390×844px。外部画像へのリクエストを止め、アプリの準備完了までを測定した一組の比較。初回の国内杯・他リーグの準備を含む。ユーザーのキャリアを操作した結果や、iPhoneでの保証値ではない。実行負荷・キャッシュ・保存されている期間で時間は変動する。

新規キャリアでは国内大会の準備に約2.1秒、他リーグの結果の補完に約1.2秒が必要だった。保存済みキャリアで同日まで補完されている場合、これらの更新はそれぞれ数ミリ秒で終了する。画面更新の重複を除いた後も、データファイルの取得・解析、未処理の試合の集計などは必要になる。

保存・動作の確認

実際のアクセス先である127.0.0.1:8765で、同じ保存済みキャリアを変更前・変更後のコードへ読み込み比較した。日付、選手の並び、4–3–3の基準編成、戦術値、戦術プラン、移籍台帳・交渉、既存の試合結果、保存されている成長レーティング・育成量・出場記録を確認した。キャリアの初期化・巻き戻しは実施していない。

検証:tests/touchline-startup-browser.cjs、touchline-pre-kickoff-browser.cjs、touchline-matchday-plan-browser.cjs、touchline-loading-browser.cjs、touchline-navigation-cup-centre-browser.cjs、touchline-club-calendar-browser.cjs、touchline-world-transfer-agreement-browser.cjs。

以後の改修方法

新しい画面はTouchlineUI.viewへ登録し、表示前後の機能はbefore / afterへ登録する。起動直後のrender呼び出しや、以前のrenderを包んで差し替える追加をしない。必要な起動処理はTouchlineBoot.taskへ登録する。

CSSを編集した後は、node scripts/build-touchline-styles.cjsで配信用ファイルを生成する。登録順はoutputs/assets/touchline-styles.jsonで管理し、生成したCSSのハッシュをURLへ付けて旧キャッシュとの混在を防ぐ。既存のファイル編集が画面に反映されない状態を、さらに上書き用のデザイン層を追加することで解決しない。

計測値と検証の記録(JSON)