整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Java开发人员必知必会的20种常用类库和API

Java开发人员必知必会的20种常用类库和API

个有经验的Java开发人员特征之一就是善于使用已有的轮子来造车。《Effective Java》的作者Joshua Bloch曾经说过:“建议使用现有的API来开发,而不是重复造轮子”。在本文中,我将分享一些Java开发人员应该熟悉的最有用的和必要的库和API。顺便说一句,这里不包括框架,如Spring和Hibernate因为他们非常有名,都有特定的功能。

本文总结了日志、JSON解析、单测、XML解析、字节码处理、数据库连接池、集合类、邮件、加密、嵌入式SQL数据库、JDBC故障诊断以及序列化等20个方面的常用类库。都是你日常开发经常可能要用到的,现在不用不要紧,但是你要知道有这么一篇文章可以供你参考。

不知道不可怕,可怕的是你不知道你不知道。

一、日志相关类库

日志库是很常见的,因为你在每一个项目中都需要他们。打印日志是服务器端应用中最重要的事情,因为日志是你了解你的程序发生了什么的唯一途径。尽管JDK附带自己的日志库,但是还是有很多更好的选择可用,例如Log4jSLF4jLogBack。

Java开发人员应该熟悉日志记录的利弊,并且了解为什么SLF4J要比Log4J要好。

二、JSON解析库

在当今世界的web服务和物联网中(IoT),JSON已经取代了XML,成为从客户端到服务器传送信息的首选协议。有一个好消息和一个坏消息。坏消息是JDK没有提供JSON库。好消息是有许多优秀的第三方库可以用来解析和创建JSON消息,如JacksonGson

一个Java web开发人员应该熟悉Jackson 和 Gson这两种中的至少一种库。

三、单元测试库

单元测试技术的使用,是区分一个一般的开发者和好的开发者的重要指标。程序员经常有各种借口不写单元测试,但最常见的借口就是缺乏经验和知识。常见的单测框架有JUnit, MockitoPowerMock

四、通用类库

有几个很好的第三方通用库可供Java开发人员使用,例如Apache CommonsGoogle Guava。我会经常在我的代码中使用这些通用类库,因为这些类库都是经过无数开发者实践过的,无论是实用性还是在性能等方面都是最佳的。

五、Http 库

我不是很喜欢JDK的一个重要原因就包括他们缺乏对HTTP的支持。虽然可以使用java.net包类,但是这和直接使用像Apache HttpClientHttpCore等开源类库比起来麻烦太多了。

尽管JDK 9将开始HTTP 2.0,也对HTTP的支持做了优化,但是我还是强烈建议所有的Java开发人员熟悉流行的HTTP处理类库,例如HttpClient和HttpCore HTTP等库。

六、XML解析库

市面上有很多XML解析的类库,如Xerces, JAXB, JAXP, Dom4j, Xstream等。Xerces2是下一代高性能,完全兼容的XML解析工具。Xerces2定义了 Xerces Native Interface (XNI)规范,并提供了一个完整、兼容标准的 XNI 规范实现。该解析器是完全重新设计和实现的,更简单以及模块化。

七、Excel读写库

许多应用程序需要提供把数据导出到Excel的功能,如果你要做相同的Java应用程序,那么你需要Apache POI API

这是一个非常丰富的类库,你可以从Java程序读写XLS文件。

八、字节码库

如果你正在编写一个框架或者类库。有一些受欢迎的字节码库如javassistCglib Nodep可以供你选择,他们可以让你阅读和修改应用程序生成的字节码。

Javassist使得JAVA字节码操作非常简单。它是一个为编辑Java字节码而生的类库。ASM是另一个有用的字节码编辑库。

九、数据库连接池库

如果你的Java应用程序与数据库交互不是使用数据库连接池库的话,那么你就大错特错了。因为在运行时创建数据库连接非常耗时并且会拖慢你的程序。所以墙裂建议使用,有些好用的连接池可供选择,如Commons Pool DBCP

在web应用程序中,web服务器通常提供了这些功能。但是在java项目中需要把数据库连接池的类库导入到应用中。

十、消息传递库

像日志和数据库连接池一样,消息传递也是很多实际的Java项目中必备的。Java提供了JMS Java消息服务,但这不是JDK的一部分,你需要单独的引入jms.jar。类似地,如果您准备使用第三方消息传递协议,Tibco RV是个不错的选择。

十一、PDF处理库

除了Excel和Word,PDF也是一种常用的文件格式。如果你的应用程序要支持PDF格式的文件处理,你可以使用iTextApache FOP类库。两者都提供了非常有用的PDF处理功能。

