当前位置: 首页 > 编程日记 > 正文

Web框架基准测试

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)

RnkFrameworkBest performance (higher is better)ErrorsClsLngPltFEAosIA
1servlet560,548100.0%0PltJavSvtResLinRea
2revenj-jvm554,14298.9%0FulJavSvtResLinRea
3gemini549,03597.9%0FulJavSvtResLinRea
4ulib-json535,61695.6%0PltC++NonULiLinRea
5blaze505,46490.2%0McrScablaNonLinRea
6grizzly494,66788.2%0McrJavSvtGrzLinRea
7undertow490,72587.5%0PltJavUtwNonLinRea
8h2o490,13587.4%0PltCNonNonLinRea
9vertx-web466,67783.3%0McrJavvtxNonLinRea
10vertx461,12382.3%0PltJavverNonLinRea
11openresty461,00282.2%0PltLuaOpRngxLinRea
12colossus457,53481.6%0McrScaAkkNonLinRea
13tokio-minihttp449,70580.2%0McrRusRustokLinRea
14finatra441,07278.7%0McrScaNtyNonLinRea
15netty433,52977.3%0PltJavNtyNonLinRea
16falcon432,89577.2%0McrPyNonMeiLinRea
17libreactor427,21176.2%0McrCNonNonLinRea
18cpoll_cppsp418,25874.6%0PltC++NonNonLinRea
19wicket416,60174.3%0FulJavSvtResLinRea
20finagle391,73569.9%0McrScaNtyNonLinRea
21cutelyst-thread389,48869.5%0FulC++cutNonLinRea
22nodejs372,53166.5%0PltJSnjsNonLinRea
23rapidoid-http-fast372,07666.4%0PltJavRapNonLinRea
24duda370,91166.2%0PltCdudMonLinRea
25fintrospect370,37766.1%0McrScaNtyNonLinRea
26falcon-py3362,46164.7%0McrPyNonMeiLinRea
27nickel358,61864.0%0McrRusRusHypLinRea
28jlhttp344,54661.5%0PltJavJLHNonLinRea
29rapidoid343,70461.3%0PltJavRapNonLinRea
30lapis343,57761.3%0FulLuaOpRngxLinRea
31iron341,29660.9%0McrRusRusHypLinRea
32jooby330,81059.0%0FulJavNtyNonLinRea
33hyper326,97358.3%0McrRusRusHypLinRea
34bottle318,51556.8%0McrPyMeiNonLinRea
35fasthttp302,84554.0%0PltGoNonNonLinRea
36kami279,07649.8%0McrGoNonNonLinRea
37jetty-servlet269,87448.1%0PltJavJtyNonLinRea
38go261,44846.6%0PltGoNonNonLinRea
39weppy-py3257,19645.9%0FulPyMeiNonLinRea
40spark256,66245.8%0McrJavSvtJtyLinRea
41weppy255,51045.6%0FulPyMeiNonLinRea
42jetty250,67144.7%0PltJavJtyNonLinRea
43gin249,83944.6%0McrGoNonNonLinRea
44yesod243,99443.5%0FulHklWaiWrpLinRea
45play2-scala240,17442.8%0FulScaAkkNonLinRea
46aleph234,76741.9%0McrCljNtyNonLinRea
47beego233,10541.6%0FulGoNonNonLinRea
48falcore229,20840.9%0McrGoNonNonLinRea
49grizzly-jersey219,89439.2%0McrJavJAXGrzLinRea
50finch201,44735.9%0McrScaNtyNonLinRea
51express199,87835.7%0McrJSNonNonLinRea
52roda-sequel193,67934.6%0McrRbyRacPumLinRea
53roda-sequel-postgres190,31534.0%0McrRbyRacPumLinRea
54urweb183,88832.8%0FulUrUr/NonLinRea
55activeweb-jackson176,82531.5%0FulJavSvtNonLinRea
56pyramid-py2172,66630.8%0FulPyNonMeiLinRea
57phoenix164,92129.4%0FulEliCowNonLinRea
58pyramid162,96229.1%0FulPyNonMeiLinRea
59hexagon160,37128.6%0McrKotSvtNonLinRea
60servant156,82128.0%0McrHklWaiWrpLinRea
61tapestry156,47927.9%0FulJavSvtResLinRea
62aiohttp154,01827.5%0McrPyasyGunLinRea
63koa152,92527.3%0McrJSNonNonLinRea
64undertow-jersey-hikaricp145,26225.9%0PltJavJAXNonLinRea
65revenj143,51625.6%0FulC#NonNonLinRea
66bayou136,67524.4%0PltJavBayNonLinRea
67webgo130,23123.2%0McrGoNonNonLinRea
68sinatra-postgres118,09321.1%0McrRbyRacPumLinRea
69curacao117,92621.0%3McrJavSvtNonLinRea
70sinatra-sequel117,75721.0%0McrRbyRacPumLinRea
71sinatra-sequel-postgres117,25820.9%0McrRbyRacPumLinRea
72sinatra116,28020.7%0McrRbyRacPumLinRea
73echo114,61020.4%0McrGoNonNonLinRea
74play2-scala-slick114,37720.4%0FulScaAkkNonLinRea
75restexpress112,32520.0%0McrJavNtyNonLinRea
76play2-scala-reactivemongo109,05019.5%0FulScaAkkNonLinRea
77roda-sequel-torquebox-jruby108,33019.3%0McrRbyRacTorLinRea
78akka-http103,45318.5%0McrScaAkkNonLinRea
79compojure103,22218.4%0McrCljSvtResLinRea
80roda-sequel-postgres-torquebox-jruby101,84518.2%0McrRbyRacTorLinRea
81octopus101,46018.1%0FulLuaOpRngxLinRea
82cutelyst-nginx98,48017.6%0FulC++uWSngxLinRea
83dropwizard98,46417.6%0FulJavJAXJtyLinRea
84flask93,37316.7%0McrPyMeiNonLinRea
85redstone93,08416.6%0McrDarNonNonLinRea
86snap93,00516.6%0McrHklNonNonLinRea
87turbogears90,29216.1%0McrPyNonMeiLinRea
88api_hour88,82215.8%18McrPyasyGunLinRea
89django87,42715.6%0FulPyNonMeiLinRea
90evhttp-sharp87,21915.6%0McrC#NonNonLinRea
91roda-sequel-passenger-mri87,05215.5%0McrRbyRacPasLinRea
92roda-sequel-postgres-passenger-mri87,01915.5%0McrRbyRacPasLinRea
93comsat-webactors-undertow83,98015.0%0PltJavComNonLinRea
94django-py383,39014.9%0FulPyNonMeiLinRea
95goji83,13314.8%0McrGoNonNonLinRea
96http4s81,71714.6%0McrScaNIOblaLinRea
97luminus74,70913.3%0McrCljRinNonLinRea
98cutelyst69,64512.4%0FulC++cutNonLinRea
99sinatra-sequel-passenger-mri64,46811.5%0McrRbyRacPasLinRea
100sinatra-sequel-postgres-passenger-mri64,46211.5%0McrRbyRacPasLinRea
101sinatra-passenger-mri63,89711.4%0McrRbyRacPasLinRea
102sinatra-postgres-passenger-mri63,83911.4%0McrRbyRacPasLinRea
103ringojs62,82411.2%0PltJSJtyNonLinRea
104jester60,32710.8%0McrNimNonNonLinRea
105wt59,54110.6%0FulC++NonNonLinRea
106tornado59,31510.6%0PltPyNonTorLinRea
107tornado-py355,0299.8%0PltPyNonTorLinRea
108http-kit54,2719.7%0PltCljRinNonLinRea
109activeweb53,5799.6%0FulJavSvtNonLinRea
110php-php544,3277.9%0PltPHPNonngxLinRea
111web2py-optimized42,9607.7%0FulPyMeiNonLinRea
112php42,3087.5%0PltPHPNonngxLinRea
113pedestal42,0457.5%0McrCljJtyNonLinRea
114grails37,0216.6%0FulGrvSvtNonLinRea
115sinatra-sequel-torquebox-jruby35,5476.3%0McrRbyRacTorLinRea
116fat-free34,8396.2%0FulPHPNonngxLinRea
117phalcon34,4396.1%0FulPHPNonngxLinRea
118sinatra-sequel-postgres-torquebox-jruby33,8926.0%0McrRbyRacTorLinRea
119roda-sequel-postgres-unicorn-mri33,0635.9%0McrRbyRacUniLinRea
120roda-sequel-unicorn-mri32,4855.8%0McrRbyRacUniLinRea
121sinatra-unicorn-mri31,5505.6%0McrRbyRacUniLinRea
122sinatra-postgres-unicorn-mri31,1855.6%0McrRbyRacUniLinRea
123sinatra-sequel-postgres-unicorn-mri30,6865.5%0McrRbyRacUniLinRea
124sinatra-sequel-unicorn-mri30,4755.4%0McrRbyRacUniLinRea
125comsat-servlet-undertow29,3965.2%0PltJavSvtNonLinRea
126ringojs-convenient26,0784.7%0McrJSRinNonLinRea
127mojolicious25,5954.6%0FulPrlNonHypLinRea
128rouille25,0954.5%0McrRusRusrouLinRea
129ninja-standalone24,6924.4%0FulJavJtyNonLinRea
130spring22,2284.0%0FulJavtomNonLinRea
131slim21,5893.9%0McrPHPNonngxLinRea
132web2py20,0053.6%0FulPyMeiNonLinRea
133tornado-postgresql-raw19,7603.5%0PltPyNonTorLinRea
134revel18,9303.4%0FulGoNonNonLinRea
135kemal12,8452.3%0FulCryNonNonLinRea
136web-simple12,6452.3%0McrPrlPlkStaLinRea
137kelp12,2652.2%0FulPrlPlkStaLinRea
138kelp-mongodb11,9052.1%0FulPrlPlkStaLinRea
139codeigniter11,8242.1%0FulPHPNonngxLinRea
140vibed-ldc11,8132.1%0PltDNonNonLinRea
141dancer11,6112.1%0FulPrlPlkStaLinRea
142spock11,4812.0%0McrHklWaiWrpLinRea
143hot10,6271.9%0PltGrvJtyJtyLinRea
144yii210,3881.9%0FulPHPNonngxLinRea
145slim-php59,6401.7%0McrPHPNonngxLinRea
146play18,7061.6%8FulJavNtyNonLinRea
147vibed8,4151.5%0McrDNonNonLinRea
148grape8,1101.4%0McrRbyRacPumLinRea
149lumen8,0331.4%0McrPHPNonngxLinRea
150hhvm7,3171.3%0PltPHPNonngxLinRea
151laravel7,0201.3%0FulPHPNonngxLinRea
152grape-unicorn7,0001.2%0McrRbyRacUniLinRea
153fuel6,9451.2%0McrPHPNonngxLinRea
154lithium6,8111.2%0FulPHPNonngxLinRea
155padrino6,7011.2%0McrRbyRacPumLinRea
156padrino-unicorn6,6241.2%0McrRbyRacUniLinRea
157hapi6,2251.1%0McrJSNonNonLinRea
158plack5,1530.9%0McrPrlPlkngxLinRea
159chicagoboss5,0600.9%0FulErlCowNonLinRea
160weppy-nginx-uwsgi4,8030.9%0FulPyuWSngxLinRea
161bottle-nginx-uwsgi4,7040.8%0McrPyuWSngxLinRea
162flask-nginx-uwsgi4,6930.8%0McrPyNonngxLinRea
163zend4,5600.8%0FulPHPNonngxLinRea
164cakephp4,3880.8%0FulPHPNonngxLinRea
165rails-unicorn4,1260.7%0FulRbyRacUniLinRea
166rails4,0640.7%0FulRbyRacPumLinRea
167sailsjs8780.2%0FulJSnjsNonLinRea
168klein8440.2%0McrPyNonTwiLinRea
169cherrypy-py34730.1%0McrPyNonNonLinRea
170ffead-cpp4000.1%0FulC++ffeffeLinRea
171ffead-cpp-mysql4000.1%0FulC++ffeffeLinRea
172ffead-cpp-postgresql4000.1%0FulC++ffeffeLinRea
173cherrypy3050.1%0McrPyNonNonLinRea
174ffead-cpp-nginx-mongo170.0%0FulC++ffengxLinRea
175ffead-cpp-nginx-mysql170.0%0FulC++ffengxLinRea
176ffead-cpp-nginx-postgresql170.0%0FulC++ffengxLinRea
177jawnDid not completeFulJavSvtUtwLinRea
178ktorDid not completeMcrKotNtyNonLinRea
179onionDid not completePltCNonNonLinRea
180officefloorDid not completeFulJavoffwooLinRea
181siliconDid not completeMcrC++NonmicLinRea
182treefrogDid not completeFulC++NonNonLinRea
183treefrog-hybridDid not completeFulC++NonNonLinRea
184treefrog-mongodbDid not completeFulC++NonNonLinRea
185treefrog-postgresDid not completeFulC++NonNonLinRea
186vaporDid not completeFulSwiNonNonLinRea

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

