Vous cherchez un autre oeil pour rendre le Javascript suivant plus efficace.Plus efficace Javascript
Le JSON suivant est produit à partir d'un service Resteasy:
var testing = {
"com:klistret:cmdb:ci:pojo:successful":true,
"com:klistret:cmdb:ci:pojo:count":1,
"com:klistret:cmdb:ci:pojo:elements":{
"com:klistret:cmdb:ci:pojo:id":123,
"com:klistret:cmdb:ci:pojo:name":"Mars",
"com:klistret:cmdb:ci:pojo:type":{
"com:klistret:cmdb:ci:pojo:id":1,
"com:klistret:cmdb:ci:pojo:name":"Environment"
},
"com:klistret:cmdb:ci:pojo:configuration":{
"@www:w3:org:2001:XMLSchemainstance:type":"Environment",
"@Watermark":"past",
"com:klistret:cmdb:ci:commons:Name":"Mars"
}
}
};
étendu le Extjs JSONReader pour traiter des profondeurs clés supérieur à 2 dans le procédé CreateAccessor. Vous vous demandez s'il existe un moyen de rendre le code plus efficace? La fonction ci-dessous s'appellera function(testing, "com:klistret:cmdb:ci:pojo:[email protected]")
où la propriété com:klistret:cmdb:ci:pojo:elements
est la racine.
createAccessor : function(){
var re = /[\[\.]/;
return function(expr) {
if(Ext.isEmpty(expr)){
return Ext.emptyFn;
}
if(Ext.isFunction(expr)){
return expr;
}
# THIS FUNCTION I WANT TO BE EFFICIENT
return function(obj){
while (String(expr).search(re) !== -1) {
var i = String(expr).search(re);
var key = expr.substring(0, i);
if (obj.hasOwnProperty(key)) {
obj = obj[key];
}
expr = expr.substring(i+1, expr.length);
}
return obj[expr];
};
};
}()
Pourquoi votre analyse de code convertir expr à une chaîne deux fois par boucle et ne parviennent pas à le convertir en une chaîne avant d'appeler substring? La contrainte de chaîne ne peut-elle pas être déplacée complètement hors de la boucle? Idéalement, en dehors de la fonction interne aussi. –