十二、日期和时间库

在Java之前,JDK的日期和时间库一直被人们所诟病,比如其非线程安全的、不可变的、容易出错等。很多开发人员会选择更好用的JodaTime类库。

但是在Java8推出之后,我们就可以彻底放弃JodaTime了,因为Java 8提供了其所有功能。但是,如果你的代码运行在一个低版本的JDK中,那么JodaTime还是值得使用的。

十三、集合类库

虽然JDK有丰富的集合类,但还是有很多第三方类库可以提供更多更好的功能。如Apache Commons CollectionsGoldman Sachs collectionsGoogle CollectionsTrove。Trove尤其有用,因为它提供所有标准Collections 类的更快的版本以及能够直接在原语(primitive)(例如包含int 键或值的Map 等)上操作的Collections 类的功能。

FastUtil是另一个类似的API,它继承了Java Collection Framework,提供了数种特定类型的容器,包括映射map、集合set、列表list、优先级队列(prority queue),实现了java.util包的标准接口(还提供了标准类所没有的双向迭代器),还提供了很大的(64位)的array、set、list,以及快速、实用的二进制或文本文件的I/O操作类。

十四、邮件API

javax.mail 和 Apache Commons Email 提供了发送邮件的api。它们建立在JavaMail API的基础上,提供简化的用法。

十五、HTML解析库

和XML与JSON类似,HTML是另外一种我们可能要打交道的传输格式。值得庆幸的是,我们有jsoup可以大大简化Java应用程序使用HTML。你不仅可以使用JSoup解析HTML还可以创建HTML文档。

十六、加密库

Apache Commons家族中的Commons Codec就提供了一些公共的编解码实现,比如Base64, Hex, MD5,Phonetic and URLs等等。

十七、嵌入式SQL数据库库

我真的是非常喜欢像H2这种内存数据库,他可以嵌入到你的Java应用中。在你跑单测的时候如果你需要一个数据库,用来验证你的SQL的话,他是个很好的选择。顺便说一句,H2不是唯一嵌入式DB,你还有Apache DerbyHSQL可供选择。

十八、JDBC故障诊断库

有不错的JDBC扩展库的存在使得调试变得很容易,例如P6spy,这是一个针对数据库访问操作的动态监测框架,它使得数据库数据可无缝截取和操纵,而不必对现有应用程序的代码作任何修改。P6Spy 分发包包括P6Log,它是一个可记录任何 Java 应用程序的所有JDBC事务的应用程序。其配置完成使用时,可以进行数据访问性能的监测。

十九、序列化库

Google Protocol Buffer 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。

二十、网络库

一些有用的网络库主要有Netty的和Apache MINA。如果您正在编写一个应用程序,你需要做的底层网络任务,可以考虑使用这些库。

这都是每位Java开发人员应该熟悉的,并且十分有用的库。Java生态系统非常庞大的,你会发现有很多不同的类库可以做不同的事情。每个你想到的东西,都可能有一个库可以做到。

要相信,你遇到的问题,肯定不止你一个遇到过。

要相信,也许有很多人比你更勤奋。

要相信,你用或不用,轮子就在那里。

要相信,使用这些类库,你和你的代码都会变得更好。


文章来源:https://dwz.cn/kON36g6Q
作者: Hollis

介:无明JavaScript 仍然是 2020 年最受欢迎和使用最为广泛的编程语言,因此 JavaScript 生态系统也会继续发展壮大。然而,JavaScript 的标准库仍然继续保持“短小精悍”的身材。为了填补 ...转发+关注,私信小编“资料”免费分享资料给你!


在笔记本电脑上工作的女子

