Python 里最强的Web框架,早就不是Django和Flask了_腾讯新闻

mikel阅读(786)

来源: Python 里最强的Web框架,早就不是Django和Flask了_腾讯新闻

如果说要用 Python 进行 web 开发,我想你一定会告诉我 使用 Flask 或者 Django 再或者 tornado, 用来用去无非就这三种框架。可能逛 github 多的朋友还会说一个 fastapi。但是,皇上,时代变了,大清… 亡了!!!

速度为先

当下,python都已经更新到了 Python3.9.3 了,如果你还没有使用过 asyncio、和 Python3.5 新增的 async/await 语法,那说明你可能真的是桃花源人,问今是何世,不知有汉,无论魏晋了。

在当下,基于 async/await 语法的异步 Web 框架也有很多,在 github 上找一找比比皆是是,那究竟应该选哪一款呢?在 github 上有一个专门测试各种语言各种 Web 框架速度的项目,我们来看一看简单的数据:

这是所有的 Python Web 框架速度测试,有人可能会问为什么不是从 1 开始排序的,因为这个项目的测试还包含 golang、java、php 等众多语言的 Web 框架,共有 226 款。这里我们只用 Python 来做对比。

可以明显的看到,flask、django、tornado 等老牌的 Python Web 框架已经快要垫底了。

wow, 这个速度绝了。可能你们还在怀疑这个速度如何测试的,给你们看一下测试源码:

就是简单的不做任何操作,只返回响应,虽然这样测试没有任何实际意义,在正常的生产环境中不可能什么都不做,但是如果所有的框架都如此测试,也算是从一定程度上在同一起跑线上了吧。

OK,就这么多,说到这里你也应该知道我想要说的这个异步框架是谁了,没错,我们今天的主角就是Sanic

为什么要用异步 Web 框架?

这可能是众多小伙伴最先想到的问题了吧?我用 Django、Flask 用的好好的,能够完成正常的任务,为什么还要用异步 Web 框架呢?

说到这里,首先我要反问你你一个问题,你认为在 Web 开发过程中我们最大的敌人是谁?思考 5 秒钟,然后看看我的回答:

在 Web 开发的过程中,我们最大的敌人不是用户,而是阻塞!

是的,而异步可以有效的解决 网络 I/O 阻塞,文件 I/O 阻塞。具体的阻塞相关的文章推荐查看深入理解 Python 异步编程。由于异步可以提升效率,所以对于 Python 来说,异步是最好的提升性能的方式之一。这也是为什么要选择 异步 Web 框架的原因。

生态环境

可能有的小伙伴还是会说,你为什么不推荐 falcon 而是推荐 Sanic ?明明它的速度非常快,要比 Sanic 快了那么多,那您看一下下面的代码:

一个状态码都要自己定义和填写的框架,我想它的速度快是值得肯定的,但是对于开发者来说,又有多少的实用价值呢?所以我们选择框架并不是要选最快的,而是要又快又好用的。

而大多数框架并不具备这样的生态环境,这应该也是为什么大多数 Python 的 Web 开发者愿意选择 Django 、 Flask 、 tornado 的原因。就是因为它们的生态相对于其他框架要丰富太多太多。

可是,如今不一样了。Sanic 框架, 从 2016 年 5 月开始 发布了第一版异步 Web 框架雏形,至今已经走过了 5 个年头,这 5 年,经过不断地技术积累,Sanic 已经由一个步履蹒跚的小框架变成了一个健步如飞的稳重框架。

在 awesome-sanic 项目中,记录了大量的第三方库,你可以找到任何常用的工具:从 API 到 Authentication,从 Development 到 Frontend,从 Monitoring 到 ORM,从 Caching 到 Queue… 只有你想不到的,没有它没有的第三方拓展。

生产环境

以前我在国内的社区中看到过一些小伙伴在问 2020 年了,Sanic 可以用于生产环境了吗?

