2018 年网站报告
2019 年 7 月 10 日
在 2019 年初,回顾 martinfowler.com 的现状似乎是个好主意。我在 2014 年 对网站进行了简要回顾,所以现在是时候再次看看它产生的流量了。
总体流量
我将从过去几年网站的总体流量开始
年份 | 每月浏览量 | 每月访问次数 | 每月访客 | 总访问次数 | 总浏览量 |
---|---|---|---|---|---|
2011 | 302,732 | 207,684 | 138,972 | 2,557,703 | 3,671,818 |
2012 | 354,282 | 226,270 | 153,204 | 2,802,101 | 4,238,904 |
2013 | 408,182 | 254,515 | 173,062 | 3,047,046 | 4,848,783 |
2014 | 491,761 | 339,570 | 222,800 | 3,984,246 | 5,855,504 |
2015 | 575,146 | 404,062 | 263,646 | 4,991,161 | 7,058,432 |
2016 | 626,873 | 453,887 | 298,182 | 5,594,010 | 7,657,711 |
2017 | 647,714 | 480,498 | 312,314 | 5,867,257 | 7,916,532 |
2018 | 713,802 | 519,731 | 334,260 | 6,256,374 | 8,457,847 |
每月数据是该年每月总量的中位数。总数据是该年的总计。
过去几年流量稳步增长。
按年查看提供了一种视角,但查看每日浏览量也很有用。
这更好地体现了流量的日常波动。它还清楚地显示出一种普遍模式 - 网站在工作日(人们工作时)的流量明显高于周末。流量在周末下降约一半是相当一致的。
这里还有另一种流量的规律模式,在该图表上很难看到,但在只显示工作日浏览量时就更加明显。
由于圣诞节假期,在新年交替时流量明显下降,导致工作日流量降至周末水平。
专注于常青文章
总体流量数字是一回事,但它们是我真正关心的事情的良好衡量标准吗?我的目标是撰写(并发布)对我的读者在较长时间内有用的文章。我认为当一篇文章获得持续的流量时,我就取得了成功,因此我认为绘制有多少这样的文章是有用的。我选择每月 1000 次独立页面浏览量作为我的圆形数字截止值。
这显示出一种更令人担忧的趋势。这类热门文章数量迅速增加,直到大约 2016 年才趋于平稳。这并不奇怪,因为这与我开始专注于重构书籍的时间相对应。希望随着我开始更多地关注网站,我可以看到 2016 年之前出现的一些增长。
当我寻找获得这种流量的文章时,我正在寻找存在了一段时间的文章。大多数文章的流量都呈非常陡峭的指数下降趋势,在最初的几天内获得大量流量,然后随着时间的推移逐渐减少。
所有自 2018 年发布的文章在工作日的中位浏览量与文章年龄的对比
请注意,即使在 y 轴上使用平方根刻度,也可见这种急剧的指数下降趋势!
尽管中位数文章在发布后一个月左右每天的浏览量就降至 50 次以下,但我感兴趣的文章是那些没有下降的。(每天获得 28 次浏览量的文章大约相当于每月 1000 次浏览量。)
因此,我得出了常青文章的个人定义。一篇文章至少有一年的每月独立页面浏览量中位数超过 1000 次,并且至少有 4 个月的浏览量超过 1000 次。如果我对网站上的文章应用此测试,我将得到 170 篇符合条件的文章。
路径 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 |
---|---|---|---|---|---|---|---|---|
/ | 20746 | 19635 | 20590 | 22456 | 25014 | 27853 | 27763 | 30201 |
/aboutMe.html | 3273 | 3280 | 3546 | 3576 | 3600 | 3370 | 3288 | 3786 |
/agile.html | 4104 | 3714 | 4156 | 4018 | 3896 | 3923 | 3847 | 4691 |
/articles.html | 1968 | 1220 | 796 | 518 | 482 | 354 | 64 | 48 |
/articles/201701-event-driven.html | 3314 | 3748 | ||||||
/articles/201708-tw-sale.html | 1911 | 339 | ||||||
/articles/201803-refactoring-2nd-ed.html | 2006 | |||||||
/articles/agile-aus-2018.html | 16243 | |||||||
/articles/agileFluency.html | 1541 | 1970 | 1441 | 1604 | 1441 | 1496 | 3522 | |
/articles/agileOffshore.html | 1748 | 1258 | 1106 | 1071 | 905 | 748 | 494 | 392 |
/articles/apple-notes-restore.html | 1161 | 1302 | 909 | 326 | 180 | |||
/articles/architect-elevator.html | 2194 | 530 | ||||||
/articles/asyncJS.html | 2324 | 1712 | 2364 | 1540 | 714 | 484 | ||
/articles/bigData/ | 198 | 1030 | 187 | 150 | 144 | 86 | 99 | |
/articles/break-monolith-into-microservices.html | 10945 | |||||||
/articles/collection-pipeline/ | 4657 | 1522 | 1605 | 1844 | 2208 | |||
/articles/consumerDrivenContracts.html | 540 | 682 | 653 | 2512 | 4286 | 4596 | 5547 | 5395 |
/articles/continuousIntegration.html | 13439 | 10974 | 11057 | 11412 | 10780 | 10604 | 10278 | 9868 |
/articles/designDead.html | 3353 | 3168 | 3356 | 3205 | 3086 | 1947 | 1949 | 1754 |
/articles/dipInTheWild.html | 1606 | 810 | 793 | 960 | 919 | 900 | ||
/articles/distributed-objects-microservices.html | 1760 | 1000 | 1026 | 856 | 825 | |||
/articles/enterprisePatterns.html | 1036 | 923 | 905 | 1247 | 1244 | 1252 | 1248 | 1402 |
/articles/enterpriseREST.html | 16391 | 2488 | 2368 | 1692 | 1549 | 1214 | ||
/articles/evodb.html | 2605 | 2338 | 2554 | 2198 | 1974 | 1800 | 2914 | 3026 |
/articles/extract-data-rich-service.html | 4350 | |||||||
/articles/feature-toggles.html | 6501 | 8466 | 12780 | |||||
/articles/injection.html | 30212 | 26616 | 29019 | 28946 | 25110 | 24720 | 23528 | 21862 |
/articles/is-tdd-dead/ | 6224 | 3080 | 2246 | 1720 | 1482 | |||
/articles/itsNotJustStandingUp.html | 4646 | 6096 | 5624 | 5966 | 5395 | 8468 | 7578 | 7514 |
/articles/languageWorkbench.html | 1162 | 858 | 636 | 600 | 548 | 470 | 376 | 346 |
/articles/lean-inception/ | 1155 | 1153 | ||||||
/articles/lmax.html | 11982 | 5920 | 5788 | 5327 | 4587 | 3684 | 3503 | 3752 |
/articles/microservice-testing/ | 14506 | 5456 | 8220 | 10759 | 9480 | |||
/articles/microservice-trade-offs.html | 3015 | 2972 | 2975 | 3164 | ||||
/articles/microservices.html | 32391 | 45709 | 48779 | 43557 | 38270 | |||
/articles/mobileImplStrategy.html | 1094 | 421 | 169 | 139 | 82 | 62 | 42 | |
/articles/mocksArentStubs.html | 9760 | 10314 | 11002 | 11554 | 12416 | 11939 | 10748 | 10919 |
/articles/modernMockingTools.html | 2160 | 262 | 244 | 204 | 134 | 98 | 88 | |
/articles/multiMobile/ | 2744 | 1216 | 370 | 178 | 113 | 68 | 39 | |
/articles/newMethodology.html | 7532 | 4480 | 4054 | 3624 | 3692 | 2818 | 2140 | 1830 |
/articles/nonDeterminism.html | 1061 | 830 | 906 | 1104 | 1112 | 1160 | 1260 | 1282 |
/articles/nosqlKeyPoints.html | 1820 | 720 | 502 | 470 | 345 | 241 | 260 | |
/articles/practical-test-pyramid.html | 11192 | |||||||
/articles/products-over-projects.html | 17666 | 3200 | ||||||
/articles/rake.html | 2648 | 2156 | 1889 | 2080 | 1866 | 1190 | 1077 | 980 |
/articles/refactoring-2nd-changes.html | 1444 | |||||||
/articles/refactoring-2nd-ed.html | 10851 | |||||||
/articles/refactoring-dependencies.html | 2605 | 542 | 543 | 521 | ||||
/articles/refactoring-pipelines.html | 2207 | 840 | 870 | 823 | ||||
/articles/refactoring-video-store-js/ | 2634 | 1142 | 814 | |||||
/articles/replaceThrowWithNotification.html | 11672 | 814 | 874 | 891 | 1047 | |||
/articles/richardsonMaturityModel.html | 2490 | 3584 | 4926 | 6854 | 9357 | 10976 | 12346 | 13037 |
/articles/rise-test-impact-analysis.html | 2338 | 606 | ||||||
/articles/serverless.html | 24514 | 19247 | 21276 | |||||
/articles/talk-about-platforms.html | 1314 | |||||||
/articles/testing-culture.html | 2298 | 803 | 584 | 412 | 421 | |||
/articles/useOfMetrics.html | 920 | 1580 | 1401 | 1338 | 964 | 772 | ||
/articles/vagrant-chef-rbenv.html | 1327 | 836 | 264 | 148 | 65 | |||
/articles/web-security-basics.html | 10800 | 5034 | 4404 | |||||
/bliki/ | 2914 | 2684 | 2855 | 2757 | 2839 | 2462 | 1958 | 1646 |
/bliki/AnemicDomainModel.html | 2754 | 3040 | 3464 | 3787 | 4194 | 4529 | 4396 | 4806 |
/bliki/AntiPattern.html | 1006 | 148 | 124 | 138 | ||||
/bliki/BlueGreenDeployment.html | 313 | 544 | 849 | 1903 | 3724 | 6300 | 7164 | 7304 |
/bliki/BoundedContext.html | 2126 | 3916 | 5106 | 6612 | 8450 | |||
/bliki/BranchByAbstraction.html | 207 | 204 | 334 | 1068 | 1174 | 1359 | 1339 | 1650 |
/bliki/BusinessReadableDSL.html | 625 | 893 | 1095 | 1254 | 1316 | 772 | 823 | 510 |
/bliki/CanaryRelease.html | 722 | 1412 | 2803 | 3806 | 5420 | |||
/bliki/CircuitBreaker.html | 2101 | 3583 | 5409 | 7581 | 8850 | |||
/bliki/CodeSmell.html | 320 | 576 | 664 | 696 | 822 | 916 | 811 | 1012 |
/bliki/CommandQuerySeparation.html | 460 | 738 | 780 | 910 | 1013 | 1073 | 1330 | 1524 |
/bliki/ContinuousDelivery.html | 893 | 1675 | 2590 | 3120 | 2953 | 2332 | ||
/bliki/ContinuousIntegrationCertification.html | 1880 | 546 | ||||||
/bliki/ContractTest.html | 1904 | |||||||
/bliki/CQRS.html | 5380 | 6878 | 6903 | 10614 | 14153 | 15796 | 19373 | 21914 |
/bliki/DataLake.html | 1215 | 1228 | 1305 | 946 | ||||
/bliki/DDD_Aggregate.html | 354 | 1014 | 1486 | 1879 | 2292 | 2924 | ||
/bliki/DeploymentPipeline.html | 645 | 1282 | 1496 | 1904 | 1582 | 1428 | ||
/bliki/DevOpsCulture.html | 1017 | 1318 | 1366 | 1408 | ||||
/bliki/DomainSpecificLanguage.html | 1267 | 1012 | 822 | 771 | 748 | 755 | 689 | 591 |
/bliki/FeatureBranch.html | 1426 | 1494 | 1636 | 2037 | 2402 | 2247 | 2360 | 2476 |
/bliki/FeatureToggle.html | 908 | 1356 | 1913 | 2930 | 3842 | 3612 | 2536 | 2047 |
/bliki/FluentInterface.html | 1706 | 1632 | 1892 | 1882 | 1886 | 1820 | 1798 | 1776 |
/bliki/GivenWhenThen.html | 809 | 1168 | 1752 | 2866 | 3424 | 4476 | ||
/bliki/ImmutableServer.html | 878 | 690 | 876 | 1256 | 1176 | 858 | ||
/bliki/index.html | 3578 | 3536 | 274 | 134 | 145 | 72 | 42 | 21 |
/bliki/IntegrationContractTest.html | 105 | 91 | 200 | 288 | 699 | 1042 | 1204 | |
/bliki/IntegrationTest.html | 2741 | |||||||
/bliki/InversionOfControl.html | 1916 | 1761 | 1873 | 1844 | 2370 | 2493 | 2008 | 1986 |
/bliki/MemoryImage.html | 5413 | 255 | 121 | 122 | 116 | 240 | 454 | 339 |
/bliki/MicroservicePremium.html | 2010 | 1398 | 1658 | 1724 | ||||
/bliki/MicroservicePrerequisites.html | 2016 | 1091 | 1217 | 1942 | 2220 | |||
/bliki/MonolithFirst.html | 2997 | 2020 | 2544 | 2948 | ||||
/bliki/NosqlDistilled.html | 1569 | |||||||
/bliki/OrmHate.html | 696 | 754 | 1042 | 1590 | 1519 | 1172 | 1264 | |
/bliki/PageObject.html | 1528 | 2244 | 3147 | 4296 | 4588 | 4100 | ||
/bliki/PolyglotPersistence.html | 5255 | 1876 | 2404 | 2616 | 3052 | 2609 | 2590 | 2311 |
/bliki/PresentationDomainDataLayering.html | 2092 | 579 | 484 | 530 | ||||
/bliki/ReportingDatabase.html | 168 | 370 | 382 | 762 | 846 | 926 | 1052 | 1026 |
/bliki/RulesEngine.html | 485 | 926 | 1182 | 1418 | 1614 | 1839 | 2096 | 1676 |
/bliki/Serverless.html | 1075 | 615 | 470 | |||||
/bliki/ShuHaRi.html | 87 | 131 | 310 | 474 | 809 | 970 | 1121 | 1158 |
/bliki/StranglerApplication.html | 263 | 299 | 464 | 669 | 1173 | 2070 | 2584 | 3321 |
/bliki/TechnicalDebt.html | 1724 | 1486 | 1667 | 1949 | 2055 | 2287 | 2037 | 1964 |
/bliki/TechnicalDebtQuadrant.html | 839 | 682 | 780 | 955 | 1356 | 1359 | 1448 | 1746 |
/bliki/TellDontAsk.html | 822 | 870 | 1139 | 1374 | 1615 | 1841 | ||
/bliki/TestCoverage.html | 761 | 704 | 929 | 1210 | 1522 | 1534 | 1688 | |
/bliki/TestDouble.html | 336 | 347 | 498 | 742 | 1102 | 1390 | 1645 | 2176 |
/bliki/TestPyramid.html | 630 | 1150 | 2285 | 3127 | 4498 | 6484 | 6784 | |
/bliki/TolerantReader.html | 86 | 54 | 49 | 1520 | 2318 | 2087 | 2053 | 1680 |
/bliki/TwoHardThings.html | 396 | 840 | 2330 | 3159 | 4330 | 4470 | 4462 | 4888 |
/bliki/UbiquitousLanguage.html | 34 | 119 | 492 | 1192 | 897 | 1135 | 1418 | 1792 |
/bliki/UnitTest.html | 1637 | 1612 | 1836 | 1978 | 2119 | |||
/bliki/ValueObject.html | 182 | 694 | 648 | 970 | 1240 | 1314 | 2156 | 2308 |
/bliki/Yagni.html | 2374 | 1790 | 2235 | 2448 | ||||
/books.html | 15956 | 8319 | ||||||
/books/ | 4276 | 4028 | 2589 | 2368 | 2434 | 2257 | 2159 | |
/books/buying.html | 1248 | 1256 | 1113 | 1114 | 948 | 930 | 934 | |
/books/continuousDelivery.html | 466 | 822 | 1188 | 1788 | 1782 | 1723 | 1543 | |
/books/dsl.html | 1364 | 1762 | 1961 | 2107 | 1884 | 1968 | 2016 | |
/books/eaa.html | 6521 | 7431 | 7666 | 7546 | 6890 | 6446 | 5960 | |
/books/nosql.html | 2792 | 2536 | 2038 | 1904 | 1130 | 892 | 778 | |
/books/refactoring.html | 1214 | 1642 | 2942 | 3302 | 3599 | 3806 | 4602 | |
/delivery.html | 1394 | 1964 | 2129 | 2466 | 2959 | 1707 | 1364 | 1282 |
/design.html | 5592 | 5424 | 6640 | 7172 | 6862 | 6962 | 7278 | 7614 |
/dsl.html | 2908 | 2230 | 2227 | 2069 | 1943 | 522 | 464 | 410 |
/eaaCatalog/ | 5715 | 5830 | 5678 | 5526 | 5184 | 5143 | 4898 | 4450 |
/eaaCatalog/activeRecord.html | 1515 | 1600 | 1678 | 1792 | 1650 | 1507 | 1378 | 1216 |
/eaaCatalog/classTableInheritance.html | 649 | 877 | 1012 | 940 | 960 | 872 | 820 | 694 |
/eaaCatalog/dataMapper.html | 2888 | 2917 | 2866 | 2532 | 2412 | 2235 | 2004 | 1608 |
/eaaCatalog/dataTransferObject.html | 1645 | 1895 | 2277 | 2537 | 2878 | 2926 | 2935 | 2906 |
/eaaCatalog/domainModel.html | 2407 | 2526 | 2508 | 2493 | 2501 | 2700 | 2625 | 2507 |
/eaaCatalog/frontController.html | 1040 | 976 | 762 | 623 | 536 | 486 | 451 | 368 |
/eaaCatalog/index.html | 2890 | 2718 | 2660 | 2798 | 2586 | 2329 | 2412 | 2030 |
/eaaCatalog/repository.html | 3768 | 4569 | 4620 | 4658 | 5216 | 5586 | 5743 | 5032 |
/eaaCatalog/serviceLayer.html | 1820 | 1772 | 1898 | 1834 | 2138 | 2138 | 2054 | 1806 |
/eaaCatalog/singleTableInheritance.html | 1057 | 1242 | 1378 | 1402 | 1342 | 1181 | 1081 | 862 |
/eaaCatalog/tableDataGateway.html | 1626 | 1390 | 1130 | 964 | 887 | 794 | 743 | 606 |
/eaaCatalog/transactionScript.html | 1282 | 1408 | 1534 | 1606 | 1524 | 1643 | 1722 | 1701 |
/eaaCatalog/twoStepView.html | 1292 | 1132 | 776 | 658 | 474 | 356 | 293 | 216 |
/eaaCatalog/unitOfWork.html | 3288 | 3926 | 4120 | 4234 | 4002 | 4222 | 3933 | 3325 |
/eaaDev/ | 810 | 780 | 625 | 751 | 1116 | 1054 | 1107 | 1092 |
/eaaDev/AuditLog.html | 456 | 649 | 550 | 580 | 327 | 255 | 750 | 1236 |
/eaaDev/DomainEvent.html | 438 | 390 | 412 | 552 | 592 | 705 | 1096 | 1152 |
/eaaDev/EventAggregator.html | 982 | 1040 | 1132 | 1012 | 1004 | 950 | 942 | 942 |
/eaaDev/EventCollaboration.html | 517 | 507 | 344 | 668 | 742 | 980 | 1154 | 1197 |
/eaaDev/EventNarrative.html | 120 | 124 | 116 | 144 | 200 | 878 | 1155 | 1151 |
/eaaDev/EventSourcing.html | 2591 | 3628 | 4046 | 5828 | 7549 | 10412 | 12928 | 16230 |
/eaaDev/ModelViewPresenter.html | 1758 | 1390 | 1156 | 867 | 706 | 514 | 458 | 336 |
/eaaDev/Notification.html | 1004 | 955 | 248 | 165 | 316 | 302 | 254 | 274 |
/eaaDev/PassiveScreen.html | 2340 | 2011 | 1765 | 1468 | 1306 | 1248 | 1520 | 1286 |
/eaaDev/PresentationModel.html | 4407 | 3760 | 3232 | 3047 | 3356 | 2215 | 2112 | 1778 |
/eaaDev/SupervisingPresenter.html | 2203 | 1770 | 1625 | 1330 | 1203 | 944 | 786 | 610 |
/eaaDev/timeNarrative.html | 680 | 653 | 652 | 762 | 1065 | 922 | 892 | 840 |
/eaaDev/uiArchs.html | 7366 | 7840 | 6709 | 7450 | 7590 | 6741 | 5758 | 4506 |
/intro.html | 3648 | 3695 | 3979 | 4044 | 3928 | 3878 | 4060 | 4496 |
/microservices/ | 10470 | 8194 | 9023 | 7518 | ||||
/nosql.html | 4123 | 6534 | 5645 | 5182 | 2019 | 1110 | 904 | |
/photos/109.html | 1107 | |||||||
/photos/112.html | 1517 | |||||||
/refactoring/ | 6585 | 7740 | 7798 | 7560 | 8308 | 7548 | 8175 | |
/refactoring/catalog/ | 832 | 1183 | 3504 | 3398 | 4102 | 4001 | 3749 | |
/refactoring/catalog/extractMethod.html | 722 | 854 | 950 | 1134 | 1174 | 1210 | 1223 | |
/refactoring/catalog/index.html | 3057 | 3359 | 761 | 591 | 409 | 318 | 302 | |
/refactoring/catalog/replaceConditionalWithPolymorphism.html | 665 | 742 | 718 | 797 | 1093 | 1187 | 1201 | |
/refactoring/catalog/replaceNestedConditionalWithGuardClauses.html | 300 | 368 | 594 | 812 | 1006 | 1532 | 1698 | |
/refactoring/catalog/replaceRecursionWithIteration.html | 501 | 616 | 836 | 1183 | 1372 | 1084 | 1059 | |
/refactoring/sources.html | 1765 | 2118 | ||||||
/tags/API design.html | 336 | 374 | 542 | 837 | 924 | 1068 | 1314 | 962 |
/tags/domain driven design.html | 143 | 170 | 473 | 1502 | 2240 | 2892 | 3373 | 3012 |
/videos.html | 3504 | 3660 | 3892 | 3540 |
每年显示该年的每月独立页面浏览量中位数,如果超过 1000 次,则显示绿色。
其他作者
由于过去两年我的大部分注意力都集中在重构书籍上,因此 martinfowler.com 上发布的大部分内容都是其他人撰写的文章。这些仍然需要花费我不少时间 - 我担任开发编辑,并且可能花费大量时间来处理这些文章。
当我打算回到网站时,一个合理的问题是其他人撰写的文章与我自己撰写的文章之间是否存在差异。
为了研究这个问题,我收集了 2011 年至 2017 年间发布的所有文章,并将它们分为由我(作为作者或作者之一)撰写的文章和由其他人撰写的文章。然后,我绘制了他们在 2018 年的每月中位浏览量。
我在每月 5000 次页面浏览量处截断了 y 轴,因此少数流量超过该值的异常值不会将箱线图压缩到无法阅读的程度。数据仍然为箱线图标记提供信息。
如您所见,其他人撰写的文章平均表现优于我的文章,其他人撰写的文章中位数为 586 次浏览量,而我的文章为 167 次。在此期间,我的 26 篇文章平均每月浏览量超过 1000 次,而其他作者的 10 篇文章则超过 1000 次。当然,这里存在大量选择偏差。我们对其他作者完成的所有文章都投入了大量工作,而我的许多文章则更加随意,导致我的许多文章的页面浏览量很低。但我可以从中学到,与专注于我自己的写作相比,与其他人合作在 martinfowler.com 上发布文章是值得的。
主题页面
作为准备更新网站导航菜单的一部分,我想看看各种主题页面的受欢迎程度。
我不想对此过分解读,因为它是一个相当狭窄的数据点。目前有三个受欢迎程度等级。重构、设计和微服务页面位于顶级。 (尽管微服务页面似乎正在下降到第二级。)第二级是敏捷、网站简介和关于页面。最底层的三人组是交付、DSL 和 NoSQL 页面,其中最后一个页面在 2014 年出现了大幅增长,然后稳步下降。
常青树的年龄
关于此网站,需要记住的一件重要的事情是,许多热门文章都是比较旧的。以下是 2018 年常青页面的发布时间。
年份 | 计数 |
---|---|
2000 | 6 |
2003 | 14 |
2004 | 3 |
2005 | 6 |
2006 | 9 |
2009 | 3 |
2010 | 3 |
2011 | 6 |
2012 | 8 |
2013 | 7 |
2014 | 15 |
2015 | 7 |
2016 | 4 |
2017 | 3 |
2018 | 9 |
在这 103 个页面中,有 38 个页面是在十多年前首次发布的。(我从该列表中删除了导航页面,例如主页。)
重大修订
2019 年 7 月 10 日:添加了常青树的年龄
2019 年 4 月 11 日:添加了主题图表
2019 年 3 月 7 日:首次发布