JavaScript 仍然是 2018 年最受欢迎和使用最为广泛的编程语言,因此 JavaScript 生态系统也会继续发展壮大。
然而,JavaScript 的标准库仍然继续保持“短小精悍”的身材。为了填补标准库功能方面的空白,在过去几年中,GitHub 上出现了很多流行的 JavaScript 库。以下列出了 11 个有用的库,这些库的维护状态均很活跃。
1.Underscore 和 Lodash(dah)
可能大多数人都知道这两个库。Underscore 的目的是为 JavaScript 中的常见任务提供实用的函数。Lodash 是下载量最大和被依赖最多的库之一,旨在为数组、字符串、object 和 argument 对象提供更一致的跨环境迭代支持,并已成为 Underscore 的超集。这两个库由相同的核心贡献者维护,在技术选型时完全可以考虑使用它们。
Lodash - https://github.com/lodash/lodash
Underscore - https://github.com/jashkenas/underscore
2. Ramda
在 GitHub 上的 Star 已经超过 12,000,这个库专为函数式编程而设计,可以轻松创建不改变用户数据状态的函数式管道。Ramda 的核心设计理念是创建具有不变性和无副作用的函数。所有的函数会被自动柯里化,并根据易用性安排参数的顺序。
Ramda - https://github.com/ramda/ramda
3. MathJS
在 GitHub 上的 Star 已经超过 6000,这个库是 JavaScript 和 Node.js 的数学扩展库,与 JavaScript 内置的 Math 库兼容。该库包含一个灵活的表达式解析器,能够运行符号计算,并提供了一系列内置函数和常量。用户还可以对其进行扩展。
MathJS - https://github.com/josdejong/mathjs
4. Moment
在 GitHub 上的 Star 已经超过 37,000,是一个 JavaScript 日期和时间操作库,用于解析、验证、操作和格式化日期。Moment 可以在浏览器和 Node.js 中运行。从 2.10.0 版本开始迁移到 ECMAScript 6。
Moment - https://github.com/moment/moment
另外两个同类的库:
Date-fns(10,000 个 Star)- https://github.com/date-fns/date-fns
DateJS - https://github.com/datejs/Datejs
5. Sugar
在 GitHub 上的 Star 已经超过 3500,主要用于处理本地对象。这个库支持自定义构建,还提供了模块化的 npm 包,因此可以只使用其中必要的部分模块(也可以与 Bit 结合使用),用户还可以通过自定义方法或使用插件来应对特定的使用场景。
Sugar - https://github.com/andrewplummer/Sugar
6. Lazy
在 GitHub 上的 Star 将近 5000,是一个功能强大的 JavaScript 库,它的 lazy 引擎“尽可能地少做一些工作”,同时保持足够的灵活性。
Lazy - https://github.com/dtao/lazy.js
7. CollectJS
在 GitHub 上的 Star 超过 3200,主要用于处理 JavaScript 中的数组和对象,无需其他依赖,提供了几十个有用的功能和 API,这些 API 几乎与 Laravel Collections 5.5 相同。该库的维护状态很活跃,值得关注。
CollectJS - https://github.com/ecrmnn/collect.js
8. ChanceJS
Chance 在 GitHub 上的 Star 超过 3200,一个简单的随机对象生成器,用于生成随机的字符串、数字等。在编写自动化测试代码或任何需要随机对象的地方,可以用它来减少单调的工作。
ChanceJS - https://github.com/chancejs/chancejs
9. ChartJS
在 GitHub 上的 Star 将近 40,000 个,提供了 8 种不同类型的数据可视化,每种类型都支持动画和定制。借助 Chart.js,我们可以使用<canvas>标签创建简单的HTML5图表,而且在所有现代浏览器中都具有出色的渲染性能。
ChartJS - https://github.com/chartjs/Chart.js
10. Polished
在 GitHub 上的 Star 超过 3500 个,由 styled-components 团队开发,是一个非常优秀的轻量级工具集,支持使用 JavaScript 编写具有 SASS 风格辅助函数和 mixin 的样式。该库与 styled-components、Aphrodite、Radium 或简单的内联样式兼容。这个库可以在 GitHub 上找到,Bit 社区(非官方)也单独提供所有的功能,因此可以单独安装、导入和使用。
Polished - https://github.com/styled-components/polished
Bit 社区提供的单独安装版 - https://bitsrc.io/ranm8/polished
11. Mout
Mout.js 是一组模块化的 JavaScript 库,可以在浏览器或 node.js 中运行,提供类似于其他语言标准库(Python、Ruby、PHP 等)中的辅助方法。mout.js 允许仅加载必需的模块或函数,并提供了一致的 API,规范了跨浏览器行为。
Mout - https://github.com/mout/mout
特别推荐
Bit utils
一个模块化和高性能的库,已经被用在 Bit 的 web hub 中。这些函数可使用 NPM/Yarn 进行单独安装,用户也可以创建自己的集合,并从不同的库和项目中收集有用的功能。
Bit utils - https://bitsrc.io/bit/utils
Voca
一个用于操作字符串的 JavaScript 库。它提供的功能包括大小写转换、trim、pad、slugify、latinise、sprintf、truncate、escape 等。用户可以加载单个函数,以便最小化应用程序的构建。该库具有很高的测试覆盖率,并且不依赖其他库。
Voca - https://github.com/panzerdp/voca
Licia
只有 400 个 Star,这个有趣的项目基本上是一个简单但有用的 JavaScript 片段集合,具有很高的测试覆盖率,文档也很齐全。