答案是肯定的,笔者以亲身经历来作证,从19年底,我们就已经将 Sanic 用于生产环境了。彼时的 Sanic 还是 19.9,笔者经历了 Sanic 19.9 — 21.3 所有的 Sanic 的版本,眼看着 Sanic 的生态环境变得越来越棒。

还有一个问题可能你们不知道,Sanic 在创建之初目标就是创建一个可以用于生产环境的 Web 框架。可能有些框架会明确的说明框架中自带的 Run 方法仅用于测试环境,不要使用自带的 Run 方法用于部署环境。但是 Sanic 所创建的不止是一个用于测试环境的应用,更是可以直接用在生产环境中的应用。省去了使用 unicorn 等部署的烦恼!

文档完善

想必大多数 Python 的 Web 开发者 学的第一个框架就是 Flask 或者 Django 吧,尤其是 Django 的文档,我想大多数小伙伴看了都会心塞。因为旧的版本有中文,但是新的版本,尤其是新特性,完全没有任何中文文档了!!!!这对于关注 Django 发展但英文又不是强项的同学来说,简直苦不堪言。

但 Sanic 拥有完善的 中文用户指南 和 API 文档,这些都是由贡献者自主发起的,官方承认的文档,由翻译者进行翻译贡献,由 Sanic 官方团队进行发布。或许有的小伙伴会说 Flask 也有完善的中文文档,但是那是在不同的站点上的,Sanic 的所有文档都有 Sanic 官方进行发布支持。且目前 Sanic 还在持续支持 韩语、葡萄牙语等更多的语种。

社区指导

和其他框架不同,您或许能够在百度上找到论坛、频道等,但这些都是经过本地汉化的,运营者往往并不是官方,且其中夹杂了很多广告。很显然,如果是官方运营的不可能允许这种情况出现。

Sanic 不同于其他的社区,所有的论坛、频道完全由官方运营,在这里,你可以向核心开发者提问问题,Sanic 的官方发布经理也非常乐意回答各种问题。你也可以和志同道合的使用者分享自己的使用经验。这是一个完全开放的环境….

Sanic 目前常用的有 论坛、Discord、github issues、twitter、Stackoverflow

大家可以在以上的方式中关注 Sanic 的发展以及寻求社区帮助。

你还在等什么?还不赶紧去试一下?最后,以 Sanic 的愿景结尾:Build Faster, Run Faster !

用VScode配置Python开发环境 - 知乎

mikel阅读(1480)

来源: 用VScode配置Python开发环境 – 知乎

前言

VScode是一个相当优秀的IDE,具备开源、跨平台、模块化、插件丰富、启动时间快、颜值高、可高度定制等等优秀的特质,不愧是微软爸爸的私生子。
所以用VScode来编写Python,也是相当的好用的。
所以,今天我们就来讲讲,怎么在VScode上配置Python开发环境。

软件准备

首先,我们必须先下载好Python的安装包和VScode的安装包。
下载地址如下:
Python:https://www.python.org/downloads/
VScode:https://code.visualstudio.com/
大家选择适合自己的版本下载即可。
我是Windows10 64位的操作系统,所以我Python下的是64位的最新版,VSco’de下载的是64位的最新版。
在这里我推荐大家选择Python3,而不是Python2.7,不过就算你下载的Python2.7此教程依旧适用。

软件安装

安装python

首先,我们安装Python到自己的电脑里。
切记,一定要记得勾选添加环境变量。
不然还得手动去配置python的环境变量。
具体的安装过程如图。

动图封面

检查python是否安装成功

然后,我们需要检查下python是否安装成功。
检查方法如下:
1、打开cmd,输入python,点击回车。
2、输入import this,欣赏下python之禅。
3、退出、输入pip list,检查第三方的包正确不。
具体过程如图。

动图封面

安装第三方的包

通过python自带的pip工具,安装两个一会儿配置VScode需要的包。
flake8和yapf
flake8会检查编写代码时的不规范的地方和语法错误。
yapf是一个代码格式化工具,可以一键美化代码。
安装过程如下:
1、在cmd输入pip list检查是否已存在需要的包
2、输入pip install flake8下载安装flake8
3、输入pip install yapf下载安装yapf
具体过程如图。

