このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

Tanaka's osaxのファイル関連のコマンドの速度

発言者:つちや
( Date Monday, February 16, 1998 06:12:03 )


こんにちは。久しぶりの書き込みです。 
Tanaka's osaxのファイル関係のコマンドをいじっていたんですが、 
readFromFileや appendToFile、 writeToFile、 pickupfromfileなどのコマ
ンドで、ファイルの指定方法のちがいで速度が4-6倍違うことに気がつきました。
これはひょっとしてAppleScriptでは当たり前のことか?とも思ったんですが、
なぜだかよくわからないので投稿しました。
 具体的には、たとえば readFromFileのファイル指定で下の二つのパターンが
あるとします。

パターンA 
 set myFile to alias "HD:test file" 
 readFromFile myFile

パターンB
 set myFile to "HD:test file" 
 readFromFile alias myFile

二つの違いは「alias」を先に変数に代入しているかどうかだけです。で、この二
つを較べると、パターンBよりパターンAの方が4-6 倍速いのです。マシン環境
や起動してるアプリなどでも異なるでしょうが、僕の環境(パフォーマ5210、
OS8.0J)ではそれぞれを40回繰り返すスクリプトではパターンAが4秒、パター
ンBが27秒でした。また、一行に書き込むパターンCは、パターンAと同じ、4
秒でした。

パターンC
 readFromFile (alias "HD:test file")

このことは若干の違いはあるものの、他のコマンドでもほぼ同様の結果が出ます。

いまちょっと思いついて、「alias」の代わりに「file」を使って指定したとこ
ろ、パターンAとパターンBでは速度的な違いはどうも無いようです。「file」
を使った速度そのものは「alias」のパターンAとパターンBの中間程度のようです。

うーん、これ、なぜなんでしょう?

つちや さんからのコメント
( Monday, February 16, 1998 06:15:51 )

書き忘れてました。
Tanaka's osaxのバージョンは1.1と1.24両方で試してます。
1.24の方が全般的に速かったですが、概ね同じような結果が出ます。

田中求之 さんからのコメント
( Monday, February 16, 1998 16:19:54 )

Tanaka's osax のコマンドでファイルを扱うものは、すべて内部的には
File Specification (FSSpec)という型でデータを扱います。

このため、パラメーターに Alias 型を渡したときには、AppleEvent Manager
の方で型変換を行う処理が入ることになります。おそらくこの型変換の処理の
仕方に違いがあるのだと思います。 Tanaka's osax 側は、AE Manger から
型変換済みのデータを受け取って処理を始めるようになっていますので
(フルパスの時には内部で変換を行いますが)、Tanaka's osax の側では
パラメーターが alias の時と FSSpec の時とで違いはありません。

で、ここからは私の推測ですが、パターンAの場合は、スクリプトのコンパイル時
にエイリアスのデータ(エイリアス・レコード)が作成されますが、Bの方は
実行時に、いったんエイリアスデータの作成が行われてから、それが FFSpec
に変換されるという手順を踏みますので、エイリアスのデータの作成の分だけ
遅くなるのだと思います。

なお、蛇足ですが、1.24 では

readFromFile "HD:test file"

のように、ダイレクトパラメーターにはフルパスが渡せるようになってます。

つちや さんからのコメント
( Tuesday, February 17, 1998 15:04:30 )

なるほどなるほど。
すると、1.24でのダイレクトパラメーターの受け渡しではエイリアスデー
ターの作成がないので、速度的にはパターンAと同じになるはずですね。
と、実際にも試しましたがそうなりました。
よし、早速CGIの書き直しだー。

#ちょっと関係ないのですが、Tanaka'sOsax1.24の配布条件は
#以前と同じと考えてもいいんでしょうか。

田中求之 さんからのコメント
( Tuesday, February 17, 1998 16:14:57 )

>#ちょっと関係ないのですが、Tanaka'sOsax1.24の配布条件は
>#以前と同じと考えてもいいんでしょうか。

方針の変更はありません。

At your own risk で、好きにしてちょーだいっ、です。