2013-05-07 8 views
2

노드 응용 프로그램을 작성 중이므로 많은 JSON 맵 데이터를 처리해야합니다. 데이터가 올바르게 표시 되려면 구문 분석되어야합니다.서버 측 JSON 구문 분석 및 클라이언트 측 구문 분석

이제 서버에서 구문 분석하고이 구문 분석 된 데이터 개체를 클라이언트에 보내는 것이 더 좋은지 아니면 순수한 json을 보내고 ajax 호출 후 클라이언트 쪽에서 구문 분석해야하는지 궁금합니다.

서버에서이 작업을 수행하는 가장 큰 문제는 많은 동시 쿼리가 모든 사람들에게 모든 것을 느리게 할 수 있다는 것입니다.

서버 측 코드 옵션 :

var data = []; 
db.simple_query([{ask: COMPLEX QUERY TO RETURN DATA AS JSON }], function(err, geo_data){ 
         if (err) { 
          callback(err); 
         } 
         else{ 
          data.push(JSON.parse(geo_data.rows[0].row_to_json)); 
          callback(); 
         } 
        }); 

클라이언트 측 코드 옵션 :

$.ajax({ 
        type: 'GET', 
        url: url, 
        success: function(data){ 
         if (data){ 
          $.each(data, function(i, geo){ 
           L.geoJson(JSON.parse(geo)).addTo(map); 
          }); 
         } 
        }, 
        error: function(data){ 
         //Error Handling 
        } 
       }); 

답변

4

이 정말 중요하지 않습니다. 데이터베이스 액세스 (또는 기본적으로 네트워크 또는 디스크 활동과 관련된 모든 것)와 비교하여 JSON을 직렬화/비 직렬화하는 것은 엄청나게 빠릅니다. 최적화가 필요하지 않은 것을 지나치게 최적화하지 마십시오. 당신이 어떤 서버 측 처리없이 클라이언트에 데이터를 전달하려면

그러나 이미 서버에 직렬화 복원 한 다음에 전송을 다시 직렬화하는 것이 무의미 JSON 문자열을 얻을 클라이언트가 다시 deserialize해야합니다.

+0

흠, 내 쿼리 함수에서 JSON 문자열을받습니다. 내가해야 할 일은 어떤 시점에서 그 문자열을 역 직렬화하는 것이다. 만약 내가 deserialize (구문 분석) 서버 쪽, 클라이언트 측에 전송하기 전에 serialize 된 얻을 수 있습니까? –

2

유지 보수, 확장 또는 앞으로 이동하려는 서비스 인 경우 서버에서 파싱하는 것이 좋습니다. 그렇지 않다면 당신은 단기적인 필요성이나 어떤 이유에서든 전술적 인 문제로이 문제를 풀려고하고 있습니다. 그런 다음 클라이언트에서 파싱합니다. 어쨌든 JSON 구문 분석/직렬화의 영향을 무시할 수있을 것으로 기대합니다 ... 따라서 결정을 내릴 때 다른 요소를 고려해야합니다.

서버 측 구문 분석을 사용하면 여러 가지 이유로 좋은 위치에 남게됩니다. 먼저,이 데이터에 대해 더 나은 계약을 제공 할 수 있습니다 (예 : 데이터를 일관된 책임 집합으로 분해). 누출/부적절한 정보 숨기기 유료 하중의 크기를 줄이고 자르면됩니다.). 둘째, 다른 데이터 공급자를 사용하거나 기본 데이터 공급자를 변경하거나 구현 세부 정보 (예 : 파싱 알고리즘)를 변경하려면 클라이언트에서 이러한 결정을 보호 할 수 있습니다. 또한 서비스 성능을 확장 또는 최적화하기위한 서버의 옵션 (예 : 캐싱, 구문 분석 최적화, 추가 시스템 등)은 이러한 구현 세부 사항을 소비자로부터 숨길 수 있습니다.

상황 (예 : 짧은 타임 라인, 프로토 타입)이 아닌 한, 계약 세부 정보를 숨기고 파싱 서버 측을 제공해야합니다.