动图封面

安装VScode

安装VScode就很简单了,一路NEXT就可以了。
如图所示:

动图封面

配置VScode

安装python插件。

1、打开VScode,按下快捷键Ctrl+Shift+X,进入插件管理页面。
2、在搜索栏输入python。
3、选择插件,点击安装。

动图封面

创建项目,配置工作区域

1、创建一个本地文件夹,作为项目文件。

2、配置工作区域

配置flake8和yapf并关闭pylint工具。
在工作区域输入以下内容:

{
    "python.linting.flake8Enabled": true,
    "python.formatting.provider": "yapf",
    "python.linting.flake8Args": ["--max-line-length=248"],
    "python.linting.pylintEnabled": false
}

3、编写python文件

新建一个python文件,输入一句

print("Hello VScode")

连续按两次F5执行文件。
如图所示:

动图封面

4、配置python编译设置

连续按两次F5是不是特别不习惯,没事,我们来改掉它!
很简单只需要将launch.json文件的 “stopOnEntry”: true,改为 “stopOnEntry”: false。
如图所示:

动图封面

代码格式化工具yapf

在VSCode中按下快捷键Alt+Shift+F即可自动格式化代码
操作起来特别简单,给大家简单的演示下。
如图:

动图封面

其他

到这里,整个VScode编写Python的开发环境就已经全部配置完成了。
接下来,大家可以自行配置一些个性化的东西。
比如文件图标,主题等等。
在这里给大家推荐一个好看的主题,Hopscotch (Official)
PS.主题的安装方法和插件是一样的。
下一篇,我会教大家如何在VScode里配置git,并在GitHub上同步代码。\

.Net6+Furion+Sqlsugar+SenparcSdk开发微信公众号系列之二:搭建项目 - HuTiger - 博客园

mikel阅读(1095)

来源: .Net6+Furion+Sqlsugar+SenparcSdk开发微信公众号系列之二:搭建项目 – HuTiger – 博客园

一、技术选型

语言:.Net6

脚手架:Furion

Orm:SQLsugar

SDK:Senparc.Weixin.MP

二、为什么要用SQLsugar和Furion

因为TM的太好用了,不用自己造轮子了,只要会开车就行了,而且文档是我见过最全的,公司现在也是全部用SQLsugar+Furion开发项目。

Sqlsugar

SqlSugar是一款 老牌 .NET 开源ORM框架,由果糖大数据科技团队维护和更新 ,

1.  .NET中唯一支持全自动分表组件,SAAS分库,大数据处理的ORM

2.  .NET 百万级写入、更新  性能最强框架

3.  使用最简单的ORM 【文档,视频教程

4.媲美原生的极限的性能

5.Github star数仅次于EF 和 Dapper,每月nuget下载量超过1万

更多优点: 简单易用、功能齐全、高性能、轻量级、服务齐全、官网教程文档、有专业技术支持一天18小时服务

支持数据库MySql、SQLServer、Sqlite、Oracle 、 postgresql、达梦、人大金仓、神通数据库、Access 、MySqlConnector、自定义扩展

Furion

## 🍎 框架特点

– 全新面貌:基于 `.NET5/6` 平台,没有历史包袱

– 极少依赖:框架只依赖两个第三方包 – 极易入门:只需要一个 `Inject()` 即可完成配置

– 极速开发:内置丰富的企业应用开发功能

– 极其灵活:轻松面对多变复杂的需求

– 极易维护:采用独特的架构思想,只为长久维护设计

– 完整文档:提供完善的开发文档

– **跨全平台:支持所有主流操作系统及 .NET 全部项目类型**

三、搭建项目

1.安装Furion脚手架

参考官网文档

 

在要创建项目的目录打开cmd安装并创建项目,文档中是mvc项目这里我们要改成Api项目

 2.配置项目

关于项目架构说明可以直接去看Furion的文档,这里就不说明了。我们这里用的orm是sqlsugar,所以这两个efcore项目不需要,直接移除,移除后本地也直接删掉

