【问题标题】:Can I run ASP Classic on Chakra?我可以在 Chakra 上运行 ASP Classic 吗?
【发布时间】:2012-04-01 15:22:42
【问题描述】:

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

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

问题是,是否可以将运行在 Chakra 引擎上的 Javascript 用于 ASP 目的?

【问题讨论】:

    标签: javascript asp-classic chakra


    【解决方案1】:

    显然不是。

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

    <%@ 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”,然后运行“页面”,我得到了正确的, 预期结果:

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

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

    但是如果我然后重新请求相同的脚本,它会失败并出现 500 错误,说:

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

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

    外部对象中出现可捕获错误 (C0000005)。脚本无法继续运行。

    如果我再试一次,我会得到:

    脚本引擎在“CActiveScriptEngine::ReuseEngine()”的“IActiveScript::GetScriptState()”中抛出异常“C0000005”。

    对于这个脚本,这在我的机器上是可重复的。

    由此我得出结论,Chakra 并非针对 ASP 环境而设计。

    【讨论】:

      【解决方案2】:

      Active Scripting 架构允许脚本宿主(即 ASP.dll)缓存由脚本引擎交付的以某种方式解析的临时代码。这被 ASP 大量使用,并且速度非常快。我们正在运行巨大的脚本(多行 1000 行代码),第一次调用需要几秒钟才能实际执行代码,而进一步的调用已经在 1/10 秒后执行代码。

      很可能是由于新的 JIT 编译器,脚本接口服务不佳,ASP 变得混乱。给定的 WSH 测试用例不存在此问题,因为 WSH 不使用缓存,因为它不组织要执行的代码。

      如果禁用 ASP 缓存,看看 Chakra 9 引擎是否工作会很有趣 - 我现在无法测试它,我假设对于像我们这样的大型脚本它不会带来预期的效果。但对于较小的脚本,值得一试。

      在安装 IE9 时,安装程​​序还会部署一个旧的 JavaScript 5.8 引擎(内部版本 16982),它安装在 IE8 附带的引擎(17562)之上。我不知道这种“降级”的意义,但最好不要在运行 Classic ASP 的服务器上安装 IE9。

      也许 IE 10 的 Chakra 会提供更好的 ActiveScripting 架构支持。让我们充满希望。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-27
        • 1970-01-01
        • 1970-01-01
        • 2010-10-11
        • 2013-11-28
        相关资源
        最近更新 更多