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)); }