删除IIS配置

取消https,直接http就行

修改一下Swagger的配置,在WeiXinApi.Application中的配置文件applicationsettings.json

修改启动端口在program.cs

设置WeiXinApi.Web.Entry项目为启动项,直接启动项目,可以看到直接弹出了Swagger页面,ok,项目搭建完成!

 

微服务是什么? - 阮一峰的网络日志

mikel阅读(807)

来源: 微服务是什么? – 阮一峰的网络日志

作者: 阮一峰

日期: 2022年4月29日

微服务(microservice)是一种软件架构,正得到越来越多的关注。

但是,它到底是什么意思?什么样的架构可以叫做微服务?

网上的文章虽然很多,但是都太复杂,初学者不容易看懂。我认为,这个概念其实非常简单,可以很通俗地说明白。

一、单体软件

要理解微服务,首先需要理解软件架构的演变。

早期的软件,所有功能都写在一起,这称为单体架构(monolithic software)。

整个软件就是单一的整体,彷佛一体化的机器。

可以想到,软件的功能越多,单体架构就会越复杂,很多缺点也随之暴露出来。

(1)所有功能耦合在一起,互相影响,最终难以管理。

(2)哪怕只修改一行代码,整个软件就要重新构建和部署,成本非常高。

(3)因为软件做成了一个整体,不可能每个功能单独开发和测试,只能整体开发和测试,导致必须采用瀑布式开发模型。

以上三个原因的详细分析,可以参考我以前的文章《软件工程的最大难题》

总之,单体架构的大型软件,不仅开发速度慢,而且会形成难以维护和升级的复杂代码,成为程序员的沉重负担。

二、面向服务架构

为了解决上面这些问题,很早就有人提出来,必须打破代码的耦合,拆分单体架构,将软件拆分成一个个独立的功能单元。

大概在20多年前,随着互联网的出现,功能单元可以用远程”服务”的形式提供,就诞生出了”面向服务架构”(service-oriented architecture,简称 SOA)。

所谓服务(service),就是在后台不间断运行、提供某种功能的一个程序。最常见的服务就是 Web 服务,通过80端口向外界提供网页访问。

“面向服务架构”就是把一个大型的单体程序,拆分成一个个独立服务,也就是较小的程序。每个服务都是一个独立的功能单元,承担不同的功能,服务之间通过通信协议连在一起。

这种架构有很多优点。

(1)每种服务功能单一,相当于一个小型软件,便于开发和测试。

(2)各个服务独立运行,简化了架构,提高了可靠性。

(3)鼓励和支持代码重用,同一个服务可以用于多种目的。

(4)不同服务可以单独开发和部署,便于升级。

(5)扩展性好,可以容易地加机器、加功能,承受高负载。

(6)不容易出现单点故障。即使一个服务失败了,不会影响到其他服务。

跟单体架构不一样,面向服务架构是语言不敏感的,不同服务可以使用不同的语言和工具开发,可能需要部署在不同的系统和环境。

这意味着,面向服务架构默认运行在不同服务器上,每台服务器提供一种服务,多台服务器共同组成一个完整的网络应用。

三、微服务

2014年,Docker 出现了,彻底改变了软件开发的面貌。它让程序运行在容器中,每个容器可以分别设定运行环境,并且只占用很少的系统资源。

显而易见,可以用容器来实现”面向服务架构”,每个服务不再占用一台服务器,而是占用一个容器。

这样就不需要多台服务器了,最简单的情况下,本机运行多个容器,只用一台服务器就实现了面向服务架构,这在以前是做不到的。这种实现方式就叫做微服务。

简单说,微服务就是采用容器技术的面向服务架构。它依然使用”服务”作为功能单元,但是变成了轻量级实现,不需要新增服务器,只需要新建容器(一个进程),所以才叫做”微服务”。

一个微服务就是一个独立的进程 这个进程可以运行在本机,也可以运行在别的服务器,或者在云端(比如云服务和云函数 FaaS)。

