我正在使用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>
如果我将最终目标分成两个,一个用于css,一个用于js - 那么脚本将起作用。但当我把它们结合在一起时,我遇到了问题。在每个人都说要分割目标之前,我很乐意做,我担心随着更多JS文件的添加,我最终会再遇到这个问题。
我很好奇是否有更好的方法来执行我的计划w / out不断监视并增加php的内存使用量。也许是一个更有效的命令来执行,或者利用一个php函数,如果我耗尽分配的资源,它将允许我使用更多的内存或磁盘?
侧面项目 - 对任何知道如何将缩小目标合并为一个的人表示赞赏。它们实际上是相同的,除了我需要知道每个文件的“查找”类型(css或js)。如果有办法处理这个只有一个目标 - 我想知道! :)
答案 0 :(得分:4)
我能用这么多内存看到这个的唯一原因是yuiCompressor正在向stdout输出大量信息。然后由phing执行任务捕获。
尝试使用spawn参数设置为true调用execute任务,这将导致它将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>