zoukankan      html  css  js  c++  java
  • 转: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']更直观
    其二、在调试阶段设置断点,观察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。

  • 相关阅读:
    centos7.6 安装与配置 MongoDB yum方式
    MongoDB 介绍
    centos 关闭selinux
    前端 HTML标签属性
    前端 HTML 标签嵌套规则
    前端 HTML 标签分类
    前端 HTML body标签相关内容 常用标签 表单标签 form里面的 input标签介绍
    前端 HTML body标签相关内容 常用标签 表单标签 form 表单控件分类
    前端 HTML form表单标签 select标签 option 下拉框
    POJ 1426
  • 原文地址:https://www.cnblogs.com/timba1322/p/6238754.html
Copyright © 2011-2022 走看看