它的特点与面向服务架构是一样的,但因为更轻量级,所以功能的解耦和服务化可以做得更彻底。而且,它可以标准化,同样的容器不管在哪里运行,结果都是一样的,所以市场上有很多 SaaS 产品,提供标准化的微服务。

正是由于微服务这些突出的优点,这几年才会变得如此流行。它和容器技术、云服务一起,一定会在未来的软件开发中,扮演越来越重要的角色。

(完)

如何选择开源许可证?

mikel阅读(871)

作者: 阮一峰

日期: 2011年5月 2日

如何为代码选择开源许可证,这是一个问题。

世界上的开源许可证,大概有上百种。很少有人搞得清楚它们的区别。即使在最流行的六种—-GPLBSDMITMozillaApacheLGPL—-之中做选择,也很复杂。

乌克兰程序员Paul Bagwell,画了一张分析图,说明应该怎么选择。这是我见过的最简单的讲解,只用两分钟,你就能搞清楚这六种许可证之间的最大区别。

下面是我制作的中文版,请点击看大图。

(完)

vue-cli-service不是内部或外部命令,也不是可运行的程序_易意逸的博客-CSDN博客_vue-cli-service 不是内部或外部命令

mikel阅读(1135)

来源: vue-cli-service不是内部或外部命令,也不是可运行的程序_易意逸的博客-CSDN博客_vue-cli-service 不是内部或外部命令

报错信息: “不是内部或外部命令,也不是可运行的程序”
步骤一: 检查package.json 中是否有 vue-cli-server,没有则需安装

步骤二 : 执行npm install命令

步骤三: 执行npm run dev 命令,查看程序是否运行正常

步骤四: 如果仍有异常,则检查是否有 node modules 文件有则删除 ;重新安装 node modules;
如果没有 则 单独安装 vue-cli-service;npm install vue-cli-service -S
————————————————
版权声明:本文为CSDN博主「易意逸」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43170297/article/details/107039529

连接远程计算机提示:“这可能是由于CredSSP加密数据库修正” 问题_侣行G_X_N的博客-CSDN博客_这可能是由于credssp加密数据库修正

mikel阅读(750)

来源: 连接远程计算机提示:“这可能是由于CredSSP加密数据库修正” 问题_侣行G_X_N的博客-CSDN博客_这可能是由于credssp加密数据库修正

1. 问题描述
windows系统更新,改变了数据库的加密配置,如下图:

2. win + R,输入gpedit.msc,打开本地组策略编辑器
2.1 操作步骤:计算机配置–>管理模板->系统–>凭据分配–>加密数据库修正

2.2 下图为双击加密数据库凭证后展示的页面,设置已启用,保护级别设置为易受攻击

2.3 修改完成后再次验证,已经可以正常的连接远程桌面了。

————————————————
版权声明:本文为CSDN博主「侣行G_X_N」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/G_x_n/article/details/113278711

搭建自己的低代码平台 - 菜菜聊架构 - 博客园

mikel阅读(837)

来源: 搭建自己的低代码平台 – 菜菜聊架构 – 博客园

2021 开年“低代码”成了热门话题,各大云厂商都在加码。作为普通企业的我们是否有也可以深度定制一套自己的“低代码”平台呢?

2|0二、云厂商的低代码平台

阿里推出了易搭,通过简单的拖拽、配置,即可完成业务应用的搭建。旨在为广大中小企业提供一套低成本的企业应用搭建解决方案。应用无缝植入钉钉企业工作台,随时随地、高效协同。

基于 magic-api 搭建自己的低代码平台

腾讯则是推出了微搭,通过行业化模板、拖放式组件和可视化配置快速构建多端应用(小程序、H5 应用、Web 应用等),打通了小程序、云函数。

基于 magic-api 搭建自己的低代码平台

3|0三、搭建我们自己的低代码平台?!

回到前言中的问题,我们是否可以基于开源项目来快速搭建我们自己的低代码平台呢?答案是肯定的,目前已经有很多非常不错的开源项目,apijson、dataway 还有后面我要重点介绍的 magic-api 都是非常不错的低代码开源项目。下面大家请跟着我一起来看看今天我要推荐的三个低代码开源项目:百度 amis、h5-Dooring 和 magic-api。

