Javascript CS5隐藏层的速度非常慢

Javascript CS5隐藏层的速度非常慢,javascript,optimization,photoshop,flash-cs5,photoshop-script,Javascript,Optimization,Photoshop,Flash Cs5,Photoshop Script,是不是只有我认为CS5脚本运行得非常慢? 这几行代码的执行时间超过1分钟 for (n=0; n<app.activeDocument.layerSets.length; n++) { app.activeDocument.layerSets[n].visible = false; } 用于(n=0;n我能想到的唯一一件事是尝试在包含所有层和组的app.activeDocument.layers中循环遍历各个层。当您这样做时,您会注意到分组层仍将保留其原始visible属性,但由于父

是不是只有我认为CS5脚本运行得非常慢? 这几行代码的执行时间超过1分钟

for (n=0; n<app.activeDocument.layerSets.length; n++) {
  app.activeDocument.layerSets[n].visible = false;
}

用于(n=0;n我能想到的唯一一件事是尝试在包含所有层和组的
app.activeDocument.layers
中循环遍历各个层。当您这样做时,您会注意到分组层仍将保留其原始
visible
属性,但由于父组被隐藏,因此被隐藏

#target photoshop

var myLayers = app.activeDocument.layers;
var myLayersLength = myLayers.length;

for (var i=0; i<myLayersLength; i++) {
    myLayers[i].visible = false;
}
#目标photoshop
var myLayers=app.activeDocument.layers;
var myLayers长度=myLayers.length;
对于(var i=0;i来看一下

这可能也会对您有所帮助。

我将我的原始代码和您的原始代码在根级别进行了38层计时。它们花费了相同的时间(2.7分钟).我运行的是不支持GPU的标准版本。您是否启用了GPU支持?我再次运行了您的第一个示例,在i7-2630@2GHz、8GB RAM上运行了38层。这一次需要1.7分钟(快1分钟),对于只关闭层来说仍然有很多。是否有一些调试信息可以关闭以提高速度?我测试了我的第一个脚本(
for
loop),针对一个605mb的文件,该文件有50层2560x1712 px,耗时约8秒。以下是我在PS中使用的性能设置(都是默认的AFAIK)不管怎样,我尝试关闭GPU支持,但收效甚微,因为我使用的是板载图形,没有视频卡。要么你正在处理一些大容量的高分辨率文件,要么其他事情让你陷入困境。我使用的是64位AMD双核3.20 GHz,带有4gb RAM(不过photoshop只分配了2 gb)无论如何,我不认为您的代码是这里的问题。您是否考虑过将每个层的innerHTML保存到一个数组中,并将其设置为“”?然后要恢复一个层,只需将其innerHTML从数组中复制回来。hide=>
temp[I]=layerSets[I]。innerHTML;layerSets[I]。innerSets[I]。innerHTML=“”;
…show=>
layerSets[I]。innerHTML=temp[I]
;您是否碰巧运行了Vista?Vista和Windows 7上的结果相同。
#target photoshop

var myLayers = app.activeDocument.layers;
var myLayersLength = myLayers.length;

for (var i=0; i<myLayersLength; i++) {
    myLayers[i].visible = false;
}
#target photoshop

var doc = app.activeDocument;
findLayers(doc);


function findLayers(set) {
    for (var i=0; i<set.layerSets.length; i++) {

        //recursive call
        findLayers(set.layerSets[i]);

        //iterate sub-layers and hide
        for (var j=0; j<set.layerSets[i].layers.length; j++) {
            set.layerSets[i].layers[j].visible = false;
        }
    }

    //hide top-level layers
    for (var l=0; l<set.layers.length; l++) {
        set.layers[l].visible = false;
    }
}