我正在开发一个预生成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的实现时间不会超过两倍。
我目前被困在这里,不知道如何继续。如何描述花费那么多时间的内容?可能是什么原因?