4|03.1 百度 amis(前端)

百度 amis 是一套前端低代码框架,通过 JSON 配置就能生成各种后台页面,极大减少开发成本,甚至可以不需要了解前端。

基于 magic-api 搭建自己的低代码平台

5|03.2 h5-Dooring(前端)

h5-Dooring,让 H5 制作像搭积木一样简单, 轻松搭建 H5 页面, H5 网站, PC 端网站, 可视化设计。

H5 页面拖拽生成:

基于 magic-api 搭建自己的低代码平台

新建数字大屏:

基于 magic-api 搭建自己的低代码平台

数字大屏效果:

基于 magic-api 搭建自己的低代码平台

更多请查看官网 http://h5.dooring.cn

6|03.3 magic-api(后端)

magic-api 是一个基于 Java 的接口快速开发框架,编写接口将通过 magic-api 提供的 UI 界面完成,自动映射为 HTTP 接口,无需定义 Controller、Service、Dao、Mapper、XML、VO 等 Java 对象即可完成常见的 HTTP API 接口开发。

在线开发调试 UI:

基于 magic-api 搭建自己的低代码平台

7|0四、magic-api 搭建

自 magic-api 在开源中国开源,笔者一直在关注此项目。magic-api 搭建比较简单,跟着官方仓库快速开始即可。

8|04.1 加入依赖

<!– 以 spring-boot-starter 的方式引用 –> <dependency> <groupId>org.ssssssss</groupId> <artifactId>magic-api-spring-boot-starter</artifactId> <version>1.3.9</version> </dependency>

9|04.2 添加配置

server.port=9999 #配置 web 页面入口 magic-api.web=/magic/web #配置文件存储位置。当以 classpath 开头时,为只读模式 magic-api.resource.location=/data/magic-api

10|04.3 效果

基于 magic-api 搭建自己的低代码平台

11|04.4 添加接口

基于 magic-api 搭建自己的低代码平台

点击执行就可以看到效果,这里不做展示,magic-api 官方做了大量的各种各样的功能演示,大家可以去体验体验。地址:
http://140.143.210.90:9999/magic/web/index.html

基于 magic-api 搭建自己的低代码平台

12|04.5 magic-api 核心之 magic-script

magic-api 底层使用的是作者(小东)自研的 magic-script 来执行脚本,他是一个语法类似 js 的 JVM 脚本语言。作者开发很多好用的功能, 其中的 linq 功能就是非常的一个。

示例:

var list = [{ sex : 0, name : ‘小明’ },{ sex : 1, name : ‘小花’ }] return select * from list t where t.sex = 0

结果:

{ “sex”: 0, “name”: “小明” }

13|0五、结合 mica 使用

14|05.1 加入 mica-bom 依赖

