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']更直观 其二、在调试阶段设置断点,观察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。
|
请发表评论