SRFI-64 ライブラリをシリアライズしてもサイズが大きい
SRFI-64 ライブラリをシリアライズしてもサイズが大きく、ロード時間がもったいない。まじめに調べる。
現状
サイズは 1.1MB 。大きい。
1139810 2009-03-29 12:59 testing.sls.fasl
(import (srfi :64 testing)) だけのプログラムのプロファイル結果。
time% msec calls name location 86 60 1 fasl-read 14 10 0 (<top-level>) ** 70 ** total
参考値として (srfi :42) 。
--rw-r--r-- 1 taro taro 4.1M 2009-03-29 12:59 eager-comprehensions.sls.fasl
調査
マクロを利用しているライブラリのサイズが肥大化している。マクロを利用すると Record が多用されるので恐らく Record のシリアライズに問題があるはず。
eq? の意味で等しい Record / Rtd を同一視せず、登場のたびにシリアライズしてた。これか。
方針
Symbol や String と同様に lookup table を作りそこに放り込もう。
Record のシリアライズは思ったほど簡単ではなかったがうまく書けた。
改善後
1.1MB => 73KB
--rw-r--r-- 1 taro taro 74221 2009-03-29 15:14 testing.sls.fasl
(import (srfi :64 testing)) だけのプログラムのプロファイル結果。
time% msec calls name location 67 20 0 (<top-level>) 33 10 1180 hashtable-ref
よしよし。