<dependencyManagement> <dependencies> <dependency> <groupId>net.dreamlu</groupId> <artifactId>mica-bom</artifactId> <version>${mica.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>

15|05.2 mica-logging 无缝接入

mica-logging 的接入比较简单加入依赖即可:

基于 magic-api 搭建自己的低代码平台

注意:更多配置,如 json 日志和 logstash 日志收集请查看 mica 文档。

16|05.3 mica-captcha 验证码

base64 验证码:

基于 magic-api 搭建自己的低代码平台

17|05.4 mica-ip2region ip 转位置信息

基于 magic-api 搭建自己的低代码平台

示例项目源码:
https://gitee.com/596392912/magic-api-example

从 mica 的接入可以看出,magic-api 的扩展性非常好,更多的自定义配置和扩展我们可以查看 官方文档 :

基于 magic-api 搭建自己的低代码平台

18|0六、低代码开源

19|0前端:

amis(百度前端低代码框架):
https://github.com/baidu/amis

Sortable: https://github.com/SortableJS/Sortable

码良:
https://gitee.com/ymm-tech/gods-pen

h5-Dooring: https://github.com/MrXujiang/h5-Dooring

20|0后端:

apijson: https://github.com/Tencent/APIJSON

dataway: https://gitee.com/zycgit/hasor

magic-api: https://gitee.com/ssssssss-team/magic-api

21|0七、总结

基于 magic-api 等开源项目我们也可以搭建自己的低代码平台。当然开发这个低代码平台我们还是需要些工作量,主要是打通 web ui 和后端接口的 api。笔者曾经也经历过一个电商项目,很多活动都是周五下午接到需求,周一就必须要上线。借助 magic-api 这类低代码工具我们可以快速完成这类需求。最后,希望这篇文章对大家有所启发。

Ant Design介绍 - 简书

mikel阅读(1670)

来源: Ant Design介绍 – 简书

1、Ant Design设计语言和组件库
蚂蚁金服体验技术部经过大量的项目实践和总结,沉淀出设计语言 Ant Design,这可不单纯只是设计原则、控件规范和视觉尺寸,还配套有前端代码实现方案。也就是说采用Ant Design后,UI设计和前端界面研发可同步完成,效率大大提升。目前有阿里、美团、滴滴、简书采用。Ant Design有Web版和Moblie版。

Paste_Image.png

Ant Design Web版: https://ant.design/index-cn
Ant Design Mobile版: https://mobile.ant.design/index-cn

2、Ant Motion(动效解决方案)
Ant Design里的前端代码实现方案可不是搭建静态的界面这么简单,还包含动效的解决方案,也提供动效设计风格和原则,要知道大部分动效做不出来的场景,都是因为设计师方案和研发代码实现存在一定的鸿沟,有了Ant Motion完整的解决方案,设计和研发工程师沟通协作无障碍,动效实现将会非常轻松。

Paste_Image.png

Ant Motion: https://motion.ant.design/
3、AntD Library(Ant Design官方Axure控件库)
其实类似于Ant Design的设计语言搭配前端实现方案的也不止支付宝这一家,但是牛逼的是支付宝还将Ant Design做成了Axure控件库并公开下载,Web和Mobile全都有,简直是造福行业,功德无量。

Paste_Image.png

AntD Library下载地址: http://library.ant.design/
4、AntUX(站点地图模板)
除了Axure控件库以外,还提供Axure、Sketch、OmniGraffle三种格式的站点地图模板。提升流程图、站点地图、产品整体结构图的绘制效率。据悉,未来还会提供Illustrator版本。

Paste_Image.png

AntUX下载地址: http://ux.ant.design/
5、Ant V(可视化图表解决方案)
可视化图表能让复杂的逻辑和臃肿的数字变动更清晰更容易理解,Ant V对不同的图表类型提供了详细的介绍、案例和使用建议,并总结出图表设计原则和相关文献推荐,所有的图表的Web和Moblie前端实现方案也一应俱全。

Paste_Image.png

Ant V: https://antv.alipay.com/index.html

作者:lwoodenheart
链接:https://www.jianshu.com/p/2ca388e8d68a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

手把手带你体验Stream流

mikel阅读(739)

来源: 手把手带你体验Stream流

前言

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

上一篇讲解到了Lambda表达式的使用《最近学到的Lambda表达式基础知识》,还没看的同学可以先去阅读一下哈~

相信也有不少的同学想要知道:Lambda表达式在工作中哪个场景会用得比较多?跟Lambda搭边的,使用Stream流会比较多

一般人第一次看Stream流的代码,都会有点看不懂(它的代码看起来好像就不是写Java一样.),希望这篇文章能带大家入个门

一、体验Stream流

大家在自学时,大多数会学过一个程序:算出从数组元素的和,当时我们是怎么写的?一般来说是这样的:

public static void main(String[] args) {
    int[] nums = { 123 };
    int sum = 0;
    for (int i : nums) {
        sum += i;
    }
    System.out.println("结果为:" + sum);
}

如果我们使用Stream流的话,可以这样:

public static void main(String[] args) {
    int[] nums = { 123 };
    int sum2 = IntStream.of(nums).sum();
    System.out.println("结果为:" + sum2);
}

代码量上可以明显看出,用Stream流的方式会少一些。

我理解的Stream流编程就是:某些场景会经常用到操作(求和/去重/过滤….等等),已经封装好API给你了,你自己别写了,调我给你提供的API就好了

1.1 支持并发

回到我们最原始的代码:

public static void main(String[] args) {
    int[] nums = { 123 };
    int sum = 0;
    for (int i : nums) {
        sum += i;
    }
    System.out.println("结果为:" + sum);
}

如果我们想要for循环的内部支持并发的话,显然不太好去写。但使用Stream流的方式,调用一个方法就可以支持并发(parallel):

public static void main(String[] args) {
    int[] nums = { 123 };
    int sum2 = IntStream.of(nums).parallel().sum();
    System.out.println("结果为:" + sum2);
}

优点:调API肯定是比自己写的代码量要少。

缺点:不方便调试

为什么要使用Stream流在我看来就是以上两个原因:

  • 方便并发
  • 代码量少(直接调用API)

二、如何使用Stream流?

图片
Stream继承结构图

使用Stream流分为三步:

  1. 创建Stream流
  2. 通过Stream流对象执行中间操作
  3. 执行最终操作,得到结果
图片
三步走

2.1 创建流

创建流我们最常用的就是从集合中创建出流

/**
 * 返回的都是流对象
 * @param args
 */
public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    // 从集合创建
    Stream<String> stream = list.stream();
    Stream<String> stream1 = list.parallelStream();

    // 从数组创建
    IntStream stream2 = Arrays.stream(new int[]{235});

    // 创建数字流
    IntStream intStream = IntStream.of(123);

    // 使用random创建
    IntStream limit = new Random().ints().limit(10);

}