java学习资料获取方式

右上角点击关注,私信回复“学习” 领取资料

私信不要多字,不要少字,不要错字,私信方法:点击我头像,进入主页面,右上角有私信功能,在关注的上方位置。


lement UI

开发团队:饿了么前端

官网:https://element.eleme.cn/#/zh-CN

github( star:44.1k ):https://github.com/ElemeFE/element

特性:

Element-UI 是目前针对于 Vue 开发 PC 端项目的时候所使用到的一个主流 UI 库。在座的有学习 Vue 开发的同学或多或少应该都知道 Element-UI 。那我们就从它开始聊。

? 大家有没有想过,对于一个 UI 库来说,它是如何被广大的开发者所接受的?或者说它是如何被用户所接受的?

? 我认为,一个产品,具体到当前就是 Element-UI 这个库,这个库对于我们开发者来说就是产品,我们开发者就是它的用户。而一个产品之所以可以被用户所接受,所依赖的无非是三点:

1. 产品的文档对于用户来说足够清晰
2. 产品的功能对于用户来说足够简单
3. 产品的 UI 对于用户来说足够友好

? 什么意思呢?我们一个一个来解释。

? 首先我们来看第一个:产品的文档对于用户来说足够清晰。这是什么意思呢?大家想一下当我们买了一个东西的时候,最初我们不知道这个东西是怎么用的?那么我们一般都会去看一下它的说明书,或者直接去网上搜索一些这个产品的资料,对吧。那么这个时候如果它的说明书写的不清不楚,甚至有些地方写的根本就不对。那么你如果想要把这个东西使用熟练,是不是要花费特别大的精力。也就是我们开发者常说的,这个框架拥有了过高的学习成本,或者说这个框架学习曲线过于陡峭,不够平滑。那么这样的话无疑会劝退一部分用户。对吧。

? 所以说如果一个框架如果想要被开发者广为接受,那么一个清晰的文档肯定是首要的条件。那么对于 Element-UI 来说,它的一个文档就比较清晰。在组件部分,从安装 Element-UI 到各个组件的效果描述的都是非常清楚的,每一步应该如何做,这样做会产生什么样的结果都在文档上描述的很清楚。这个就是一个清晰的产品文档。

? 第二条:产品的功能对于用户来说足够简单。这一条也好理解。对于我们开发者来说,当我们使用一个框架的时候,我们想要的是什么?我们想要一个框架:你的功能要足够的复杂,但是你的接口要足够的简单。什么意思呢?大家可以参照一下自己的手机。现在智能手机的功能已经非常复杂了。可以打电话,可以玩游戏,可以看电影。但是一旦你熟悉了它之后,它使用起来确实非常简单的。你不会去关心它的功能是如何实现的,你关心的只是是否可以通过简单的操作来完成复杂的功能。就是这个道理放到我们开发者身上也一样。我不关心你组件封装的如何复杂,我所关心的只是你暴露出来的接口。

? 第三条:产品的 UI 对于用户来说足够友好。这一点是什么意思呢?其实这一点主要是对于产品经理和设计师来说的。大家有过开发经验的同学,特别是有过在公司工作过的同学。应该很清楚,你的项目最终开发出来帐什么样子,不是你决定的。是产品经理和设计师来决定的。那设计项目的 UI 他们的依据是什么呢?他们会依据产品的特性、产品的定位等等,但是绝大部分的 UI 依据都是目前用户的一个普遍审美。

? 大家有没有发现对于现在的 APP 、网页甚至手机来说,他们的 UI 同质化非常严重吗?差不多都是一个风格的,对吧。出现这个问题的原因就是因为大众的一个审美会定位到同一块区间,而设计根据大众的审美来定位产品的样式,所以才会出现这种同质化的问题。

? 那么这个和我们开发者有什么关系呢?大家想一下,如果一个 UI 库它能够符合大众的普遍审美,并且提供了一种良好的交互体验,那么如果你是设计师的话,你会不会参照或者直接使用 UI 库所提供的样式。因为对于这种 UI 库来说,它的样式会比大部分的设计做出来的样式还要好。

? 那么对于我们开发者来说,当你拿到设计稿的时候,你发现设计稿上的样式和 Element-UI 一样,你是不是到 Element-UI 上直接拿过来用就可以了呀。

? 并且对于 Element-UI 它额外还提供了 自定义主题 和 国际化的功能。这些具体怎么做,文档说的很详细,我们就不展开说了。

? 那么总结一下 Element-UI 。

