Chakra 是 Microsoft 打包到 IE9 中的更新 Javascript 引擎的代号。
可以使用 JScript 作为 ASP Classic 页面的开发语言。这通常在 Windows 内置的 JScript 引擎上运行,自 NT4 Option Pack (c.1996) 以来所有版本的 Windows 中都存在该引擎。
问题是,是否可以使用在 Chakra 引擎上运行的 Javascript 来实现 ASP 目的?
Chakra 是 Microsoft 打包到 IE9 中的更新 Javascript 引擎的代号。
可以使用 JScript 作为 ASP Classic 页面的开发语言。这通常在 Windows 内置的 JScript 引擎上运行,自 NT4 Option Pack (c.1996) 以来所有版本的 Windows 中都存在该引擎。
问题是,是否可以使用在 Chakra 引擎上运行的 Javascript 来实现 ASP 目的?
显然不是。
我尝试使用这个简单的示例脚本:
<%@ language="Javascript" %>
<script language="Javascript" runat="server" src='json2.js'></script>
<script language="Javascript" runat="server">
(function() {
scriptEngineInfo = function () {
var s = {
engine : ScriptEngine(),
version: {
major: ScriptEngineMajorVersion(),
minor:ScriptEngineMinorVersion()
},
build: ScriptEngineBuildVersion()
};
return s;
}
}());
var x = scriptEngineInfo();
x.Timestamp = (new Date()).valueOf();
Response.Write (JSON.stringify(x));
</script>
当“Javascript”是语言的名称时,如上所述,我得到这个结果:
{
"engine": "JScript",
"version": {
"major": 5,
"minor": 8
},
"build": 16982,
"Timestamp": 1331866901948
}
当我按照此答案中的建议进行操作并将 Chakra 配置为命名脚本引擎时,然后将上述脚本中出现的三个“Javascript”替换为“Chakra”,然后运行“页面”,我得到正确的预期结果:
{
"engine": "JScript",
"version": {
"major": 9,
"minor": 0
},
"build": 16441,
"Timestamp": 1331867213695
}
9 的主要版本显示我正在使用 Chakra。
但是,如果我然后重新请求相同的脚本,它会失败并出现 500 错误,并说:
无法从释放的脚本中执行代码
如果我再试一次,它会给我
外部对象中出现可捕获错误 (C0000005)。脚本无法继续运行。
如果我再试一次,我会得到:
ScriptEngine 在“CActiveScriptEngine::ReuseEngine()”的“IActiveScript::GetScriptState()”中抛出异常“C0000005”。
对于这个脚本,这在我的机器上是可重复的。
由此我得出结论,Chakra 不是为 ASP 环境设计的。
Active Scripting 体系结构允许脚本宿主(即 ASP.dll)缓存由脚本引擎提供的经过某种解析的临时代码。这被 ASP 大量使用,并且速度非常快。我们正在运行巨大的脚本(多行 1000 行代码),第一次调用需要几秒钟才能实际执行代码,而进一步的调用已经在 1/10 秒后执行代码。
很可能是由于新的 JIT-Compiler,脚本接口不能很好地服务,并且 ASP 变得混乱。给定的 WSH 测试用例不存在此问题,因为 WSH 不使用缓存,因为它不组织要执行的代码。
如果禁用 ASP 缓存,看看 Chakra 9 引擎是否工作会很有趣——我现在无法测试它,我假设对于像我们这样的大型脚本它不会带来预期的效果。但是对于较小的脚本值得一试。
安装 IE9 时,安装程序还部署了旧的 JavaScript 5.8 引擎(内部版本 16982),它安装在 IE8 附带的引擎(17562)之上。我不知道这种“降级”的意义,但最好不要在运行 Classic ASP 的服务器上安装 IE9。
也许 IE 10 的 Chakra 会提供更好的 ActiveScripting 架构支持。让我们希望。