Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 静态.json文件在$http.get调用中被重复调用的性能问题_Javascript_Angularjs_Json - Fatal编程技术网

Javascript 静态.json文件在$http.get调用中被重复调用的性能问题

Javascript 静态.json文件在$http.get调用中被重复调用的性能问题,javascript,angularjs,json,Javascript,Angularjs,Json,我想知道我在性能和最佳实践方面的决定,因为这看起来像是一种代码味道和性能冲击 我有一个静态的.json文件“Airports.json” 上面的json是(~200行代码,仅包含航空公司、联盟和carriedid) 在ng repeat循环中调用angular filter,以便每几页调用服务几次 服务工厂执行此操作http。获取服务调用的每个筛选器 调用类似于返回$http.get(serviceBase+'Airlines.json')。然后 函数,然后返回findAirport(resul

我想知道我在性能和最佳实践方面的决定,因为这看起来像是一种代码味道和性能冲击

  • 我有一个静态的.json文件“Airports.json”
  • 上面的json是(~200行代码,仅包含航空公司、联盟和carriedid)
  • 在ng repeat循环中调用angular filter,以便每几页调用服务几次
  • 服务工厂执行此操作
    http。获取服务调用的每个筛选器
  • 调用类似于返回$http.get(serviceBase+'Airlines.json')。然后
  • 函数,然后返回findAirport(results.data,code)
  • 函数循环遍历从$http.get获取的json数据
  • 对于(变量i=0;i
  • 这对表演来说可怕吗
  • 还有什么选择
  • 代码体系结构:

    html

     {{ data.whatever | myfilter }} 
    
    过滤器

     .filter ..  calls service with the specific code  e.g. "DL"
    
    服务

    var airportCodeService = function ($http, $q) {
        var serviceBase = '../apps/temp/Api_Responses/',
            factory = {};
    
        factory.getAirlineFromCarrierId = function (code) {
            return $http.get(serviceBase + 'Airlines.json').then(function (results) {
                return findAirport(results.data, code);                
            });
        }
    
        function findAirport(airportList, code) {
    
            var airLen = airportList.airlines.length;
            var res = "";
    
            for (var i = 0; i < airLen; i++) {
                var item = airportList.airlines[i];
                if (item.carrierId == code) {
                    res = item.airline;
                    break;
                }
    
            }
            //console.log(res);
            return res;
        }
    
    var airportCodeService=function($http,$q){
    var serviceBase='../apps/temp/Api_Responses/',
    工厂={};
    factory.getAirlineFromCarrierId=函数(代码){
    返回$http.get(serviceBase+'Airlines.json')。然后返回(函数(结果){
    返回findAirport(results.data,code);
    });
    }
    函数findAirport(机场列表,代码){
    var airLen=airportList.airlines.length;
    var res=“”;
    对于(变量i=0;i

    似乎我应该保留json数据,而不是$http.get调用每个筛选器请求等…?

    如果json是静态的,就没有理由重复请求它。你是对的,这将对性能造成严重影响

    最简单的解决方法是在
    airportCodeService
    初始化时请求一次数据,并保存对该承诺的引用

    var airportCodeService = function($http, $q) {
      var serviceBase = '../apps/temp/Api_Responses/',
        factory = {};
    
      //Request the data once at service startup
      var airlinePromise = $http.get(serviceBase + 'Airlines.json');
    
      factory.getAirlineFromCarrierId = function(code) {
        //Reuse the same promise - it won't make another request!
        return airlinePromise.then(function(results) {
          return findAirport(results.data, code);
        });
      }
    }
    

    如果json是静态的,就没有理由重复请求它。你是对的,这将对性能造成可怕的影响

    最简单的解决方法是在
    airportCodeService
    初始化时请求一次数据,并保存对该承诺的引用

    var airportCodeService = function($http, $q) {
      var serviceBase = '../apps/temp/Api_Responses/',
        factory = {};
    
      //Request the data once at service startup
      var airlinePromise = $http.get(serviceBase + 'Airlines.json');
    
      factory.getAirlineFromCarrierId = function(code) {
        //Reuse the same promise - it won't make another request!
        return airlinePromise.then(function(results) {
          return findAirport(results.data, code);
        });
      }
    }
    

    如果…它是静态的…你为什么要求它不止一次?…如果…它是静态的…你为什么要求它不止一次。。。