1. Element-UI 是现在基于 Vue 的一个非常好用的桌面端 UI 组件库
2. 支持 @vue/cli 项目的直接添加,支持按需导入、国际化、支持自定义主题
3. 文档清晰,学习成本低
4. 提供的组件足够使用
5. UI 的风格符合目前大众的普遍审美
6. 如果你想要做一个公司级别的产品,那么 Element-UI 基本可以满足需求,但是难免样式、风格上会同质化严重


但是如果你想要弄一个自己的网站、自己的项目,并且希望在样式上,不喜欢那么同质化,应该怎么呢?这个时候,你可以参考下,另外一个 UI 库,就是 vuetify。

vuetify

开发团队:麻省理工学院开源项目

官网:https://vuetifyjs.com/zh-Hans/

github( star:24.1k ):https://github.com/vuetifyjs/vuetify

特性:

? vuetify 是麻省理工学院的开源项目,文档同样支持全球化,它是基于 Android Material Design 风格的一个 vue 前端组件库。同样支持 @vue/cli 项目的直接添加。

? 不过 vuetify 的 Material Design 风格在国内并不是很大众, Material Design 是由Google开发的设计语言,第一次公开使用应该是在 Android 5.0 上面,但是在国内这种样式风格一直推行的效果不好。在国外这种风格被接受的程度还可以,但是国内你会发现很少见。

? 这样就导致这种设计风格不会存在大量同质化的问题。同样的如果你使用了这种风格的话,也必须要承担一定的风险。所以对于公司级项目来说,如果使用了 vuefity 的话,那么无形中就会为产品增加一些风险。不过如果你是要做一个自己的项目,并且希望你的项目拥有一些自己的个性,那么 vuetify 无疑是一个很好的选择。

? 对于 vuetify 本身的一个功能层面上,它的文档、它的组件都可以完全满足我们的一个日常使用,比如,在它的 UI 组件里面,我们常用到的这些组件都是比较全的。

? 另外它还提供了一些扩展的指令,这些指令是在 vue 的基础上做的一些扩展,可以满足一些特定的需求。

? 总的来说,vuetify 上手的难度会比 elementUI 要高一些,主要是因为国外的人的思维和国内的人还是有一些不同,所以这就导致了 vuetify 对于国内来说会难免有一些水土不服,而产生两个极端,也就是所谓的:喜欢他它的人很喜欢,讨厌它的人很讨厌。

? 总结一下 vuetify:

1. vuetify 是国外团队进行开发的一个基于 vue 的组件库
2. 支持 @vue/cli 项目的直接添加,支持按需导入、国际化、提供了定制功能(样式、颜色、主题等等)
3. 文档相对清晰,但是和国人的思维不太一样,导致学习成本相对高一些
4. 提供的组件足够使用,并且提供了 v- 开头的扩展指令,还有付费专题模块
5. UI 的风格使用的是 Google 推出的 Material Design 的设计风格,在国内推广度相对低一些
6. 使用 vuetify 在 UI 样式上,会有一些额外的风险,但是可以避免同质化的问题,比较适合一些个人或者需要彰显个性的项目


介绍了两个都是基于 vue 的 UI 库。那么下面我们来看一下基于(常用于) React 的 UI 库。

Ant Design

开发团队:蚂蚁金服体验技术部

官网:https://ant.design/index-cn

github( star:57.6k ):https://github.com/ant-design/ant-design/

特性:

Ant Design 被官方定义为一种设计体系,不过设计体系这种高雅的东西,对咱们这些俗人应该认知不大,我们所认知最明确的,就是这个东西能为我们的开发带来什么帮助。所以我们下面就把它当作一个 UI 库来看。

Ant Design 在 react 中的地位,应该和 element UI 在 vue 中的地位是一样的,都可以说是最火爆的 UI 库之一。

Ant Design 同时支持 React、Vue、Angular,也就是说我们在这三个主流框架中都可以使用,但是 Ant Design 对于React 的支持是最好的,所以一般我们说到 Ant Design ,都会说他是一个基于 React UI 的一个组件库。

? Ant Design 是阿里巴巴-蚂蚁金服体验技术部所设计的一个 UI 库,目前最新的是 4.x 的版本,我们看它的主页,就能够感觉出来,一个整体的设计风格是非常赞的。

? 同样,像国际化、定制主题的这些功能,Ant Design 也同样是支持的,这个没得说,具体怎么做,大家看文档。

? Ant Design 的文档也非常的详细,无论到快速上手,到各个组件的使用,都有非常详细的文档。

? 另外非常值得一提的就是关于 Ant Design 的社区,它的社区中提供了非常多的精品组件和一些开发中常用的一些工具推荐,这一点是 ElementUI 上所没有的,可以说它的社区是真的很用心的在做的。

