2004年09月03日
perlcc試してみました。
もうすぐ、ASP的なアレではなく納品の形でシステム納める可能性が高いのですが、あんまりノウハウ丸見えで出すってのもアレですし、またシステム納めとは言え、独立可能な一部は内部でコロッとした形(こういう表現、製造業以外の業種では言わないのかな?)での製品にまとめ挙げたいので、ソースの一部を隠蔽出来そうな手法を探してみました。
そもそもオープンソースプラットフォームのSledgeや、CPANに登録してたりするようなうちのモジュールなんかは、或いはCPANにまだ公開してないものも含めてもソフトウェア部品は、別に見られてもいいんだけど、それをどうまとめあげてシステム化するかのノウハウは隠したいなと(Perl界の思想に反する?)。
んで、perlccなるものの存在を知り、ちょっと試してみた。
原因は判らないけど、ここギコのトリガスクリプトは単純にコンパイルしただけでは動かなかった。
正確には、ローカルで走らせればちゃんとレスポンスしてくれるけど、Web経由でアクセスしたらInternal Server Error。
詳細原因は未調査で、とりあえずもうちょっと簡単なところから再テスト。
CGIで単純なHello World…問題なく動く。
FastCGI…perlモジュールのCGI::Fast経由で、コンパイルしてもちゃんとFastCGI動作してくれる。常駐サーバ化も問題なし。
evalを使った実行時コンパイル等を含んでも、特に問題なさそう。
evalでの文字列実行で、文字列中でrequireしてオブジェクト作成、なんてのも問題なし。
実行速度も比較。
テスト内容は、先に書いた確認事項を全部盛り込んだFastCGI常駐サーバにして、GET引数からの入力文字列をevalの中でオブジェクトにし、evalの外でオブジェクトが出来ている事を確認するもの。
ついでにFastCGIループのカウントアップと表示も。
そいつを家からここギコサーバへの
ab -n 100 -c 50 url...
でテストしてみた。
結果。
コンパイル版。
Requests per second: 52.46 [#/sec] (mean)
Time per request: 953.125 [ms] (mean)
Time per request: 19.063 [ms] (mean, across all concurrent requests)
Transfer rate: 10.49 [Kbytes/sec] received
元スクリプト版。
Requests per second: 51.20 [#/sec] (mean)
Time per request: 976.563 [ms] (mean)
Time per request: 19.531 [ms] (mean, across all concurrent requests)
Transfer rate: 10.24 [Kbytes/sec] received
あと数回試行してみたが、コンパイル版はおおむね秒あたり52〓53処理、元スクリプト版は50〓51処理で、若干速くなったのかなと言う感じ。
でも保守性の低下を考えると、この程度の速度向上ためにperlccを使うのもイマイチアレだし、それに当然だけど、evalなんかにも対応できるようperlインタプリタも中に含まれるせいだと思うけど、実行ファイルがやたらでかい。
スクリプトなら300バイト程度の単純プログラムが2MB弱。
これなら飽くまで、仕様用途はコード隠蔽くらいしかないかなあと思う。
でもまあ、それだけでも、有用な機能である事は間違いないね。
Posted with ecto
perlcc、ライブラリの問題かも。
静的リンクしちゃうとか。
![[ここギコ!]](http://kokogiko.net/logo.png)



・ジオメディア忘年会行ってきました(宋さんへ:kokogiko)
・コンピュータは2進法が効率的でとかいう話(kokogiko)
・コンピュータは2進法が効率的でとかいう話(まぐろ)
・コンピュータは2進法が効率的でとかいう話(名無し)
・コンピュータは2進法が効率的でとかいう話(dokasen)
・コンピュータは2進法が効率的でとかいう話(dokasen)
・Google未オルソ衛星画像にぶった切られた我が母校(maeda)
・ジオメディア忘年会行ってきました(宋)
・ジオメディア忘年会行ってきました(kokogiko)