相关文章:

vsftpd用户配置 No.2

在配置ftp虚拟用户的过程中,还有一种配置方式。yum -y install 安装vsftpdcp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak编辑vsftpd.conf开启下列选项:anonymous_enableNOlocal_enableYESwrite_enableYESlocal_umask022anon_mkdir_write_enab…

【MATLAB】稀疏矩阵(含有大量0元素的矩阵)

1、稀疏矩阵的储存方式 对于稀疏矩阵,MATLAB仅储存矩阵所有非零元素的值及其位置(行号和列号)。 2、稀疏矩阵的生成 1)利用sparse函数从满矩阵转换得到稀疏矩阵函数名称表示意义sparse(A)由非零元素和下标建立稀疏矩阵A。如果A已是…

httpTomcat

Tomcat是web应用服务器的一种 转载于:https://juejin.im/post/5beaf7e451882517165d91d1

memcached(二)事件模型源码分析

在memcachedd中,作者为了专注于缓存的设计,使用了libevent来开发事件模型。memcachedd的时间模型同nginx的类似,拥有一个主进行(master)以及多个工作者线程(woker)。 流程图 在memcached中&…

【MATLAB】MATLAB的控制流

1、if-else-end if expressioncommands1 elseif expression2commands2 ... else commandsn end 2、switch-case switch valuecase1 test1%如果value等于test1,执行command1,并结束此结构command1case2 test2command2...case3 testkcommandk otherw…

