轉:Delphi語言最好的JSON程式碼程式庫 mORMot學習筆記1

來源:互聯網
上載者:User

標籤:準備   放棄   資料類型   mpi   data   raw   機器   war   時間   

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。

轉:Delphi語言最好的JSON程式碼程式庫 mORMot學習筆記1

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.