Doja 平台對 JAR 檔案與 ScratchPad 檔案大小有嚴格限制,各版本上限如下表:
| 版本 | JAR 上限 (KB) | ScratchPad 上限 (KB) |
|---|---|---|
| Doja 1.0 | 30 | 50 |
| Doja 2.0 | 30 | 100 |
| Doja 2.1 | 30 | 200 |
| Doja 2.2 | 30 | 200 |
| Doja 3.0 | 30 | 200 |
| Doja 3.5 | 100 | 400 |
為了在限制內發揮最大功能,以下整理常見的程式碼與資源優化技巧。
JAR 主要包含圖片、音效、資料檔與編譯後的 class 檔。最直接的方式是減少圖片數量;此外,縮小單張圖片尺寸、降低色彩數(如從 24-bit 降為 8-bit 或使用調色盤)皆能有效減小 JAR 體積。
將部分資源(如關卡資料、大型圖片)放置於 ScratchPad,程式啟動時從網路下載並寫入 ScratchPad,執行時直接讀取,避免佔用 JAR 空間。
Class 檔的常量池儲存套件名、類別名、方法名、變數名等字串,且常量池在類別間共享。減少類別數量、合併功能相近的類別,可降低常量池佔用空間。
縮短類別命名可直接減少 class 檔大小。例如:
// class 1
public class HelloWorld { public void start() {} }
// class 2
public class A { public void start() {} }
Class A 比 HelloWorld 少佔約 18 位元組。
將簡短方法的實作內聯至呼叫處,可減少方法表項目。範例:
// 程式 1:618 bytes
public void start() {
Panel p = new Panel();
add(p);
Display.setCurrent(p);
}
public void add(Panel p) { p.add(new Label("Hello")); }
// 程式 2:530 bytes
public void start() {
Panel p = new Panel();
p.add(new Label("Hello"));
Display.setCurrent(p);
}
使用簡短命名(如 a()、x)取代描述性命名,可減少常量池字串長度。
同名的方法與變數在常量池中僅儲存一份字串,進一步節省空間。
區域變數使用堆疊記憶體,成員變數則佔用堆疊;優先使用區域變數可減少 class 檔中欄位資訊。
多個同類型變數改用陣列宣告,隨變數數量增加,節省效果明顯:
| 變數數 | 逐一定義 | 陣列定義 |
|---|---|---|
| 1 | 296 bytes | 303 bytes |
| 2 | 330 bytes | 307 bytes |
| 3 | 364 bytes | 311 bytes |
| 10 | 607 bytes | 319 bytes |
固定字串直接寫在程式碼中,避免額外常量欄位;或將字串置於 ScratchPad 或 ADF 的 AppParam 中。
// 檔案 1
public void start() {
MyCanvas cs = new MyCanvas();
Display.setCurrent(cs);
}
// 檔案 2(較小)
public void start() {
Display.setCurrent(new MyCanvas());
}
實際專案中需視情況取捨,兼顧可維護性與體積限制。