Linux查看本机端口

查看指定的端口 # lsof -i:port 查看所有端口 # netstat -aptn 安装telnet #yum install -y telnet.x86_64 #telnet ip 端口

Node.js安装

通过nvm安装 下载nvm并执行wget -qO- https://raw.github.com/creationix/nvm/v0.33.11/install.sh | sh将命令输出到终端命令中~/.bashrcexport NVM_DIR"$HOME/.nvm"更新文件source .bashrc通过nvm安装node.jsnvm install 10.13安装的版本是10.13的版本 通过命令查看…

mongodb常用语句以及SpringBoot中使用mongodb

普通查询 某个字段匹配数组内的元素数量的,假如region只有一个元素的 db.getCollection(map).find({region:{$size:1}}) 假如region只有0个元素的 db.getCollection(map).find({region:{$size:0}}) db.getCollection(map).find({region:{$size:1}}).count() db.get…

2002高教社杯---A车灯线光源的优化设计

A题 车灯线光源的优化设计 安装在汽车头部的车灯的形状为一旋转抛物面,车灯的对称轴水平地指向正前方, 其开口半径36毫米,深度21.6毫米。经过车灯的焦点,在与对称轴相垂直的水平方向,对称地放置一定长度的均匀分布的线光源。要求…

从Date类型转为中文字符串