2.2 执行中间操作

怎么理解中间操作?意思是这样的:在上面我们已经能创建出Stream了,我们是对Stream进行操作,对Stream操作返回完返回的还是Stream,那么我们称这个操作为中间操作。

图片
中间操作 解释

比如,我们现在有个字符串my name is 007,代码如下:

String str = "my name is 007";

Stream.of(str.split(" ")).filter(s -> s.length() > 2)
    .map(s -> s.length()).forEach(System.out::println);

分解:

1、从字符串数组创建出流对象:

Stream<String> split = Stream.of(str.split(" "));

2、通过流对象的API执行中间操作(filter),返回的还是流对象:

Stream<String> filterStream = split.filter(s -> s.length() > 2);

3、通过返回的流对象再执行中间操作(map),返回的还是流对象:

Stream<Integer> integerStream = filterStream.map(s -> s.length());

因为中间操作返回的都是流对象,所以我们可以链式调用

注意:Stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行(惰性求值)。

比如说,peek()是一个中间操作,返回的是Stream流对象,只要它不执行最终的操作,这个Stream是不会执行的。

String str = "my name is 007";
Stream.of(str.split(" ")).peek(System.out::println); // 不会有信息打印

2.3 执行最终操作

最终操作返回的不再是Stream对象,调用了最终操作的方法,Stream才会执行。还是以上面的例子为例:

String str = "my name is 007";
Stream.of(str.split(" ")).peek(System.out::println).forEach(System.out::println)

这次我们加入了最终操作,所以这次的Stream流会被执行,由于中间操作和最终操作都是执行打印,所以会看到两次打印:

图片
结果图

至于中间操作和最终操作怎么区分,我们以返回值来看就行了。中间操作返回的是Stream实例对象,最终操作返回的不是Stream实例对象:

图片
Stream接口的方法

最后

这篇文章主要跟大家一起初步认识一下Stream流,至于中间操作、最终操作的API讲解我就不写了(网上的教程也很多)

使用Stream的原因我认为有两个:

  1. JDK库提供现有的API,代码写起来简洁优化
  2. 方便并发。大家可以记住一个结论:在多核情况下,可以使用并行Stream API来发挥多核优势。在单核的情况下,我们自己写的for性能不比Stream API 差多少

参考资料: