我可以在Chakra上运行ASP Classic吗?

时间:2012-03-16 03:02:39

标签: javascript asp-classic chakra

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

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

问题是,为了ASP目的,可以在Chakra引擎上运行Javascript吗?

2 个答案:

答案 0 :(得分: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
}

当我按照this answer中的建议进行操作并将Chakra配置为命名脚本引擎时,将上述脚本中出现的三个“Javascript”替换为“Chakra”,然后运行“page”,我得到正确,预期结果:

{
  "engine": "JScript",
  "version": {
    "major": 9,
    "minor": 0
  },
  "build": 16441,
  "Timestamp": 1331867213695
}

9的主要版本显示我正在使用Chakra。

但是如果我再重新请求相同的脚本,则会因500错误而失败,并说:

  

无法从已释放的脚本执行代码

如果我再试一次,它会给我

  

外部对象中发生了可捕获的错误(C0000005)。该脚本无法继续运行。

如果我再试一次,我会:

  

ScriptEngine在'CActiveScriptEngine :: ReuseEngine()'的'IActiveScript :: GetScriptState()'中引发异常'C0000005'。

对于此脚本,这在我的计算机上是可重复的。

由此我得出结论,Chakra尚未针对ASP环境进行设计。

答案 1 :(得分: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架构支持。我们希望。