Web Framework Benchmarks
这是许多执行基本任务(例如JSON序列化,数据库访问和服务器端模板组成)的Web应用程序框架的性能比较。每个框架都在实际的生产配置中运行。结果在云实例和物理硬件上捕获。测试实现主要是由社区贡献的,所有资源都可以从GitHub存储库中获得。
注意:我们使用“框架”一词来泛指平台,微框架和全栈框架。
在2013年3月的博客文章中,我们发布了比较几个执行简单但有代表性的任务(序列化JSON对象和查询数据库)的Web应用程序框架的性能的结果。自那时以来,社区的投入一直是巨大的。我们(现在为该项目的所有贡献者发言)一直在定期更新测试实现,扩大覆盖范围并在半定期更新(我们称为“回合”)中获取结果。
https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=json
测试代码全平台:
https://github.com/TechEmpower/FrameworkBenchmarks
彩图:
Best JSON responses per second, Dell R440 Xeon Gold 10 GbE(186 tests)
Rnk | Framework | Best performance (higher is better) | Errors | Cls | Lng | Plt | FE | Aos | IA | |
---|---|---|---|---|---|---|---|---|---|---|
1 | servlet | 560,548 | 100.0% | 0 | Plt | Jav | Svt | Res | Lin | Rea |
2 | revenj-jvm | 554,142 | 98.9% | 0 | Ful | Jav | Svt | Res | Lin | Rea |
3 | gemini | 549,035 | 97.9% | 0 | Ful | Jav | Svt | Res | Lin | Rea |
4 | ulib-json | 535,616 | 95.6% | 0 | Plt | C | Non | ULi | Lin | Rea |
5 | blaze | 505,464 | 90.2% | 0 | Mcr | Sca | bla | Non | Lin | Rea |
6 | grizzly | 494,667 | 88.2% | 0 | Mcr | Jav | Svt | Grz | Lin | Rea |
7 | undertow | 490,725 | 87.5% | 0 | Plt | Jav | Utw | Non | Lin | Rea |
8 | h2o | 490,135 | 87.4% | 0 | Plt | C | Non | Non | Lin | Rea |
9 | vertx-web | 466,677 | 83.3% | 0 | Mcr | Jav | vtx | Non | Lin | Rea |
10 | vertx | 461,123 | 82.3% | 0 | Plt | Jav | ver | Non | Lin | Rea |
11 | openresty | 461,002 | 82.2% | 0 | Plt | Lua | OpR | ngx | Lin | Rea |
12 | colossus | 457,534 | 81.6% | 0 | Mcr | Sca | Akk | Non | Lin | Rea |
13 | tokio-minihttp | 449,705 | 80.2% | 0 | Mcr | Rus | Rus | tok | Lin | Rea |
14 | finatra | 441,072 | 78.7% | 0 | Mcr | Sca | Nty | Non | Lin | Rea |
15 | netty | 433,529 | 77.3% | 0 | Plt | Jav | Nty | Non | Lin | Rea |
16 | falcon | 432,895 | 77.2% | 0 | Mcr | Py | Non | Mei | Lin | Rea |
17 | libreactor | 427,211 | 76.2% | 0 | Mcr | C | Non | Non | Lin | Rea |
18 | cpoll_cppsp | 418,258 | 74.6% | 0 | Plt | C | Non | Non | Lin | Rea |
19 | wicket | 416,601 | 74.3% | 0 | Ful | Jav | Svt | Res | Lin | Rea |
20 | finagle | 391,735 | 69.9% | 0 | Mcr | Sca | Nty | Non | Lin | Rea |
21 | cutelyst-thread | 389,488 | 69.5% | 0 | Ful | C | cut | Non | Lin | Rea |
22 | nodejs | 372,531 | 66.5% | 0 | Plt | JS | njs | Non | Lin | Rea |
23 | rapidoid-http-fast | 372,076 | 66.4% | 0 | Plt | Jav | Rap | Non | Lin | Rea |
24 | duda | 370,911 | 66.2% | 0 | Plt | C | dud | Mon | Lin | Rea |
25 | fintrospect | 370,377 | 66.1% | 0 | Mcr | Sca | Nty | Non | Lin | Rea |
26 | falcon-py3 | 362,461 | 64.7% | 0 | Mcr | Py | Non | Mei | Lin | Rea |
27 | nickel | 358,618 | 64.0% | 0 | Mcr | Rus | Rus | Hyp | Lin | Rea |
28 | jlhttp | 344,546 | 61.5% | 0 | Plt | Jav | JLH | Non | Lin | Rea |
29 | rapidoid | 343,704 | 61.3% | 0 | Plt | Jav | Rap | Non | Lin | Rea |
30 | lapis | 343,577 | 61.3% | 0 | Ful | Lua | OpR | ngx | Lin | Rea |
31 | iron | 341,296 | 60.9% | 0 | Mcr | Rus | Rus | Hyp | Lin | Rea |
32 | jooby | 330,810 | 59.0% | 0 | Ful | Jav | Nty | Non | Lin | Rea |
33 | hyper | 326,973 | 58.3% | 0 | Mcr | Rus | Rus | Hyp | Lin | Rea |
34 | bottle | 318,515 | 56.8% | 0 | Mcr | Py | Mei | Non | Lin | Rea |
35 | fasthttp | 302,845 | 54.0% | 0 | Plt | Go | Non | Non | Lin | Rea |
36 | kami | 279,076 | 49.8% | 0 | Mcr | Go | Non | Non | Lin | Rea |
37 | jetty-servlet | 269,874 | 48.1% | 0 | Plt | Jav | Jty | Non | Lin | Rea |
38 | go | 261,448 | 46.6% | 0 | Plt | Go | Non | Non | Lin | Rea |
39 | weppy-py3 | 257,196 | 45.9% | 0 | Ful | Py | Mei | Non | Lin | Rea |
40 | spark | 256,662 | 45.8% | 0 | Mcr | Jav | Svt | Jty | Lin | Rea |
41 | weppy | 255,510 | 45.6% | 0 | Ful | Py | Mei | Non | Lin | Rea |
42 | jetty | 250,671 | 44.7% | 0 | Plt | Jav | Jty | Non | Lin | Rea |
43 | gin | 249,839 | 44.6% | 0 | Mcr | Go | Non | Non | Lin | Rea |
44 | yesod | 243,994 | 43.5% | 0 | Ful | Hkl | Wai | Wrp | Lin | Rea |
45 | play2-scala | 240,174 | 42.8% | 0 | Ful | Sca | Akk | Non | Lin | Rea |
46 | aleph | 234,767 | 41.9% | 0 | Mcr | Clj | Nty | Non | Lin | Rea |
47 | beego | 233,105 | 41.6% | 0 | Ful | Go | Non | Non | Lin | Rea |
48 | falcore | 229,208 | 40.9% | 0 | Mcr | Go | Non | Non | Lin | Rea |
49 | grizzly-jersey | 219,894 | 39.2% | 0 | Mcr | Jav | JAX | Grz | Lin | Rea |
50 | finch | 201,447 | 35.9% | 0 | Mcr | Sca | Nty | Non | Lin | Rea |
51 | express | 199,878 | 35.7% | 0 | Mcr | JS | Non | Non | Lin | Rea |
52 | roda-sequel | 193,679 | 34.6% | 0 | Mcr | Rby | Rac | Pum | Lin | Rea |
53 | roda-sequel-postgres | 190,315 | 34.0% | 0 | Mcr | Rby | Rac | Pum | Lin | Rea |
54 | urweb | 183,888 | 32.8% | 0 | Ful | Ur | Ur/ | Non | Lin | Rea |
55 | activeweb-jackson | 176,825 | 31.5% | 0 | Ful | Jav | Svt | Non | Lin | Rea |
56 | pyramid-py2 | 172,666 | 30.8% | 0 | Ful | Py | Non | Mei | Lin | Rea |
57 | phoenix | 164,921 | 29.4% | 0 | Ful | Eli | Cow | Non | Lin | Rea |
58 | pyramid | 162,962 | 29.1% | 0 | Ful | Py | Non | Mei | Lin | Rea |
59 | hexagon | 160,371 | 28.6% | 0 | Mcr | Kot | Svt | Non | Lin | Rea |
60 | servant | 156,821 | 28.0% | 0 | Mcr | Hkl | Wai | Wrp | Lin | Rea |
61 | tapestry | 156,479 | 27.9% | 0 | Ful | Jav | Svt | Res | Lin | Rea |
62 | aiohttp | 154,018 | 27.5% | 0 | Mcr | Py | asy | Gun | Lin | Rea |
63 | koa | 152,925 | 27.3% | 0 | Mcr | JS | Non | Non | Lin | Rea |
64 | undertow-jersey-hikaricp | 145,262 | 25.9% | 0 | Plt | Jav | JAX | Non | Lin | Rea |
65 | revenj | 143,516 | 25.6% | 0 | Ful | C# | Non | Non | Lin | Rea |
66 | bayou | 136,675 | 24.4% | 0 | Plt | Jav | Bay | Non | Lin | Rea |
67 | webgo | 130,231 | 23.2% | 0 | Mcr | Go | Non | Non | Lin | Rea |
68 | sinatra-postgres | 118,093 | 21.1% | 0 | Mcr | Rby | Rac | Pum | Lin | Rea |
69 | curacao | 117,926 | 21.0% | 3 | Mcr | Jav | Svt | Non | Lin | Rea |
70 | sinatra-sequel | 117,757 | 21.0% | 0 | Mcr | Rby | Rac | Pum | Lin | Rea |
71 | sinatra-sequel-postgres | 117,258 | 20.9% | 0 | Mcr | Rby | Rac | Pum | Lin | Rea |
72 | sinatra | 116,280 | 20.7% | 0 | Mcr | Rby | Rac | Pum | Lin | Rea |
73 | echo | 114,610 | 20.4% | 0 | Mcr | Go | Non | Non | Lin | Rea |
74 | play2-scala-slick | 114,377 | 20.4% | 0 | Ful | Sca | Akk | Non | Lin | Rea |
75 | restexpress | 112,325 | 20.0% | 0 | Mcr | Jav | Nty | Non | Lin | Rea |
76 | play2-scala-reactivemongo | 109,050 | 19.5% | 0 | Ful | Sca | Akk | Non | Lin | Rea |
77 | roda-sequel-torquebox-jruby | 108,330 | 19.3% | 0 | Mcr | Rby | Rac | Tor | Lin | Rea |
78 | akka-http | 103,453 | 18.5% | 0 | Mcr | Sca | Akk | Non | Lin | Rea |
79 | compojure | 103,222 | 18.4% | 0 | Mcr | Clj | Svt | Res | Lin | Rea |
80 | roda-sequel-postgres-torquebox-jruby | 101,845 | 18.2% | 0 | Mcr | Rby | Rac | Tor | Lin | Rea |
81 | octopus | 101,460 | 18.1% | 0 | Ful | Lua | OpR | ngx | Lin | Rea |
82 | cutelyst-nginx | 98,480 | 17.6% | 0 | Ful | C | uWS | ngx | Lin | Rea |
83 | dropwizard | 98,464 | 17.6% | 0 | Ful | Jav | JAX | Jty | Lin | Rea |
84 | flask | 93,373 | 16.7% | 0 | Mcr | Py | Mei | Non | Lin | Rea |
85 | redstone | 93,084 | 16.6% | 0 | Mcr | Dar | Non | Non | Lin | Rea |
86 | snap | 93,005 | 16.6% | 0 | Mcr | Hkl | Non | Non | Lin | Rea |
87 | turbogears | 90,292 | 16.1% | 0 | Mcr | Py | Non | Mei | Lin | Rea |
88 | api_hour | 88,822 | 15.8% | 18 | Mcr | Py | asy | Gun | Lin | Rea |
89 | django | 87,427 | 15.6% | 0 | Ful | Py | Non | Mei | Lin | Rea |
90 | evhttp-sharp | 87,219 | 15.6% | 0 | Mcr | C# | Non | Non | Lin | Rea |
91 | roda-sequel-passenger-mri | 87,052 | 15.5% | 0 | Mcr | Rby | Rac | Pas | Lin | Rea |
92 | roda-sequel-postgres-passenger-mri | 87,019 | 15.5% | 0 | Mcr | Rby | Rac | Pas | Lin | Rea |
93 | comsat-webactors-undertow | 83,980 | 15.0% | 0 | Plt | Jav | Com | Non | Lin | Rea |
94 | django-py3 | 83,390 | 14.9% | 0 | Ful | Py | Non | Mei | Lin | Rea |
95 | goji | 83,133 | 14.8% | 0 | Mcr | Go | Non | Non | Lin | Rea |
96 | http4s | 81,717 | 14.6% | 0 | Mcr | Sca | NIO | bla | Lin | Rea |
97 | luminus | 74,709 | 13.3% | 0 | Mcr | Clj | Rin | Non | Lin | Rea |
98 | cutelyst | 69,645 | 12.4% | 0 | Ful | C | cut | Non | Lin | Rea |
99 | sinatra-sequel-passenger-mri | 64,468 | 11.5% | 0 | Mcr | Rby | Rac | Pas | Lin | Rea |
100 | sinatra-sequel-postgres-passenger-mri | 64,462 | 11.5% | 0 | Mcr | Rby | Rac | Pas | Lin | Rea |
101 | sinatra-passenger-mri | 63,897 | 11.4% | 0 | Mcr | Rby | Rac | Pas | Lin | Rea |
102 | sinatra-postgres-passenger-mri | 63,839 | 11.4% | 0 | Mcr | Rby | Rac | Pas | Lin | Rea |
103 | ringojs | 62,824 | 11.2% | 0 | Plt | JS | Jty | Non | Lin | Rea |
104 | jester | 60,327 | 10.8% | 0 | Mcr | Nim | Non | Non | Lin | Rea |
105 | wt | 59,541 | 10.6% | 0 | Ful | C | Non | Non | Lin | Rea |
106 | tornado | 59,315 | 10.6% | 0 | Plt | Py | Non | Tor | Lin | Rea |
107 | tornado-py3 | 55,029 | 9.8% | 0 | Plt | Py | Non | Tor | Lin | Rea |
108 | http-kit | 54,271 | 9.7% | 0 | Plt | Clj | Rin | Non | Lin | Rea |
109 | activeweb | 53,579 | 9.6% | 0 | Ful | Jav | Svt | Non | Lin | Rea |
110 | php-php5 | 44,327 | 7.9% | 0 | Plt | PHP | Non | ngx | Lin | Rea |
111 | web2py-optimized | 42,960 | 7.7% | 0 | Ful | Py | Mei | Non | Lin | Rea |
112 | php | 42,308 | 7.5% | 0 | Plt | PHP | Non | ngx | Lin | Rea |
113 | pedestal | 42,045 | 7.5% | 0 | Mcr | Clj | Jty | Non | Lin | Rea |
114 | grails | 37,021 | 6.6% | 0 | Ful | Grv | Svt | Non | Lin | Rea |
115 | sinatra-sequel-torquebox-jruby | 35,547 | 6.3% | 0 | Mcr | Rby | Rac | Tor | Lin | Rea |
116 | fat-free | 34,839 | 6.2% | 0 | Ful | PHP | Non | ngx | Lin | Rea |
117 | phalcon | 34,439 | 6.1% | 0 | Ful | PHP | Non | ngx | Lin | Rea |
118 | sinatra-sequel-postgres-torquebox-jruby | 33,892 | 6.0% | 0 | Mcr | Rby | Rac | Tor | Lin | Rea |
119 | roda-sequel-postgres-unicorn-mri | 33,063 | 5.9% | 0 | Mcr | Rby | Rac | Uni | Lin | Rea |
120 | roda-sequel-unicorn-mri | 32,485 | 5.8% | 0 | Mcr | Rby | Rac | Uni | Lin | Rea |
121 | sinatra-unicorn-mri | 31,550 | 5.6% | 0 | Mcr | Rby | Rac | Uni | Lin | Rea |
122 | sinatra-postgres-unicorn-mri | 31,185 | 5.6% | 0 | Mcr | Rby | Rac | Uni | Lin | Rea |
123 | sinatra-sequel-postgres-unicorn-mri | 30,686 | 5.5% | 0 | Mcr | Rby | Rac | Uni | Lin | Rea |
124 | sinatra-sequel-unicorn-mri | 30,475 | 5.4% | 0 | Mcr | Rby | Rac | Uni | Lin | Rea |
125 | comsat-servlet-undertow | 29,396 | 5.2% | 0 | Plt | Jav | Svt | Non | Lin | Rea |
126 | ringojs-convenient | 26,078 | 4.7% | 0 | Mcr | JS | Rin | Non | Lin | Rea |
127 | mojolicious | 25,595 | 4.6% | 0 | Ful | Prl | Non | Hyp | Lin | Rea |
128 | rouille | 25,095 | 4.5% | 0 | Mcr | Rus | Rus | rou | Lin | Rea |
129 | ninja-standalone | 24,692 | 4.4% | 0 | Ful | Jav | Jty | Non | Lin | Rea |
130 | spring | 22,228 | 4.0% | 0 | Ful | Jav | tom | Non | Lin | Rea |
131 | slim | 21,589 | 3.9% | 0 | Mcr | PHP | Non | ngx | Lin | Rea |
132 | web2py | 20,005 | 3.6% | 0 | Ful | Py | Mei | Non | Lin | Rea |
133 | tornado-postgresql-raw | 19,760 | 3.5% | 0 | Plt | Py | Non | Tor | Lin | Rea |
134 | revel | 18,930 | 3.4% | 0 | Ful | Go | Non | Non | Lin | Rea |
135 | kemal | 12,845 | 2.3% | 0 | Ful | Cry | Non | Non | Lin | Rea |
136 | web-simple | 12,645 | 2.3% | 0 | Mcr | Prl | Plk | Sta | Lin | Rea |
137 | kelp | 12,265 | 2.2% | 0 | Ful | Prl | Plk | Sta | Lin | Rea |
138 | kelp-mongodb | 11,905 | 2.1% | 0 | Ful | Prl | Plk | Sta | Lin | Rea |
139 | codeigniter | 11,824 | 2.1% | 0 | Ful | PHP | Non | ngx | Lin | Rea |
140 | vibed-ldc | 11,813 | 2.1% | 0 | Plt | D | Non | Non | Lin | Rea |
141 | dancer | 11,611 | 2.1% | 0 | Ful | Prl | Plk | Sta | Lin | Rea |
142 | spock | 11,481 | 2.0% | 0 | Mcr | Hkl | Wai | Wrp | Lin | Rea |
143 | hot | 10,627 | 1.9% | 0 | Plt | Grv | Jty | Jty | Lin | Rea |
144 | yii2 | 10,388 | 1.9% | 0 | Ful | PHP | Non | ngx | Lin | Rea |
145 | slim-php5 | 9,640 | 1.7% | 0 | Mcr | PHP | Non | ngx | Lin | Rea |
146 | play1 | 8,706 | 1.6% | 8 | Ful | Jav | Nty | Non | Lin | Rea |
147 | vibed | 8,415 | 1.5% | 0 | Mcr | D | Non | Non | Lin | Rea |
148 | grape | 8,110 | 1.4% | 0 | Mcr | Rby | Rac | Pum | Lin | Rea |
149 | lumen | 8,033 | 1.4% | 0 | Mcr | PHP | Non | ngx | Lin | Rea |
150 | hhvm | 7,317 | 1.3% | 0 | Plt | PHP | Non | ngx | Lin | Rea |
151 | laravel | 7,020 | 1.3% | 0 | Ful | PHP | Non | ngx | Lin | Rea |
152 | grape-unicorn | 7,000 | 1.2% | 0 | Mcr | Rby | Rac | Uni | Lin | Rea |
153 | fuel | 6,945 | 1.2% | 0 | Mcr | PHP | Non | ngx | Lin | Rea |
154 | lithium | 6,811 | 1.2% | 0 | Ful | PHP | Non | ngx | Lin | Rea |
155 | padrino | 6,701 | 1.2% | 0 | Mcr | Rby | Rac | Pum | Lin | Rea |
156 | padrino-unicorn | 6,624 | 1.2% | 0 | Mcr | Rby | Rac | Uni | Lin | Rea |
157 | hapi | 6,225 | 1.1% | 0 | Mcr | JS | Non | Non | Lin | Rea |
158 | plack | 5,153 | 0.9% | 0 | Mcr | Prl | Plk | ngx | Lin | Rea |
159 | chicagoboss | 5,060 | 0.9% | 0 | Ful | Erl | Cow | Non | Lin | Rea |
160 | weppy-nginx-uwsgi | 4,803 | 0.9% | 0 | Ful | Py | uWS | ngx | Lin | Rea |
161 | bottle-nginx-uwsgi | 4,704 | 0.8% | 0 | Mcr | Py | uWS | ngx | Lin | Rea |
162 | flask-nginx-uwsgi | 4,693 | 0.8% | 0 | Mcr | Py | Non | ngx | Lin | Rea |
163 | zend | 4,560 | 0.8% | 0 | Ful | PHP | Non | ngx | Lin | Rea |
164 | cakephp | 4,388 | 0.8% | 0 | Ful | PHP | Non | ngx | Lin | Rea |
165 | rails-unicorn | 4,126 | 0.7% | 0 | Ful | Rby | Rac | Uni | Lin | Rea |
166 | rails | 4,064 | 0.7% | 0 | Ful | Rby | Rac | Pum | Lin | Rea |
167 | sailsjs | 878 | 0.2% | 0 | Ful | JS | njs | Non | Lin | Rea |
168 | klein | 844 | 0.2% | 0 | Mcr | Py | Non | Twi | Lin | Rea |
169 | cherrypy-py3 | 473 | 0.1% | 0 | Mcr | Py | Non | Non | Lin | Rea |
170 | ffead-cpp | 400 | 0.1% | 0 | Ful | C | ffe | ffe | Lin | Rea |
171 | ffead-cpp-mysql | 400 | 0.1% | 0 | Ful | C | ffe | ffe | Lin | Rea |
172 | ffead-cpp-postgresql | 400 | 0.1% | 0 | Ful | C | ffe | ffe | Lin | Rea |
173 | cherrypy | 305 | 0.1% | 0 | Mcr | Py | Non | Non | Lin | Rea |
174 | ffead-cpp-nginx-mongo | 17 | 0.0% | 0 | Ful | C | ffe | ngx | Lin | Rea |
175 | ffead-cpp-nginx-mysql | 17 | 0.0% | 0 | Ful | C | ffe | ngx | Lin | Rea |
176 | ffead-cpp-nginx-postgresql | 17 | 0.0% | 0 | Ful | C | ffe | ngx | Lin | Rea |
177 | jawn | — | Did not complete | — | Ful | Jav | Svt | Utw | Lin | Rea |
178 | ktor | — | Did not complete | — | Mcr | Kot | Nty | Non | Lin | Rea |
179 | onion | — | Did not complete | — | Plt | C | Non | Non | Lin | Rea |
180 | officefloor | — | Did not complete | — | Ful | Jav | off | woo | Lin | Rea |
181 | silicon | — | Did not complete | — | Mcr | C | Non | mic | Lin | Rea |
182 | treefrog | — | Did not complete | — | Ful | C | Non | Non | Lin | Rea |
183 | treefrog-hybrid | — | Did not complete | — | Ful | C | Non | Non | Lin | Rea |
184 | treefrog-mongodb | — | Did not complete | — | Ful | C | Non | Non | Lin | Rea |
185 | treefrog-postgres | — | Did not complete | — | Ful | C | Non | Non | Lin | Rea |
186 | vapor | — | Did not complete | — | Ful | Swi | Non | Non | Lin | Rea |
https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview
测试类型 每种测试类型都有其自己的要求和规格。请访问他们的部分以获取更多详细信息和完整要求。
JSON序列化:行使框架基础知识,包括保持活动支持,请求路由,请求标头解析,对象实例化,JSON序列化,响应标头生成和请求计数吞吐量。
单个数据库查询:行使框架的对象关系映射器(ORM),随机数生成器,数据库驱动程序和数据库连接池。
多个数据库查询:测试#2的一种变体,也使用World表。提取多行以更加显着地惩罚数据库驱动程序和连接池。在测试的最高每次查询查询数(20)下,该测试表明随着数据库活动的增加,所有框架都趋向于每秒零请求。
Fortunes:练习ORM,数据库连接,动态大小集合,排序,服务器端模板,XSS对策和字符编码。
数据库更新:测试#3的一种变体,它在运行UPDATE语句或类似语句时,测试对象的ORM持久性和数据库驱动程序的性能。该测试的精神是对可变数量的读写样式数据库操作进行练习。
纯文本:仅用于请求路由基础的练习,旨在演示特别是高性能平台的功能。请求将使用HTTP流水线发送。响应有效载荷仍然很小,这意味着要使测试环境的千兆以太网饱和,仍然需要良好的性能。
缓存:对来自数据库的信息进行平台或框架的内存中缓存。为了简化实施,要求与多数据库查询测试(测试#3)非常相似,但是使用单独的数据库表并且相当慷慨/宽容,允许应用每个平台或框架的最佳实践。
参考:
https://www.zhihu.com/question/66834114/answer/247722267