dart vm-提高读取json和http通信的性能

dart vm-提高读取json和http通信的性能,dart,Dart,我在比较dart和nodejs 我重写了nodeJs应用程序来解析并返回给http客户端大量的json(大约1000个对象)。出于测试目的,json从文件中读取。然后json被解析为映射,转换为新的表示形式,并响应到客户端 可以在此处找到示例应用程序 当我增加服务的并发调用数时,我注意到响应时间的增加 下面是10个并发线程处理40个请求的ab报告 document Length: 613480 bytes Concurrency Level: 10 Time taken

我在比较dart和nodejs

我重写了nodeJs应用程序来解析并返回给http客户端大量的json(大约1000个对象)。出于测试目的,json从文件中读取。然后json被解析为映射,转换为新的表示形式,并响应到客户端

可以在此处找到示例应用程序

当我增加服务的并发调用数时,我注意到响应时间的增加

下面是10个并发线程处理40个请求的ab报告

document Length:        613480 bytes

Concurrency Level:      10
Time taken for tests:   9.079 seconds
Complete requests:      40
Failed requests:        0
Write errors:           0
Total transferred:      24542960 bytes
HTML transferred:       24539200 bytes
Requests per second:    4.41 [#/sec] (mean)
Time per request:       2269.770 [ms] (mean)
Time per request:       226.977 [ms] (mean, across all concurrent requests)
Transfer rate:          2639.89 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.8      0       5
Processing:  1250 2111 300.0   2126    2880
Waiting:     1024 1917 307.9   1948    2840
Total:       1255 2111 299.6   2126    2880

Percentage of the requests served within a certain time (ms)
50%   2126
66%   2213
75%   2233
80%   2243
90%   2446
95%   2865
98%   2880
99%   2880
100%   2880 (longest request)
请注意,如果只使用2个并发线程,响应时间会下降

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:   279  447 140.9    415    1033
Waiting:      224  397 140.1    405    1000
Total:        279  447 140.9    415    1033

Percentage of the requests served within a certain time (ms)
50%    415
66%    422
75%    430
80%    434
90%    463
95%   1007
98%   1033
99%   1033
100%   1033 (longest request)
当只有一个客户机时,速度会非常快

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:   189  207  14.7    205     265
Waiting:      186  205  14.5    203     262
Total:        189  207  14.7    205     265

Percentage of the requests served within a certain time (ms)
50%    205
66%    209
75%    214
80%    217
90%    224
95%    240
98%    265
99%    265
100%    265 (longest request)
这里是运行在同一数据和同一机器上的节点的ab输出

Document Length:        807396 bytes

Concurrency Level:      10
Time taken for tests:   3.955 seconds
Complete requests:      40
Failed requests:        0
Write errors:           0
Total transferred:      32304320 bytes
HTML transferred:       32295840 bytes
Requests per second:    10.11 [#/sec] (mean)
Time per request:       988.661 [ms] (mean)
Time per request:       98.866 [ms] (mean, across all concurrent requests)
Transfer rate:          7977.25 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.5      0       3
Processing:   954  987  18.6   1000    1007
Waiting:      116  567 272.1    598     999
Total:        954  987  18.7   1001    1007

Percentage of the requests served within a certain time (ms)
50%   1001
66%   1004
75%   1004
80%   1004
90%   1005
95%   1005
98%   1007
99%   1007
100%   1007 (longest request)
我知道如果我在事件队列上放置许多事件,响应时间会增加。但我预计dart会更早地使用微任务来处理等待事件

这是数据示例,结果数组始终包含1000项

{
    "numFound": 1234,
    "results": [
        {
            "cid": "id",
            "cir": "id",
            "cn": "name",
            "cbr": "string",
            "crn": "string",
            "dep": "string",
            "depid": "id",
            "fn": "string",
            "jvid": "id",
            "loc": "string",
            "pid": "id",
            "date": int,
            "toe": "string",
            "ujn": "string",
            "vn": "string",
            "ind": "string",
            "indid": "id",
            "fun": "string",
            "funid": "id",
            "des": "string",
            "date2": int,
            "uuid": "string",
            "elv": "string",
            "elvid": "id",
            "cfv": Array<Objects>
        }
    ]
}
{
“numFound”:1234,
“结果”:[
{
“cid”:“id”,
“cir”:“id”,
“cn”:“名称”,
“cbr”:“字符串”,
“crn”:“字符串”,
“dep”:“字符串”,
“depid”:“id”,
“fn”:“字符串”,
“jvid”:“id”,
“loc”:“字符串”,
“pid”:“id”,
“日期”:int,
“脚趾”:“字符串”,
“ujn”:“字符串”,
“vn”:“字符串”,
“ind”:“string”,
“indid”:“id”,
“乐趣”:“字符串”,
“funid”:“id”,
“des”:“string”,
“date2”:int,
“uuid”:“字符串”,
“elv”:“字符串”,
“elvid”:“id”,
“cfv”:数组
}
]
}
我正在使用centos 6.5(我已经构建了dart 1.2 sdk)。我使用

性能记录-g--dart--generate_perf_events_symbols start.dart

下面是“perf report--call graph flat”显示的内容,但我不确定如何解释输出以改进代码

    75.86%  dart  [kernel.kallsyms]    [k] __do_softirq
+   3.62%  dart  dart                 [.] dart::MarkingVisitor::VisitPointers(dart::RawObject**, dart::RawObject**)
+   1.36%  dart  dart                 [.] dart::ScavengerVisitor::VisitPointers(dart::RawObject**, dart::RawObject**)
+   1.02%  dart  dart                 [.] dart::GCSweeper::SweepPage(dart::HeapPage*, dart::FreeList*)
+   0.96%  dart  perf-5465.map        [.] *dart:core_StringBuffer_writeCharCode
+   0.74%  dart  perf-5465.map        [.] *dart:convert__Utf8Decoder@0xda80e0a_convert
+   0.71%  dart  perf-5465.map        [.] *dart:convert__JsonStringifier@0xda80e0a_escape
+   0.57%  dart  perf-5465.map        [.] *dart:convert__Utf8Encoder@0xda80e0a__fillBuffer@0xda80e0a
+   0.55%  dart  libc-2.12.so         [.] _wordcopy_fwd_aligned
    0.53%  dart  [kernel.kallsyms]    [k] retint_careful
+   0.52%  dart  perf-5465.map        [.] *dart:core_StringBuffer__addPart@0x36924d72
    0.50%  dart  [kernel.kallsyms]    [k] finish_task_switch
    0.49%  dart  dart                 [.] dart::RawObject::VisitPointers(dart::ObjectPointerVisitor*)
    0.41%  dart  [vsyscall]           [.] 0x000000000000014c
    0.38%  dart  libc-2.12.so         [.] memmove
    0.29%  dart  libpthread-2.12.so   [.] pthread_getspecific
    0.29%  dart  dart                 [.] dart::FreeList::TryAllocate(long, bool)
    0.28%  dart  perf-5465.map        [.] dart:core__List@0x36924d72__List@0x36924d72.
    0.28%  dart  perf-5465.map        [.] *dart:convert__JsonParser@0xda80e0a_parse
    0.27%  dart  perf-5465.map        [.] *dart:core_StringBuffer_write
    0.27%  dart  perf-5465.map        [.] *package:public-api/publicApi.dart_PostingResultMapper_mapPosting_mapPosting
    0.27%  dart  [kernel.kallsyms]    [k] _spin_unlock_irqrestore
    0.27%  dart  dart                 [.] dart::String::Copy(dart::String const&, long, unsigned char const*, long)
    0.27%  dart  dart                 [.] dart::VMHandles::AllocateHandle(dart::Isolate*)
    0.26%  dart  perf-5465.map        [.] *dart:collection__HashMap@0x23c35ea0&&_LinkedHashMapMixin@0x23c35ea0_forEach
    0.25%  dart  perf-5465.map        [.] *dart:convert__JsonStringifier@0xda80e0a_stringifyJsonValue
    0.24%  dart  dart                 [.] dart::Object::Allocate(long, long, dart::Heap::Space)
    0.24%  dart  perf-5465.map        [.] dart:core__StringBase@0x36924d72_codeUnitAt
    0.23%  dart  dart                 [.] dart::GCMarker::DrainMarkingStack(dart::Isolate*, dart::MarkingVisitor*)
    0.22%  dart  dart                 [.] dart::ClassTable::UpdateLiveOld(long, long)
    0.22%  dart  perf-5465.map        [.] *dart:convert__JsonParser@0xda80e0a_parseString
    0.21%  dart  perf-5465.map        [.] *dart:convert__JsonParser@0xda80e0a_parseString
    0.20%  dart  dart                 [.] dart::String::Copy(dart::String const&, long, dart::String const&, long, long)
    0.17%  dart  dart                 [.] dart::OneByteString::ConcatAll(dart::Array const&, long, long, long, dart::Heap::Space)
    0.16%  dart  [kernel.kallsyms]    [k] __do_page_fault
    0.16%  dart  dart                 [.] dart::BootstrapNatives::DN_StringBase_substringUnchecked(_Dart_NativeArguments*)
    0.15%  dart  dart                 [.] dart::String::ConcatAllRange(dart::Array const&, long, long, dart::Heap::Space)
    0.15%  dart  perf-5465.map        [.] *dart:core_StringBuffer__consumeBuffer@0x36924d72
    0.14%  dart  [kernel.kallsyms]    [k] clear_page_c
    0.13%  dart  perf-5465.map        [.] _stub_OneArgCheckInlineCache
    0.12%  dart  perf-5465.map        [.] *dart:core__StringBase@0x36924d72_substring
    0.11%  dart  dart                 [.] dart::String::Copy(dart::String const&, long, unsigned short const*, long)
    0.11%  dart  perf-5465.map        [.] *dart:collection__HashMap@0x23c35ea0&&_LinkedHashMapMixin@0x23c35ea0__addEntry@0x23c35ea0
    0.11%  dart  dart                 [.] dart::String::SubString(dart::String const&, long, long, dart::Heap::Space)
    0.11%  dart  dart                 [.] dart::FreeList::SplitElementAfterAndEnqueue(dart::FreeListElement*, long, bool)
    0.10%  dart  [kernel.kallsyms]    [k] get_page_from_freelist
    0.10%  dart  dart                 [.] 0x000000000031b333
    0.10%  dart  dart                 [.] dart::Scavenger::ProcessToSpace(dart::ScavengerVisitor*)
    0.09%  dart  dart                 [.] dart::RawArray::VisitArrayPointers(dart::RawArray*, dart::ObjectPointerVisitor*)
    0.09%  dart  dart                 [.] dart::ClassTable::UpdateAllocatedOld(long, long)
    0.08%  dart  dart                 [.] dart::Profiler::RecordSampleInterruptCallback(dart::InterruptedThreadState const&, void*)
    0.08%  dart  dart                 [.] dart::BootstrapNatives::DN_String_concatRange(_Dart_NativeArguments*)
    0.08%  dart  perf-5465.map        [.] *dart:convert__JsonStringifier@0xda80e0a_stringifyJsonValue_<anonymous closure>
    0.07%  dart  perf-5465.map        [.] _stub_TwoArgsCheckInlineCache
    0.07%  dart  dart                 [.] dart::BootstrapNatives::DN_Object_getHash(_Dart_NativeArguments*)
    0.07%  dart  perf-5465.map        [.] *dart:core__Smi@0x36924d72_toString
    0.07%  dart  perf-5465.map        [.] dart:core__OneByteString@0x36924d72_get_hashCode
    0.07%  dart  dart                 [.] dart::Instance::IsInstance() const
    0.06%  dart  dart                 [.] dart::BootstrapNatives::DN_StringBuffer_createStringFromUint16Array(_Dart_NativeArguments*)
    0.06%  dart  perf-5465.map        [.] *dart:collection_Maps_mapToString
    0.06%  dart  dart                 [.] dart::VMHandles::~VMHandles()
    0.06%  dart  dart                 [.] dart::GCMarker::MarkObjects(dart::Isolate*, dart::PageSpace*, bool, bool)
    0.06%  dart  dart                 [.] dart::PageSpace::TryAllocate(long, dart::HeapPage::PageType, dart::PageSpace::GrowthPolicy)
    0.06%  dart  [kernel.kallsyms]    [k] free_hot_cold_page
    0.06%  dart  perf-5465.map        [.] dart:core__StringBase@0x36924d72__substringUncheckedNative@0x36924d72
    0.06%  dart  dart                 [.] dart::LoadOptimizer::Optimize()
    0.06%  dart  dart                 [.] dart::Heap::AllocateNew(long)
75.86%dart[kernel.kallsyms][k]\u do\u softirq
+3.62%省道[.]省道::标记访客::访客点(省道::RawObject**,省道::RawObject**)
+1.36%省道[.]省道::扫掠器::访问指针(省道::RawObject**,省道::RawObject**)
+1.02%省道[.]省道::GCSweepper::SweepPage(省道::HeapPage*,省道::FreeList*)
+0.96%dart perf-5465.map[.]*dart:core\U StringBuffer\U writeCharCode
+0.74%省道性能-5465.map[.]*省道:转换__Utf8Decoder@0xda80e0a_convert
+0.71%省道性能-5465.map[.]*省道:转换__JsonStringifier@0xda80e0a_escape
+0.57%省道性能-5465.map[.]*省道:转换__Utf8Encoder@0xda80e0a__fillBuffer@0xda80e0a
+0.55%dart libc-2.12.so[.]\u文字复制\u fwd\u对齐
0.53%dart[内核.kallsyms][k]参考值
+0.52%dart性能-5465.map[.]*dart:core_StringBuffer__addPart@0x36924d72
0.50%dart[kernel.kallsyms][k]完成任务切换
0.49%省道[.]省道::RawObject::访问点(省道::ObjectPointServiceSitor*)
0.41%dart[vsyscall][.]0x000000000000014c
0.38%dart libc-2.12.so[.]memmove
0.29%dart libpthread-2.12.so[.]pthread_getspecific
0.29%省道[.]省道::自由列表::tryallosite(长,布尔)
0.28%省道性能-5465.map[.]省道:核心__List@0x36924d72__List@0x36924d72。
0.28%省道性能-5465.map[.]*省道:转换__JsonParser@0xda80e0a_parse
0.27%dart性能-5465.map[.]*dart:core\u StringBuffer\u write
0.27%dart perf-5465.map[.]*包:公共api/publicApi.dart\u PostingResultMapper\u mapPosting\u mapPosting
0.27%飞镖[kernel.kallsyms][k]\u旋转\u解锁\u irqrestore
0.27%省道[.]省道::字符串::复制(省道::字符串常量和,长,无符号字符常量*,长)
0.27%省道[.]省道::VMHandles::分配句柄(省道::隔离*)
0.26%省道性能-5465.map[.]*省道:收集__HashMap@0x23c35ea0&&_LinkedHashMapMixin@0x23c35ea0_forEach
0.25%省道性能-5465.map[.]*省道:转换__JsonStringifier@0xda80e0a_stringifyJsonValue
0.24%省道[.]省道::对象::分配(长,长,省道::堆::空间)
0.24%省道性能-5465.map[.]省道:核心__StringBase@0x36924d72_codeUnitAt
0.23%省道[.]省道::GCMarker::DrainMarkingStack(省道::隔离*,省道::标记访客*)
0.22%省道[.]省道::类表::更新版本(长,长)
0.22%省道性能-5465.map[.]*省道:转换__JsonParser@0xda80e0a_parseString
0.21%省道性能-5465.map[.]*省道:转换__JsonParser@0xda80e0a_parseString
0.20%省道[.]省道::字符串::复制(省道::字符串常量和,长,省道::字符串常量和,长,长)
0.17%dart dart[.]dart::OneByteString::ConcatAll(dart::数组常量&,long,long,long,dart::Heap::Space)
0.16%dart[kernel.kallsyms][k]\u do\u page\u错误
0.16%省道[.]省道::引导策略::DN\u StringBase\u子字符串未选中(\u dart\u NativeArguments*)
0.15%省道[.]省道::字符串::concatalrange(省道::数组常量&,长,长,省道::堆::空间)
0.15%dart性能-5465.map[.]*dart:core_StringBuffer__consumeBuffer@0x36924d72
0.14%dart[kernel.kallsyms][k]清除页面
0.13%dart perf-5465.map[.]\u存根\u OneArgCheckInlineCache
0.12%省道性能-5465.map[.]*省道:核心__StringBase@0x36924d72_substring
0.11%省道[.]省道::字符串::复制(省道::字符串常量&,长,无符号短常量*,长)
0.11%省道性能-5465.map[.]*省道:收集__HashMap@0x23c35ea0&&_LinkedHashMapMixin@0x23c35ea0__addEntry@0x23c35ea0
0.11%