我Nashorn在 Java 11 中使用JavaScript 引擎,它工作正常,但很快就会被弃用。我尝试过GraalVM,我发现它更糟糕,因为执行一个简单的表达式(例如 2+3)需要 13-14 秒。有没有其他替代方法可以使用,或者我应该尝试GraalVM使用其他方法(如果有的话)?
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("javascript");
engine.eval("2+3");
Run Code Online (Sandbox Code Playgroud) 我从网上发现Google Chrome使用V8,Firefox使用SpiderMonkey将JavaScript编译为机器代码。那么Safari浏览器使用什么JavaScript引擎呢?
@if (@_jscript_version == 10)
document.write("You are using IE10");
Run Code Online (Sandbox Code Playgroud)
根据Wikipedia IE10将使用JScript 10.
JScript 10似乎有一大堆新的专有扩展EcmaScript 5.
IE10中的EcmaScript引擎(10)的版本是否与JScript 10.0相关?
IE10是否会带来一系列专有扩展,如严格打字等?
javascript javascript-engine jscript-10 internet-explorer-10
所以,我已经阅读了MDN免责声明和警告,我已经阅读了关于这个主题的一个很好的答案,但仍然有一些我想知道的事情.这个问题实际上来自我给另一个问题的答案,这里.
假设我决定做肮脏的行为.我会为我的余生而后悔的事情.有些东西会永远羞辱我,羞辱我的姓氏.有目的,蓄意的结局 -
好吧,够了.无论如何,这里是:
let proto = Object.getPrototypeOf(Function.prototype);
Object.setPrototypeOf(Function.prototype, {
iBetterHaveAGoodReasonForDoingThis : "Bacon!"
});
//just to prove it actually worked
let f = (function(){});
console.log(f.iBetterHaveAGoodReasonForDoingThis);
// Quick, hide the evidence!!
Object.setPrototypeOf(Function.prototype, proto);
Run Code Online (Sandbox Code Playgroud)
基本上,我在那里做的是改变原型Function.prototype,这个对象几乎影响你可以编写的每一段JavaScript代码.然后我把它改回来了.
我想说明原型链中的一个重大变化会影响很多代码并导致很多优化工作流失.我不希望改变它会修复任何东西(如果有的话,我希望它会使性能更糟糕).我很想知道它是否会,但如果确实如此,那不是我的意图.
我只是想知道,在这样的改变之后,JavaScript环境是否会开始恢复并再次开始优化?或者它会永远放弃并以去优化模式运行一切?是否存在因此而永远无法实现的优化?我能相信,经过一段时间的恢复后,它会恢复到常规状态吗?
对于上下文,我说的是像最新版本的V8这样的引擎,而不是像Internet Explorers这样的东西使用的原始垃圾.我理解不同系统的答案可能有所不同,但我希望它们之间有一些共性.
由于 array.find() 迭代数组,如果我处理(可能)大型数组,我总是确保有一个索引对象,如下所示:
{ [id:string]: Item }
Run Code Online (Sandbox Code Playgroud)
如果我需要在这些数组中按 id 查找项目。
然而,生活在 V8 时代(以及 Safari 和 Firefox 的类似引擎优化),我想知道是否在幕后,一个简单的 array.find() 已经针对它进行了优化?或者一旦必须执行此操作一次,就会在运行时对其进行优化(创建这样的索引对象)?
现代浏览器是否已经对 O(N) 类型的算法进行了某种优化,通过正确的实现可以将其变为 O(1)?或者我是否过多地考虑了这些浏览器实际上可以/将在幕后做什么?
当Internet Explorer 8上的JavaScript发生异常时,我需要获得完整的调用堆栈.函数调用可能发生在数量很大的帧之间.
调用堆栈以将日志发送给开发人员.我不能使用调试器,因为最终用户不必处理这个问题.
JavaScripts的当前解决方案提供了它可以生成callstack(http://eriwen.com/javascript/js-stack-trace/).它基于arguments.callee.caller.但是如果从当前帧外部调用函数,则调用者返回零(未定义).因此获得的callstack是不完整的.
在这种情况下,我可以获取从中调用函数的框架的名称吗?
基于活动脚本技术的解决方案提供了ScriptEngine类型的对象:IHTMLDocument :: get_Script(IDispatch**p)
但是将对象"script"转换为IActiveScript接口失败.
*我可以从IE8中获取用于给定上下文ScriptEngine的链接,以提取构建callstack所需的信息吗?
javascript internet-explorer exception-handling javascript-engine
考虑以下关于参考ECMAScript语言规范的答案响应- 11.13.2化合物分配
考虑为什么这些,
javascript:
o=""; o = o + (o+=1) ; alert(o);
o=""; o = (o+=1) + o; alert(o);
Run Code Online (Sandbox Code Playgroud)
不一样.从左到右的脚本评估存在时间语义问题(参考:ECMA规范. - 加法运算符).一个结果是+操作员不一定是可交换的.
这可以通过以下方式看出:
javascript:
o=1; o = o + (o+=1) ; alert(o);
o=1; o = (o+=1) + o; alert(o);
Run Code Online (Sandbox Code Playgroud)
要么
javascript:
o=" _ "; o = o + (o+=1) ; alert(o);
o=" _ "; o = (o+=1) + o; alert(o);
Run Code Online (Sandbox Code Playgroud)
懒惰的评估范例,由我错误地和不恰当地使用从而产生下面的问题,也是我个人工作方式的一个不好的属性.
以下考虑因素可能已经得到解决,但似乎没有.如果是这样,是否可以提供与讨论的链接?
Gecko Javascript运行时引擎的正式指称语义是一个谜.经验测试令人筋疲力尽,无法详尽无遗.
参考文献ECMAScript语言规范似乎不够,但是为这些脚本的混合提供了信任,例如, …
javascript javascript-engine formal-semantics denotational-semantics
有没有办法编写和运行JavaScript代码,而无需运行浏览器并使用其JavaScript引擎?
谢谢!
问题不是解决方案,更好地了解系统的问题
专家!我知道每当你将javascript代码提供给javascript引擎时,它将立即通过javascript引擎执行.既然,我还没有看过Engine的源代码,我的问题如下,
我们假设我从远程服务器加载了几个文件,即FILE_1.js和FILE_2.js.并且FILE_2.js中的代码需要FILE_1.js中的一些代码.所以我已经包含如下文件,
<script type="text/javascript" src="FILE_1.js" ></script>
<script type="text/javascript" src="FILE_2.js" ></script>
Run Code Online (Sandbox Code Playgroud)
所以希望,我已经完成了Javascript引擎所需的工作.不幸的是,我在FILE_1.js中编写了5000KB的代码,但是我在FILE_2.js中有5KB的代码.由于服务器是多线程的,因此在FILE_1.js完成之前,FILE_2.js将被加载到我的浏览器中.
javascript引擎如何处理这个?
如果将代码从FILE_2.js移动到内联脚本标记,如下所示,javascript引擎管理此依赖项的操作是什么?
<script type="text/javascript" src="FILE_1.js" ></script>
<script type="text/javascript" >
// Dependent code goes here
</script>
Run Code Online (Sandbox Code Playgroud)
注意:我不期待单个单词回答Single Threaded.我只想知道谁管理发布请求浏览器或javascript引擎或普通人?如果请求/响应是由普通人处理的,那么javascript引擎如何知道这一点?
window.setTimeoutIE 的引用声明setTimeout具有定义语言的可选第三个参数.
可能的语言是JScript,VBScript和JavaScript.
我已经知道IE可以解析VBScript但是
IE如何以不同于JScript的方式解析JavaScript?
就个人而言,我认为IE解析器和运行的EcmaScript方言称为JScript.
[ 编辑 ]
正如人们所提到的,微软似乎将他们的ES3引擎标记为"JScript",将他们的ES5引擎标记为"JavaScript".ES5引擎在IE9中.
我们可以使用IE9他们ES3引擎通过传递"JScript"来setTimeout?
javascript ×9
v8 ×2
arrays ×1
browser ×1
graalvm ×1
ide ×1
java ×1
jscript-10 ×1
nashorn ×1
performance ×1
prototype ×1
safari ×1
scriptengine ×1