? 对于 Ant Design 来说,如果把它作为 React 项目的一个核心 UI 库的话,那么它是完全可以胜任的,没有一点问题。并且无论是它的开发团队也好,它的一个社区也好,都可以很好的保证该库的一个正常的升级和迭代。

? 总结一下 Ant Design:

1. Ant Design 是阿里巴巴-蚂蚁金服体验技术部所设计的一个 UI 库,一般用于基于 React 的项目
2. 支持在 create-react-app(React 官方脚手架) 项目的直接添加,支持按需导入、国际化、提供了定制主题
3. 文档清晰,学习成本低
4. 提供的组件足够使用,并且提供了精品社区服务
5. UI 的风格符合目前大众的普遍审美
6. 如果你想要做一个公司级别的产品,那么 Ant Design 基本可以满足需求,但是难免样式、风格上会同质化严重


上面说的都是一些对于现阶段,也就是 web 3.0 阶段的 UI 库,然后我们来看两个适用于 web 2.0 阶段的 UI 库。

Bootstrap

开发团队:Twitter

官网:https://www.bootcss.com/

github( star:139k ):https://getbootstrap.com/

特性:

? Bootstrap 前端的同学应该没有不知道。在之前的 web 2.0 阶段,可以说是大名鼎鼎了。我们这里提到了 web 3.0 和 web 2.0 ,那么给大家解释一下。

? 整个前端开发的历史,我把它分成了三个阶段,web 1.0 、web 2.0 和 web 3.0。

? 对于 web 1.0 来说, 指的就是 html、css、js的那个阶段,整个前端的交互还都是以一种原生的方式进行展示,这个时候还没有前端工程师的概念,或者说这个概念很稀薄,大部分的前端工作都是由后端的工程师来兼职进行开发的。

? 而 web 2.0 阶段,最大的标志就是 jQuery、bootstrap、还有各种模板引擎的库开始出现,这个时候开始逐渐有了前端开发工程师的岗位,但是前端依然不够兴盛,因为虽然这些新出现的东西使前端的开发有了一些壁垒,但是这种壁垒明显不够坚固,并且这些库并没有带来太大的本质上的变化,更多的是一种增强。

? 而 web 3.0 阶段,最大的标志就是 angular、react、vue 的出现。从最初 google 推出了 angular 1, angular 1 一出现,确实可以说是惊艳。他把之前零零碎碎的内容,比如数据驱动,比如模板语法,比如模块化的东西进行了整合,变成了一个大一统的框架。但是因为 angular 1 属于一个最初的尝试,所以在设计上还有很多不完善的地方,这就导致了 angular 2的变化过大,成了一个断层,就引起了很多人的不满。

? 而这个时候 react、vue 也开始逐渐崛起,从 angular 手中抢走了大量的开发者。而 react、vue 所推崇的这种渐进式框架的方案,明显更被开发者所接受,所以就导致现在 react 和 vue 的开发者基数要远远的大于 angular了。不过就算是这样,没有人可以否认 angular 所带来的贡献。

? angular、react、vue 完全提高了前端的壁垒,随之也逐渐出现了很多的周边库,比如 前端路由库、全局状态管理工具、webpack 这种大一统的前端打包工具。

? 这些内容的出现,就导致了前端的学习成本变得越来越高,也就使得前端的壁垒变得越来越坚固。

? 再加上用户对于体验的要求越来越高,后端工程师对此逐渐开始无力,这就导致前端工程师开始出现,前后端的项目分离变成了现在的正统,大家各司其事,后端的工程师主要做后端的内容,前端工程师主要做前端的内容。

? 这就是整个前端的一个大概的发展历史,而对于 bootstrap 来说,他在 web 2.0 的时候,是顶顶大名的。使用它来开发的项目不计其数啊,主要原因就是因为它足够简单、易用,并且它的一个设计风格在当时相当超前的。

? 不过在现在的阶段,bootstrap 已经开始被使用的越来越少了,哪怕是推出了 bootstrap vue 这种拥抱现阶段的库,也只能说是表现平平。

? 但是对于 bootstrao 来说,它就完全没有价值了吗?不是的。如果你的项目需要兼容到 IE8,那么你就没有办法使用之前咱们提到的那些 UI 库,这个时候, bootstrap 这种纯 css 的库,会给你带来很大的帮助。关于 bootstrap,大家应该都会比较熟悉了,我们就不详细说了。

? 总结一下 bootstrap:

