2011-03-14 3 views
12

많은 XML 구문 분석을 사용하는 응용 프로그램을 만들고 있으며 JSON을 XML 대신 사용할 수 있으므로 JSON을 사용하려고 생각했습니다.JSON 대 델파이의 XML 구문 분석 속도

더 빠른 JSON 또는 XML 테스트가 필요하지만 여기서 먼저 의견을 묻는 것으로 생각합니다.

JavaScript의 JSON은 기본이며 빠릅니다. XML을 파싱하는 것보다 빠릅니다. 그러나 Delphi에는이를 수행하기위한 기본 클래스가 없습니다.

내 질문은 - XML ​​또는 JSON 파서 라이브러리를 사용하여 델파이에서 더 빠릅니까? 아니면 속도가 동등한가요?

그리고 그것은 당신이 선호하는 다음 빠르다 경우 - 잘 작성 파서, XML 및 JSON으로 Delphi Web Utils, JSON Delphi Library 또는 JSON Toolkit

답변

11

가 같은 타이밍 더 많거나 적은있을 것이다. 느린 JSON 구문 분석기와 빠른 XML 구문 분석기를 사용할 수 있습니다.

구문이 JSON보다 복잡하기 때문에 XML에 약간 속도가 느린 것 같습니다.

그러나 병목 현상은 주로 하드 드라이브에서 읽는 것이고 내용은 분석하지 않습니다.

우리는 여러 가지 이유로, 우리의 ORM의 클라이언트/서버에 대한 JSON을 사용 (하지만 당신은 다른 사람을 찾을 수 있습니다, 여기 트롤하고 싶지 않은, 단지 우리의 작은 실험에서 말하는) :

  • XML과 마찬가지로 간단한 데이터 구조와 연관 배열 (객체라고 함)을 나타내는 텍스트 기반의 사람이 읽을 수있는 형식입니다.
  • 사람과 기계 모두에 대해 읽기 쉽고, 구현이 빠르고, 대개 XML보다 크기가 작습니다.
  • 데이터 캐싱에 매우 효율적인 형식입니다.
  • 레이아웃은 공간이 거의 낭비되지 않고 개별 0으로 끝나는 UTF-8 문자열로 다시 작성할 수 있습니다.이 기능은 메모리 할당이나 데이터 복사없이 테이블 결과의 텍스트 변환에 JSON을 빠르게 수행하는 데 사용됩니다 ;
  • 기본적으로 JavaScript 언어로 지원되므로 모든 AJAX (즉, 웹 2.0) 응용 프로그램에서 완벽한 직렬화 형식이됩니다.
  • JSON 형식은 잘 알려져 있고 간단한 RFC에 지정되어 있습니다.
  • JSON과 ORM의 기본 텍스트 인코딩은 UTF-8이므로 전체 유니 코드 문자 집합을 저장하고 전달할 수 있습니다.
  • .NET Framework 3.5 이후 WCF (Windows Communication Foundation)에서 작성된 ASP.NET AJAX 서비스에서 사용되는 기본 데이터 형식입니다. 그래서 마이크로 소프트는 공식적으로 "준비가되어있다".
  • 바이너리 BLOB 전송의 경우 XML과 같은 CDATA가 없습니다. 따라서 바이너리 데이터를 JSON 문자열 내에서 16 진수 또는 Base64 (적은 공간 사용)로 인코딩 할 수 있습니다.

구문 분석 속도에 대해서는 in-place parser and JSON writer from SQLite3 results을 살펴볼 수 있습니다. 속도에 매우 최적화되어 있으며 빠릅니다. 우리는 컬렉션을 포함하여 모든 TPersistent에 대해 간단하지만 efficient JSON serialization을 썼습니다. 우리는 단지 매우 빠른 a dynamic array JSON serializer을 추가합니다.

추가 참고 : 그들은 JSON 컨텐츠를 구문 분석하고 입력 버퍼 내의 텍스트로 포맷 때문에

그 모든 파서는 당신이 언급 한과 다를는 : 구문 분석 중에 어떤 메모리 할당이없는, 그래서해야 다른 솔루션보다 빠르다. 텍스트 내용은 이스케이프 처리되지 않고, 필드는 # 0으로 끝나고, 텍스트의 시작 부분에 대한 포인터가 계산됩니다. 따라서 값에 액세스하려면 포인터를 사용하여 데이터를 가져옵니다. 일반적으로 시간이 없으면 JSON 컨텐츠의 일부 MB를 구문 분석합니다.

또한 JSON parser embedded in DWS을 살펴보십시오. 저자는 그것이 빠르다고 주장했다. 그러나 각 객체에 대한 메모리 블록을 할당했습니다.

+0

In-place JSON 구문 분석 및 DOM/SAX XML 구문 분석기 기술에 대한 자세한 내용은 http://blog.synopse.info/post/2011/06/02/Fast-JSON-parsing –

+0

@ Bouchez : 다른 사람들이 JSON 파서를 사용할 수 있습니까? 그렇다면 다운로드 할 수있는 링크를 제공해 주시겠습니까? 고맙습니다. – costa

+0

파서는 저수준 함수 집합으로 [SynCommons.pas unit] (http://synopse.info/fossil/finfo?name=SynCommons.pas)에서 사용할 수 있습니다. 모든 종류의 JSON 컨텐츠를 트리로 직접 변환 할 수있는 고급 클래스는 없습니다. mORMot에서 이러한 메모리 및 CPU 소비 프로세스를 피하려고하고 간단한 객체 나 배열을 사용하기 때문에. 하지만 강력한 JSONToObject() 및 ObjectToJSON() 함수가 있습니다. –