//主方法public static String DateToCh(Date date) {Calendar cal Calendar.getInstance();cal.setTime(date);int year cal.get(Calendar.YEAR);int month cal.get(Calendar.MONTH) 1;int day cal.get(Calendar.DAY_OF_MONTH);return getYear(year) getTenString(month…

第十四课 如何在DAPP应用实现自带钱包转账功能?

1,为什么DAPP生态需要自带钱包功能? 区块链是一个伟大的发明,它改变了生产关系。很多生态,有了区块链技术,可以由全公司员工的"全员合伙人"变成了全平台的”全体合伙人”了,是真正的共享经济模式…

为什么jdk源码推荐ThreadLocal使用static

ThreadLocal是线程私有变量,本身是解决多线程环境线程安全,可以说单线程实际上没必要使用。 既然多线程环境本身不使用static,那么又怎么会线程不安全。所以这个问题本身并不是问题,只是有人没有理解ThreadLocal的真正使用场景&a…

C与C++之间相互调用

1、导出C函数以用于C或C的项目 如果使用C语言编写的DLL,希望从中导出函数给C或C的模块访问,则应使用 __cplusplus 预处理器宏确定正在编译的语言。如果是从C语言模块使用,则用C链接声明这些函数。如果使用此技术并为DLL提供头文件&#xff0c…

