phpDocumentorで、PHPのファイルから、ドキュメントを自動生成できるといので使ってみているのですが、どうも動きが超遅い・・・。
なんだと思えば、見なくてもいいサブディレクトリ(数千~数万のファイルがある)まで見に行ってるので、そこで時間がかかってました。
「-i」オプションで、無視させることができるらしいのですが、無視していないように見えます。
というわけで調べてみました。
■ 再現用の環境
テスト用の環境を作っておきます。
- 例題として、Console_GetOptを使いました。
- 余計なサブディレクトリを作りました。
- 「-is」オプションをつけると、「Symlink ... Ignored」というメッセージが表示されるので、phpDocumentorが中身をそのディレクトリを探索しているかどうか、観測できるので、適当にシンボリックリンクのファイルを配置しておきます。
% cp -pr /usr/local/share/pear/Console /tmp/
% cd /tmp/Console/
% ls
Getopt.php
% mkdir dir1
% mkdir dir1/dir2a
% mkdir dir1/dir2b
% mkdir dir1/dir2a/dir3
% ln -s /etc/motd dir1/mushi.txt
% ln -s /etc/motd dir1/dir2a/mushi.txt
% ln -s /etc/motd dir1/dir2b/mushi.txt
% ln -s /etc/motd dir1/dir2a/dir3/mushi.txt
■ 実行してみる
% cd /tmp
% phpdoc -is -i 'dir*' -d ./Console -t /tmp/doc/
PHP Version 5.2.5
phpDocumentor version 1.4.1Parsing configuration file phpDocumentor.ini...
(found in /usr/local/share/pear/data/PhpDocumentor/)...done
Maximum memory usage set at 256M after considering php.ini...
using tokenizer Parser
Symlink /tmp/Console/dir1/dir2a/dir3/mushi.txt Ignored
Symlink /tmp/Console/dir1/dir2a/mushi.txt Ignored
Symlink /tmp/Console/dir1/dir2b/mushi.txt Ignored
Symlink /tmp/Console/dir1/mushi.txt IgnoredGrabbing README/INSTALL/CHANGELOG
(以下略)
「-i 'dir*'」オプションを指定しても、「dir1/dir2a」、「dir1/dir2a/dir3」など、奥深いところまで、サブディレクトリを探索しています。
■ ソースコードをながめたり、動作をおっかけてみたりしてみた
phpdocの挙動を追っかけていってみると、どうやら、最初に、ドカッ!と全部のファイルリストを取得してから、その後に、無視するかどうか、チェックしてました。
なにこの、富豪的プログラミングは!?
■ プログラムを改造してみた
最初のファイル一覧を作るところでも、無視するかどうかチェックする処理を追加してみました。
こんなパッチです。
「phpdocumentor.diff.txt」をダウンロード
表面的なとこだけ見て書いたので、すべてのケースできちんと動くかどうか、あまり厳密にチェックしていません。
また、適当にパパッと作っちゃったものなので、どうも、ちゃんと対応しきれていないらしく、「-i」で指定したディレクトリでも、1階層だけ、1度だけは、下っているみたいです。まぁ、いいか…
■ 改造後の動作
% phpdoc -is -i 'dir*' -d ./Console -t /tmp/doc/
PHP Version 5.2.5
phpDocumentor version 1.4.1Parsing configuration file phpDocumentor.ini...
(found in /usr/local/share/pear/data/PhpDocumentor/)...done
Maximum memory usage set at 256M after considering php.ini...
using tokenizer ParserGrabbing README/INSTALL/CHANGELOG
「Symlinkうんぬん」言われなくなったので、-iオプションで指定したサブディレクトリが、きちんと枝狩りされていると思います。
(ただ、先に書きましたが、どうも1階層だけは下ってから、無視するかのチェックをしているっぽいような…)。
■ 関連記事
0 件のコメント:
コメントを投稿