javascript - 更高效的 Javascript

标签 javascript extjs performance

寻找另一只眼睛来提高以下 Javascript 的效率。

以下 JSON 是从 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"
      }
    }
 };

在 createAccessor 方法中扩展了 Extjs JSONReader 以处理大于 2 的键深度。想知道是否有办法使代码更高效?下面的函数将被称为 function(testing, "com:klistret:cmdb:ci:pojo:configuration.@Watermark") 其中 com:klistret:cmdb:ci:pojo: elements 属性是根。

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];
        };
    };
}()

最佳答案

这是我用的。请注意,我只允许点注释:

Ext.override(Ext.data.JsonReader, {
  createAccessor: function() {
    return function(expr) {
      if (Ext.isEmpty(expr)) {
        return Ext.emptyFn;
      } else if (Ext.isFunction(expr)) {
        return expr;
      } else {
        return function(obj) {
          var parts = (expr || '').split('.'),
              result = obj,
              part,
              match;
          while (parts.length > 0 && result) {
            part = parts.shift();
            match = part.match(/^(.+?)(\[(\d+)\])?$/);
            result = result[match[1]];
            if (result && match[3]) {
              result = result[match[3]];
            }
          }
          return result;
        }
      }
    };
  }()
});

关于javascript - 更高效的 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4440603/

相关文章:

sorting - 最快的插入/排序数据结构

Android Launcher3 构建失败

python - 为什么 contextmanager 很慢

javascript - 在 jspm 中加载全局可用库的最佳方法

javascript - 函数值及其如何执行(How They Work)?

javascript - 如何在 jsp 页面中显示代表 java servlet 执行的进度条

javascript - 设置组合框宽度以自动适应 ExtJS 中最长的字段选项文本

javascript - ExtJS 任务运行器

javascript - 如何制作在表为空时隐藏表的 jquery 脚本?

javascript - Ext.dispatch 来自 itemTap 监听器?