未验证 提交 767b4ea7 编写于 作者: A Alex Dima

Add a cache for resolver results

上级 b6625830
...@@ -10,26 +10,32 @@ import { URI } from 'vs/base/common/uri'; ...@@ -10,26 +10,32 @@ import { URI } from 'vs/base/common/uri';
export class RemoteAuthorityResolverService implements IRemoteAuthorityResolverService { export class RemoteAuthorityResolverService implements IRemoteAuthorityResolverService {
declare readonly _serviceBrand: undefined; declare readonly _serviceBrand: undefined;
private readonly _cache: Map<string, ResolverResult>;
constructor( constructor(
resourceUriProvider: ((uri: URI) => URI) | undefined resourceUriProvider: ((uri: URI) => URI) | undefined
) { ) {
this._cache = new Map<string, ResolverResult>();
if (resourceUriProvider) { if (resourceUriProvider) {
RemoteAuthorities.setDelegate(resourceUriProvider); RemoteAuthorities.setDelegate(resourceUriProvider);
} }
} }
resolveAuthority(authority: string): Promise<ResolverResult> { async resolveAuthority(authority: string): Promise<ResolverResult> {
if (authority.indexOf(':') >= 0) { if (!this._cache.has(authority)) {
const pieces = authority.split(':'); const result = this._doResolveAuthority(authority);
return Promise.resolve(this._createResolvedAuthority(authority, pieces[0], parseInt(pieces[1], 10))); RemoteAuthorities.set(authority, result.authority.host, result.authority.port);
this._cache.set(authority, result);
} }
return Promise.resolve(this._createResolvedAuthority(authority, authority, 80)); return this._cache.get(authority)!;
} }
private _createResolvedAuthority(authority: string, host: string, port: number): ResolverResult { private _doResolveAuthority(authority: string): ResolverResult {
RemoteAuthorities.set(authority, host, port); if (authority.indexOf(':') >= 0) {
return { authority: { authority, host, port } }; const pieces = authority.split(':');
return { authority: { authority, host: pieces[0], port: parseInt(pieces[1], 10) } };
}
return { authority: { authority, host: authority, port: 80 } };
} }
clearResolvedAuthority(authority: string): void { clearResolvedAuthority(authority: string): void {
......
...@@ -30,7 +30,7 @@ export class RemoteAuthorityResolverService implements IRemoteAuthorityResolverS ...@@ -30,7 +30,7 @@ export class RemoteAuthorityResolverService implements IRemoteAuthorityResolverS
if (!this._resolveAuthorityRequests[authority]) { if (!this._resolveAuthorityRequests[authority]) {
let resolve: (value: ResolverResult) => void; let resolve: (value: ResolverResult) => void;
let reject: (err: any) => void; let reject: (err: any) => void;
let promise = new Promise<ResolverResult>((_resolve, _reject) => { const promise = new Promise<ResolverResult>((_resolve, _reject) => {
resolve = _resolve; resolve = _resolve;
reject = _reject; reject = _reject;
}); });
...@@ -48,7 +48,7 @@ export class RemoteAuthorityResolverService implements IRemoteAuthorityResolverS ...@@ -48,7 +48,7 @@ export class RemoteAuthorityResolverService implements IRemoteAuthorityResolverS
setResolvedAuthority(resolvedAuthority: ResolvedAuthority, options?: ResolvedOptions) { setResolvedAuthority(resolvedAuthority: ResolvedAuthority, options?: ResolvedOptions) {
if (this._resolveAuthorityRequests[resolvedAuthority.authority]) { if (this._resolveAuthorityRequests[resolvedAuthority.authority]) {
let request = this._resolveAuthorityRequests[resolvedAuthority.authority]; const request = this._resolveAuthorityRequests[resolvedAuthority.authority];
RemoteAuthorities.set(resolvedAuthority.authority, resolvedAuthority.host, resolvedAuthority.port); RemoteAuthorities.set(resolvedAuthority.authority, resolvedAuthority.host, resolvedAuthority.port);
request.resolve({ authority: resolvedAuthority, options }); request.resolve({ authority: resolvedAuthority, options });
} }
...@@ -56,7 +56,7 @@ export class RemoteAuthorityResolverService implements IRemoteAuthorityResolverS ...@@ -56,7 +56,7 @@ export class RemoteAuthorityResolverService implements IRemoteAuthorityResolverS
setResolvedAuthorityError(authority: string, err: any): void { setResolvedAuthorityError(authority: string, err: any): void {
if (this._resolveAuthorityRequests[authority]) { if (this._resolveAuthorityRequests[authority]) {
let request = this._resolveAuthorityRequests[authority]; const request = this._resolveAuthorityRequests[authority];
request.reject(err); request.reject(err);
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册