使用Rhino分析Javascript代码

时间:2012-12-22 14:49:02

标签: java javascript rhino ejs

我正在开发一个预生成CanJS应用程序页面的系统。这样我们的页面立即可用,我们不需要用#来处理搜索引擎优化的东西!和无头浏览器。

问题是rhino的性能似乎比现代浏览器中使用的V8或其他本机Javascript引擎要慢得多。在浏览器中,页面需要3-4秒才能生成最坏的EJS模板,rhino需要10 - 12 分钟。页面和生成器都使用从RESTful API收集的相同JSON。

我使用最高优化级别创建了一个Javascript上下文:

context = ContextFactory.getGlobal().
context.setOptimizationLevel(9);
scope = context.initStandardObjects();
scriptable = context.newObject(scope);

使用当前EJS library

调用EJS渲染过程
function invokeEjs(ejsContent, parameters){
    try{
        var unwrap = eval('new Object(' + parameters + ')');
        return new EJS({
            text: ejsContent
        }).render(unwrap);
    } catch(e){
        return outputException(e, ejsContent);
    } 
}  

现在,一旦我称这种方法需要很长时间。

HashMap<String, Object> parameters = new HashMap<String, Object>();
// ...
// ... loading some content into parameters hashmap
// ...
String ejsTemplate = "... a pre loaded ejs template from file ..."
String serializedParameters = jsonParser.toJson(parameters);
Function fct = (Function) scope.get("invokeEjs", scope);
Object resultTemp = fct.call(context, scriptable, scriptable, new Object[] { ejsTemplate, serializedParameters });

serializedParameters 可能会变得非常大,但这并不会打扰浏览器,我希望Rhino的实现时间不会超过两倍。

我目前被困在这里,不知道如何继续。如何描述花费那么多时间的内容?可能是什么原因?

0 个答案:

没有答案