1. Bootstrap 是 Twitter 所设计的一个 UI 库,以 css 样式为主,也提供了一些组件的功能需要配合 js 来进行使用
2. 使用简单,文档清晰,学习成本低
3. 提供的组件相对较少
4. 可以只使用框架中的 css 样式,可嵌入性较高
5. UI 的风格符合目前大众的普遍审美
6. 适合使用在对
游览器兼容性有要求的项目中


除了 bootstrap 之外,另外一个 web 2.0 阶段的 UI 库就是 layui 。

layui

开发团队:自由职业者(贤心)

官网:https://www.layui.com/

github( star:21.1k ):https://github.com/sentsin/layui/

特性:

? layui 是自由职业者(贤心)进行开发的一个前端库,最低可以兼容到 IE8 ,官网介绍它是一个更加适合服务端工程师来开发前端页面的库,但是对于前端工程师来说,如果你的项目要兼容到 IE8 的话,那么使用 layui 也是一个很好的选择。

? layui 的主要内容被分成了两个大的部分,1.页面元素。 2.内置模块

? 对于页面元素来说,主要就是一些 css 的样式,也就是一些定义好的 css 样式类,这一点和 bootstrap 很像。

? 对于内置模块来说,是 layui 比较推崇的一个概念。比如按需引入的模块化。当然这个概念对于现在的前端开发来说,已经变成了一个普遍的功能点了。比如我们前面说到的 Element-UI、vuetify、And Design 都拥有这个功能。 但是在 web 2.0 阶段的时候,这个模块化的功能还是比较先进的。

? 至于 layui 中所涉及到的样式部分,按照现在的一个审美来说依然是不过时的,所以说对于现在来说,如果你对前端的技术了解的并不深,或者说你是一个服务端工程师,那么想要开发一个前端页面的话,layui 依然是一个比较好的选择。

? 总结下 layui:

1. layui 是 自由职业者(贤心)进行开发的一个前端库,最低可以兼容到 IE8
2. 设置的初衷是让非前端的工程师可以很方便的开发前端页面
3. 使用简单,文档清晰,学习成本低
4. 提供页面元素和模块化的概念
5. UI 的风格并不过时
6. 适合非专业前端工程师使用


之前看了很多桌面端的组件库了,那么下面我们来看几个移动端的 UI 组件库。

Vant-UI

开发团队:有赞前端团队

官网:https://youzan.github.io/vant/#/zh-CN/

github( star:12.9k ):https://github.com/youzan/vant

特性:

? Vant-UI 是有赞前端团队开发的一个基于 vue 的移动端组件库。不过对于移动端组件库来说,它和桌面端有非常多的不同。

? 比如说,官方的文档,对于移动端的组件库文档来说,大部分都会把整个项目中所有的组件通过一个类似于手机的UI形式给一次性全部罗列出来。

这个在 PC 端的 UI 库中,大家应该很少见吧。我个人是比较喜欢这种方式的,因为这样它可以让开发者很方便的知道,这个 UI 库它的各个组件的样式效果,是否可以满足个人的需求。

? 还有关于兼容性方面,因为是移动端的组件库,那么它都会运行在手机上,而对于手机来说就不会存在 PC 端浏览器 IE 兼容性的问题了。更多的是关于手机系统版本的问题。咱们就以 Vant-UI 为例,他在浏览器支持这方便介绍说,现代浏览器以及 Android 4.0,IOS 8.0 以上的系统都支持,那么以咱们现在的这个时间点来说,基本上就不会存在兼容性的问题了。

? 还有就是组件的样式风格上,因为对于移动端设备来说,毕竟大小、尺寸、操作方式都不一样,所以在 UI 的一个整体设计风格上,肯定和 PC 端上有很大的不同。

? 然后还有最重要的一点,也是考验移动端组件库的一个非常重要的难点。就是流畅性的问题。这个问题在桌面端组件库上一般不会是一个太大的难点。但是在移动端上面就不太一样了。手机使用的流畅度的问题,在咱们现在依然还是一个大家都非常关注的点,并且对于现在的用户来说,对于移动端流畅度的要求,要更加苛刻,这种苛刻的程度远高于 PC 端。所以说如果你开发了一个 web app 或者 web 端网页的话,如果很卡,那么无论你的 UI 样式做的再好,估计也会大大减分的。

? 所以说对于一个移动端的 UI 库来说,它如果要做好其实要比 PC 端的组件库难度更大上一些。而 Vant-UI 在基于 Vue 的移动端组件库中,各方面都是非常不错的。无论是文档、组件的丰富性、易用性上,我个人都比较喜欢。

? 另外对于 Vant-UI 来说他还提供了几个非常有意思的组件,我们来看一下。

