提交 d577c085 编写于 作者: J Jesse Glick

[FIXED JENKINS-21780] DirectoryBrowserSupport.FileComparator should cache isDirectory calls.

上级 70a197fb
......@@ -58,6 +58,9 @@ Upcoming changes</a>
<li class=bug>
Expensive symlink-related calls on Windows can be simplified.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-20534">issue 20534</a>)
<li class=bug>
Slow rendering of directories with many entries in remote workspaces.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-21780">issue 21780</a>)
</ul>
</div><!--=TRUNK-END=-->
......
......@@ -25,14 +25,6 @@ package hudson.model;
import hudson.FilePath;
import hudson.Util;
import jenkins.model.Jenkins;
import org.apache.commons.io.IOUtils;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.HttpResponse;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
......@@ -42,14 +34,23 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.logging.Logger;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import jenkins.model.Jenkins;
import jenkins.util.VirtualFile;
import org.apache.commons.io.IOUtils;
import org.kohsuke.stapler.HttpResponse;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
/**
* Has convenience methods to serve file system.
......@@ -430,8 +431,9 @@ public final class DirectoryBrowserSupport implements HttpResponse {
private static final class FileComparator implements Comparator<VirtualFile> {
private Collator collator;
private final Map<VirtualFile,Boolean> isDirCache = new HashMap<VirtualFile,Boolean>();
public FileComparator(Locale locale) {
FileComparator(Locale locale) {
this.collator = Collator.getInstance(locale);
}
......@@ -443,9 +445,18 @@ public final class DirectoryBrowserSupport implements HttpResponse {
return this.collator.compare(lhs.getName(), rhs.getName());
}
private boolean isDirectory(VirtualFile f) throws IOException {
Boolean known = isDirCache.get(f);
if (known == null) {
known = f.isDirectory();
isDirCache.put(f, known);
}
return known;
}
private int dirRank(VirtualFile f) {
try {
if(f.isDirectory()) return 0;
if(isDirectory(f)) return 0;
else return 1;
} catch (IOException ex) {
return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册