2

phing と yui コンプレッサーを使用していくつかのタスクを自動化していますが、メモリの問題が発生しています。これを処理するためのより良い方法があるかどうか、私は興味があります。

phing ビルド スクリプトの一部

<target name="finalize">
  <property name="cssfolders" value="folder1, folder2, folder3" />
  <foreach list="${cssfolders}" param="dir" target="minifyCSS" />

  <property name="jsfolders" value="folder1, folder2, folder3" />
  <foreach list="${jsfolders}" param="dir" target="minifyJS" />
</target>

<target name="minifyCSS">
  <exec command="find ${dir}/dev -name '*.css' -exec basename {} \; | while read file; do java -jar ${yuiCompressor} -o ${dir}/prod/$file ${dir}/dev/$file; done" />
</target>

<target name="minifyJS">
  <exec command="find ${dir}/dev -name '*.js' -exec basename {} \; | while read file; do java -jar ${yuiCompressor} -o ${dir}/prod/$file ${dir}/dev/$file; done" />
</target>

finalize ターゲットを css 用と js 用の 2 つに分割すると、スクリプトは機能します。しかし、それらを組み合わせたままにしておくと、問題が発生します。誰もがターゲットを分割するように言う前に、私はそれで問題ありませんが、より多くの JS ファイルが追加されると、最終的にこの問題に再び遭遇するのではないかと心配しています。

PHPのメモリ使用量を継続的に監視して増加させることなく、計画を実行するためのより良い方法があるかどうか興味があります。おそらく、より効率的なコマンドを実行するか、割り当てられたリソースを使い果たした場合により多くのメモリまたはディスクを使用できるようにするphp関数を利用しますか?

サイド プロジェクト - ミニファイ ターゲットを 1 つに結合する方法を知っている人への称賛。それらは実質的に同じですが、それぞれについて「検索」するファイルの種類 (css または js) を知る必要があります。ターゲットが 1 つだけの場合にこれを処理する方法があれば、知りたいです。:)

4

1 に答える 1

4

これが大量のメモリを使用していることがわかった唯一の理由は、yuiCompressor が大量の情報を stdout に出力しているためです。これは、phing 実行タスクによってキャプチャされます。

spawn パラメータを true に設定して実行タスクを呼び出してみてください。これにより、stdout が /dev/null にリダイレクトされます。

<exec command="find ${dir}/dev -name '*.css' -exec basename {} \; | while read file; do java -jar ${yuiCompressor} -o ${dir}/prod/$file ${dir}/dev/$file; done" spawn="true" />

サイドプロジェクトに関しては、おそらく次のようなものがうまくいくでしょう:

<target name="finalize">
  <property name="cssfolders" value="css:folder1, css:folder2, css:folder3" />
  <foreach list="${cssfolders}" param="toCompress" target="minify" />

  <property name="jsfolders" value="js:folder1, js:folder2, js:folder3" />
  <foreach list="${jsfolders}" param="toCompress" target="minify" />
</target>

<target name="minify">
  <exec command="type=`echo ${toProcess}|cut -d ':' -f 1`;folder=`echo ${toProcess}|cut -d ':' -f 2`; find $folder/dev -name '*.'$type -exec basename {} \; | while read file; do java -jar ${yuiCompressor} -o $folder/prod/$file $folder/dev/$file; done" />
</target>
于 2010-12-20T12:33:55.050 に答える