【MATLAB】三维图形的绘制mesh

步骤如下: (1)确定自变量x和y的取值范围和取值间隔 x x1 :dx :x2 , y y1 : dy : y2 (2)构成xoy平面上的自变量采样“格点”矩阵 ①利用格点矩阵的原理生成矩阵。 xx1:dx:x2; yy1:dy:y2; Xones(size(y))*x; Yy*o…

ORA-01919: role 'PLUSTRACE' does not exist

环境:Oracle 10g,11g.现象:在一次迁移测试中,发现有这样的角色赋权会报错不存在: SYSorcl> grant PLUSTRACE to jingyu; grant PLUSTRACE to jingyu* ERROR at line 1: ORA-01919: role PLUSTRACE does not exist 查询发现这个…

Java反射以及应用

需求:需要通过反射动态获取类的字段类型,然后做特殊处理 Java反射getDeclaredField和getField的区别 getDeclaredFiled 只能获取类本身的属性成员(包括私有、共有、保护) getField 仅能获取类(及其父类可以自己测试) public属性…

【MATLAB】雅可比矩阵jacobi matrix

参考页面: https://baike.baidu.com/item/%E9%9B%85%E5%8F%AF%E6%AF%94%E7%9F%A9%E9%98%B5/10753754?fraladdin#1 在向量微积分中,雅可比矩阵是一阶偏导数以一定方式排列成的矩阵,其行列式称为雅可比行列式。 由球坐标系到直角坐标系的转…

Laravel:使用Migrations

1、首先利用artisan创建一个可迁移的数据表模板,该命令运行后会在database/migrations目录下生成一个文件 php artisan make:migration create_fees_count_table --createfees_count 2、生成的文件包含up和down两个方法,其中up中是包含了添加表&#xff…

基于libevent和unix domain socket的本地server

https://www.pacificsimplicity.ca/blog/libevent-echo-server-tutorial 根据这一篇写一个最简单的demo。然后开始写client。 client调优 client最初的代码如下&#xff1a; 1 #include <sys/socket.h>2 #include <sys/un.h>3 #include <stdio.h>4 #include …

软件体系架构模式之一什么是软件架构模式

什么是软件架构模式 计划启动未开发的软件项目&#xff1f;然后选择正确的架构模式将对项目的结果起关键作用。选择市场上最流行或最新的技术并不总是意味着会带来最好的结果。但是&#xff0c;选择最合适的解决方案将为行之有效的问题和反复出现的问题提供可靠的解决方案。 …

