Delphi语言最好的JSON代码库 mORMot学习笔记1

mORMot没有控件安装,直接抬高到lib路径,
工程中平昔添加syncommons,syndb等到uses里


在举办互联网编程中必要JSON对象的营造与分析,
这个Delphi XE+自带:
{$IF CompilerVersion>22}, System.JSon{$ELSE}, DBXJSON{$IFEND}
不过,不佳用,我们更喜欢SuperObject。我自己之前一直用JsonDataObjects。
后天要给大家介绍的这套JSON代码库算是“世外高人”,身怀绝世武功,而名不见经传,那就是 mORMot 系列开发框架。这是一个效应一流无敌,学习曲线壁陡的开源框架。

http://synopse.info/

Project Name:  Synopse mORMot Framework
Document Name:  Software Architecture Design
Document Revision:  1.18
Date:  May 27, 2016
Project Manager:  Arnaud Bouchez

那是PDF文档下载地址:
http://synopse.info/files/pdf/Synopse%20mORMot%20Framework%20SAD%201.18.pdf
音讯量达到惊人的2127页。一大半人被那份文档吓到,以至于错过了修炼那套“绝世武功”的空子。
今日大家从中把JSON编程单拣出来,看看mORMot有如何神奇的地点。
应用mORMot没有想像的那么难,使用JSon只须求引用一个文件synCommons。上边我们来看代码,将SuperObject与mORMot做一个对照:

const cstMaxTest = 100000;

procedure TForm1.TestSO;
var jo: ISuperObject; i: Int64; sw: TStopWatch;
begin
  sw := TStopWatch.Create;
  jo := SO();
  i := 0;
  while i < cstMaxTest do begin
    jo.S[‘Name’] := ‘This is a Str’ + IntToStr(i);
    jo.I[‘Age’] := i;
    jo.O[‘List’] := SO(‘[1,”Hello”,5,{“name”:”c5soft”,”age”:50}]’);
    if i = 100 then
      Log(‘SO:’ + jo.AsJSon());
    inc(i);
  end;
  Log(‘SuperObject: ‘ + sw.Stop());
  sw.free;
end;

procedure TForm1.TestMJ;
var jo: Variant; i: Int64; sw: TStopWatch;
begin
  TDocVariant.New(jo); ;
  sw := TStopWatch.Create;
  i := 0;
  while i < cstMaxTest do begin
    jo.Name := ‘This is a Str’ + IntToStr(i);
    jo.Age := i;
    jo.List:=_JSon(‘[1,”Hello”,5,{“name”:”c5soft”,”age”:50}]’);
    if i = 100 then
      Log(‘MJ:’ + VariantSaveJSON(jo));
    inc(i);
  end;
  Log(‘mORMot JS: ‘ + sw.Stop());
  sw.free;
end;

做一个10万次的测试,那是出口结果:
SO:{“Age”:100,”Name”:”This is a Str100″,”List”:[1,”Hello”,5,{“age”:50,”name”:”c5soft”}]}
SuperObject: 00:01.561
MJ:{“Name”:”This is a Str100″,”Age”:100,”List”:[1,”Hello”,5,{“name”:”c5soft”,”age”:50}]}
mORMot JS: 00:00.326

发觉了呢,mORMot比SuperObject快太多,干同样的活,SuperObject用的时间是mORMot的5倍。
动用mORMot还用此外五个好处:
其一、用jo.Name代替jo.S[‘Name’]更直观
sqlite,其二、在调节阶段设置断点,寓目jo的值,delphi告诉您:{“Name”:”This is a Str100″,”Age”:100,”List”:[1,”Hello”,5,{“name”:”c5soft”,”age”:50}
而你去跟踪SuperObject的jo,Delphi只好告诉您那是一个对象,具体值是稍微,她说“太复杂,一言能尽”,结果什么也看不到。

下期预先报告:windows下营造http服务,舍弃indy(intraweb),改用iocp(diocp)吗?错了!用http.sys才是王道,这一切mORMot已经暗中地为大家准备好了。

http://bbs.2ccc.com/topic.asp?topicid=511839


本身测试了,我一个表内五次提取12万多条数据,服务器端生成json串时间不到3秒,程序和数据库都在我机器上,不知底测试的纯正不


mORMot内部集成的数据库是SQLite,mORMot可以连绵起伏其他当前流行的数据库,mORMot还足以不总是其他数据库,用内存表来行事。

说到SQLite,那也是很牛X的,很新鲜的。这是一种动态数据类型的数据库,create table时可以不指定字段类型,指定了数据类型比如整数型,也足以保存字符串类型的数量。那是眼前开源、跨平台、代码量最小的数据库。假如数据量不大,希望并轨在可执行文件中 (embbed),sqlite是一个很好的取舍。

即使要出口很大的数量到顶点界面,一定要动用分页。就算Delphi生成json数据
不慢,网络传送速度快不了,前端(比如浏览器)装配数据快不了。SQLite的select 支持分页:
  SELECT … FROM … WHERE … ORDER BY .. LIMIT… OFFSET…

并未mORMot,能够用DISQLite,仅能做单机版的软件,有了mORMot,使用SQLite数据库可以做C/S架构的软件,而且很便利的就有了3Tier, 4Tier。

网站地图xml地图