1

Chakra 是 Microsoft 打包到 IE9 中的更新 Javascript 引擎的代号。

可以使用 JScript 作为 ASP Classic 页面的开发语言。这通常在 Windows 内置的 JScript 引擎上运行,自 NT4 Option Pack (c.1996) 以来所有版本的 Windows 中都存在该引擎。

问题是,是否可以使用在 Chakra 引擎上运行的 Javascript 来实现 ASP 目的?

4

2 回答 2

3

显然不是。

我尝试使用这个简单的示例脚本:

<%@ 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 环境设计的。

于 2012-03-16T03:09:31.370 回答
2

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 架构支持。让我们希望。

于 2012-07-26T19:25:13.260 回答