HP 服务器 iLO 远程控制软件 介绍

iLO了解&#xff1a;iLO 是一组芯片&#xff0c;内部是vxworks的嵌入操作系统,在服务器的背后有一个标准RJ45口对外连接生产用交换机或者带外管理的交换机。iLO 全名是 Integrated Lights-out&#xff0c;它是惠普某些型号的服务器上集成的远程管理端口&#xff0c;它能够允许用…

【MATLAB】数据分析之数据插值

插值&#xff1a;求过已知有限个数据点的近似函数。 区别于拟合&#xff1a; 拟合&#xff1a;已知有限个数据点求近似函数&#xff0c;不要求过已知数据点&#xff0c;只要求在某种意义下它在这些点上的总偏差最小。 基本常用的插值方法&#xff1a;拉格朗日多项式插值&…

迈斯!啊呸~数学

1.数论 快速幂 int po(int x,int y) {int ans1;while(y){if(y%21)ans1ll*ans*x%p;x1ll*x*x%p;y/2;}return ans; } 乘法逆元&#xff08;保证模域p与求逆元的数互质&#xff09; po(a,p-2);//a为需要求逆元的数 扩展欧几里得&#xff08;exgcd&#xff09; #include<cstdio&g…

软件体系架构模式之二分层体系结构

分层体系结构模式是n层模式&#xff0c;其中组件被组织在水平层中。这是设计大多数软件的传统方法&#xff0c;并且具有独立性。这意味着所有组件都是互连的&#xff0c;但彼此之间不依赖。 图1&#xff1a;分层架构 在此体系结构中有四层&#xff0c;其中每一层在模块和其中的…

linux下mysql的root密码忘记解决方法

1&#xff0e;首先确认服务器出于安全的状态&#xff0c;最安全的状态是到服务器的Console上面操作&#xff0c;并且拔掉网线&#xff0c;或者可以使用--skip-networking限制只能从本地连接2&#xff0e;修改MySQL的登录设置&#xff1a; # vim /etc/my.cnf在[mysqld]的段中加上…

【Python】turtle库的小应用

心血来潮&#xff0c;哈哈哈&#xff0c;画的不好&#xff0c;请多见谅 大家如果想要尝试turtle库&#xff0c;可以借鉴&#xff1a; https://www.cnblogs.com/nowgood/p/turtle.html 导入库&#xff0c;我的pycharm里可以直接使用&#xff0c;哈哈哈&#xff0c;不行就pip…

[转]MySQL修改时区的方法小结

本文转自&#xff1a;https://www.cnblogs.com/mracale/p/6064447.html 这篇文章主要介绍了MySQL修改时区的方法,总结分析了三种常见的MySQL时区修改技巧,包括命令行模式、配置文件方式及代码方式,需要的朋友可以参考下 方法一&#xff1a;通过mysql命令行模式下动态修改 1.1 查…

swift轮播图代码

import UIKit private let CycleCellID "CycleCellID" class BannerCycleView: UIView { var layout : UICollectionViewFlowLayout! var collectionView :UICollectionView! var pageContol : UIPageControl? var cycleTimer : Timer? let timeInterval : TimeI…

软件体系架构模式之三微内核体系架构

当您的软件系统或产品包含许多与外部实体的集成点时&#xff0c;微内核体系结构模式将非常有用。最重要的是&#xff0c;您将无法准确判断出将来将哪些实体集成到您的系统中。可以将微内核架构模式识别为基于插件的模式。。也称为插件架构模式&#xff0c;它由两个主要组件组成…

【MATLAB】交互式绘图(ginput,gtext,zoom)

1、ginput指令&#xff1a; [x,y]ginput(n) %&#xff08;其功能是用鼠标从二维图形中获取n个点的数据坐标&#xff09; x-8*pi:pi/100:8*pi; y1sin(x); y24*sin(x/4); plot(x,y1,r-,x,y2,k-); legend(sin(x),4sin(x/4)); grid on; [x,y]ginput(8); %在下方命令窗…