? 大家打开 Vant-UI的官网,在业务组件部分,它提供了一些目前商城类系统所常用到的业务模块。比如商品规格,像这种拥有相对固式样式的业务,它提供了成套的业务组件,并且这些业务组件,我们也可以使用 Vue 中的 插槽 功能去进行一些定制这个我觉得是非常非常好的一个功能。

? 总结一下 Vant-UI:

1. Vant-UI 是有赞前端团队所设计的一个 UI 库,一般用于基于 Vue 的移动端项目
2. 支持 @vue/cli 项目的直接添加,支持按需导入、国际化、提供了定制功能(样式、颜色、主题等等)
3. 文档清晰,学习成本低
4. 提供的组件足够使用,性能不错,并且提供了基于商城业务的成套组件
5. UI 的风格以及交互操作可以达到现在的主流标准
6. 适用于 web app 或者 基于移动端的网页开发


然后我们来看另外一个移动端组件库

Framework7

开发团队:独立开发者(github名:Vladimir Kharlampidi)

官网:http://www.framework7.cn/

github( star:15.3k ):https://github.com/framework7io/framework7/

特性:

? Framework7 是独立开发者开源的一个全功能框架。可以用来构建 IOS、Android和桌面应用程序。注意我们这里说的是框架,不再是一个简单的 UI 组件库了。

? 由组件库变成了框架,那么显然带来的问题就是复杂度直线上升了。但是复杂度上升的同时,它能够给我们带来的东西也完全不一样了。打开官网,我们一起来看一下。

? 打开官网,首先我们能看到它的一个功能演示。我们主要看 IOS 和 android 这两个部分。

? Framework7 针对 IOS 和 Android 的不同风格提供了不同的展示样式。对于 IOS 是标准的苹果风。对于 Android 则提供了基于 Material Design 的一种设计风格。并且 Framework7 提供了一种很牛的功能,这个功能是其他的 UI 组件库所没有的,那就是基于移动端不同页面的一个过场动画。

? 对于 Framework7 因为它是一个框架,所以说它不需要再依赖于向 vue、react 这种其他的框架,它本身就可以完整的去开发一个项目。同时如果你想要基于 vue 或者 react 来配合 Fragment7 使用的话,那么也是可以的。Fragment7 同时也提供了 Framework7 Vue 和 Framework7 React 这两个框架。

? 另外对于 Framework7 提供了很多新的概念,比如 Framework7 CLI 、DOM 7 等等,咱们再这里就不在详细说了。

? 总结一下 Framework7 :

1. Framework7 是独立开发者所设计的一个全功能框架。可以用来构建 IOS、Android和桌面应用程序。
2. 本身是一个独立的框架,同时也可以配合 vue 和 react 来使用。整体比较重
3. 文档汉化不是很好,具有一定的学习成本。
4. 提供的功能组件、交互视图足够强大,并且也有很多新的概念,性能优秀。
5. UI 的风格以及交互操作可以达到原生 APP 95%的体验
6. 适用于没有资深前端开发工程师的公司使用。


最后我们来看一个由 微信团队开发的 weui

WEUI

开发团队:微信官方团队

官网:https://weui.io/

github( star:24.2k ):https://github.com/Tencent/weui

特性:

? weui 是微信官方团队开发的一套同微信原生视觉体验一致的基础样式库。提供了一些组件和样式的简单使用。主要应用于微信内部网页和微信小程序。

? 对于 weui 的文档没有放到官网上,而是在 guthub 中。这个大家注意下,别找不到文档就可以。不过微信的文档是相对比较乱的,并且有一些示例代码的地址已经打不开了(2020-03 时测试)。这就导致大家如果想要学习 weui 的使用,那么只能从 github 上下载一下实例代码来学习了。

? weui 的话我们不做过多介绍,简单总结下:

1. weui 是微信官方团队开发的一套同微信原生视觉体验一致的基础样式库。
2. 因为只应对微信内部网页和微信小程序,所以所提供的功能相对简单。
3. 文档稍微乱一些。
4. 提供的功能组件有限,主要还是应对场景的问题。
5. UI 的风格同微信原生视觉体验一致
6. 适用微信内部网页和微信小程序。


合理的运用 UI库 , 可以大大的提升我们的开发效率,并且保证我们的项目设计维持在一个平均水平之上。

但是合理的使用,并不代表着完全依赖,UI 库 可以帮助我们解决设计上 80% 的问题,但是 UI 库也会给我们带来一些限制,比如风格上和设计上。

所以我们大家需要合理的看待 UI 库的存在。

作者:LGD_Sunday