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。
转载于:https://www.cnblogs.com/h2zZhou/p/7364947.html
Delphi语言最好的JSON代码库 mORMot学习笔记1相关推荐
- c语言查看cpu温度代码_树莓派学习笔记——短短几行C语言代码获取树莓派的CPU温度...
玩转树莓派 标签: 树莓派CPU温度 前言 本文通过文件操作读取树莓派CPU温度,在linux系统中任何设备的操作都被抽象成为文件读写,通过读取/sys/class/thermal/thermal_ ...
- 《C++标准库》学习笔记 — STL —流
<C++标准库>学习笔记 - STL -流 一.操控器 1.原理 2.自定义操控器 3.控制输入的宽度 二.自定义 I/O 操作符 1.重载输出操作符 2.输入操作符 三.自定义格式化标志 ...
- Lib库使用学习笔记
Lib库使用学习笔记 转自:http://blog.csdn.net/macky0668/article/details/6044867 技术前沿 2008-03-31 14:21:10 阅读177 ...
- 线性代数库 Armadillo 学习笔记
线性代数库 Armadillo 学习笔记 项目环境 Xcode 项目配置 前置代码 矩阵基本操作 全零矩阵 全一矩阵 对角矩阵 打印一个矩阵 修改获取矩阵元素 获取某行某列 获取对角向量 转置矩阵 逆 ...
- 点云库PCL学习笔记 -- 点云滤波Filtering -- 3. StatisticalOutlierRemoval 统计滤波器
点云库PCL学习笔记 -- 点云滤波Filtering -- 3.StatisticalOutlierRemoval 统计滤波器 StatisticalOutlierRemoval 统计滤波器相关简介 ...
- Python第三方库pygame学习笔记(一)
Pygame Python最经典的2D游戏开发第三方库,也支持3D游戏开发 Pygame适合用于游戏逻辑验证.游戏入门及系统演示验证 Pygame是一种游戏开发引擎,基本逻辑具有参考价值 pygame ...
- STM32F407霸天虎HAL库CubeMX学习笔记——DS18B20
STM32F407霸天虎HAL库CubeMX学习笔记--DS18B20 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil printf重写 tim.c DS18B20.h DS18B20 ...
- 【Python-pywt】 小波变化库—Pywavelets 学习笔记
(转载) [Python ]小波变化库--Pywavelets 学习笔记_nanbei2463776506的博客-CSDN博客 https://blog.csdn.net/nanbei24637765 ...
- 从滚动条到画布的几个代码文件——Python学习笔记之十七
从滚动条到画布的几个代码文件--Python学习笔记之十七 这一章的继续学习,比在前的照片涉及代码要轻松一些,代码打完后的预期结果总能实现.特别让人欣慰的一点,文本上的文字理解好像上了一个台阶,不用多 ...
最新文章
- spl_autoload_register与autoload区别
- R语言PCA主成分分析(Principle Component Analysis)实战2
- shell下的进度条和最大最小平均值
- Android--OkHttp理解系列(一)
- xp系统 javafx_使用JavaFX构建React系统
- AtCoder-2379 - 连接竹竿 思维 | 数学
- H3C 环路避免机制六:触发更新
- Python入门(六)序列之中,序列之间
- 怎么删除安卓手机里没用的文件夹,如何知道哪个有用哪些没用?
- ajax无法访问,Ajax不能跨域访问的解决方案
- python迭代器学习与简单的实践
- linux screen会话命令
- 整理了一些计算机毕设源码+论文 免费分享给大家
- 韦东山之学习笔记——NOR Flash
- 神雕侠侣手游服务器维护,《神雕侠侣怀旧服》2月15日更新维护公告
- 计算机国内期刊sci,国内计算机类期刊 SCI收录:
- 计算机桌面左侧在显示器里面,电脑屏幕显示偏左怎么解决
- 大白菜 U盘系统指南
- 给电脑C盘系统盘瘦身的四种方法
- JMeter递增加压
热门文章
- 【HDU - 3328】Flipper (栈模拟)
- dls的BM算法模板(线性递推问题,解决矩阵快速幂解决不了的问题)
- 计算机采购类增值税税率是多少,各个行业的税率是多少?
- php openssl加密数据长度,PHP使用openssl解密数据(用mcrypt加密)
- java kryo register_java相关:Kryo框架使用方法代码示例
- 刚学计算机先学什么好,计算机语言入门先学什么?
- 大连工业大学艺术学院计算机考试,大连工业大学艺术与信息工程学院应用科技学院...
- 尼尔机器人技能快捷键_《尼尔机械纪元》连招操作技巧
- 剑指offer:63-66记录
- leetcode182. 查找重复的电子邮箱(SQL)