public V8Script Compile(string scriptId, string code, bool addToCache = true, int? cacheExpirationSeconds = null) { CachedV8Script cachedScript; if (TryGetCached(scriptId, out cachedScript)) { return cachedScript.Script; } V8Script compiledScript = _v8Runtime.Compile(scriptId, code); if (addToCache) { if (!cacheExpirationSeconds.HasValue) { cacheExpirationSeconds = _settings.ScriptCacheExpirationSeconds; } if (cacheExpirationSeconds > 0) { var cacheEntry = new CachedV8Script(compiledScript, cacheExpirationSeconds.Value); _scriptCache.AddOrUpdate(scriptId, cacheEntry, (key, original) => cacheEntry); } } return compiledScript; }
public bool TryGetCached(string scriptId, out CachedV8Script cachedScript) { if (_scriptCache.TryGetValue(scriptId, out cachedScript)) { if (cachedScript.ExpiresOn > DateTime.UtcNow) { cachedScript.CacheHits++; return true; } _scriptCache.TryRemove(scriptId, out cachedScript); } cachedScript = null; return false; }
public bool TryGetCached(string scriptId, out CachedV8Script script) { return _scriptCompiler.TryGetCached(scriptId, out script); }