前端与后端的羁绊
前言
前后端分离已成为互联网项目开发的业界标准使用方式,通过 nginx+tomcat 的方式(也可以中间加一个 nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS 等等)打下坚实的基础。这个步骤是系统架构从猿进化成人的必经之路。
核心思想是前端 html 页面通过 ajax 调用后端的 restuful api 接口并使用 json 数据进行交互。
名词解释:
在互联网架构中,
web 服务器:一般指像 nginx,apache 这类的服务器,他们一般只能解析静态资源。
应用服务器:一般指像 tomcat,jetty,resin 这类的服务器可以解析动态资源也可以解析静态资源,但解析静态资源的能力没有 web 服务器好。
一般都是只有 web 服务器才能被外网访问,应用服务器只能内网访问。
开发模式
以前老的方式是:
1.产品经历/领导/客户提出需求
2.UI 做出设计图 3.前端工程师做 html 页面 4.后端工程师将 html 页面套成 jsp 页面(前后端强依赖,后端必须要等前端的 html 做好才能套 jsp。如果 html 发生变更,就更痛了,开发效率低) 5.集成出现问题 6.前端返工 7.后端返工 8.二次集成 9.集成成功 10.交付
新的方式是:
1.产品经历/领导/客户提出需求
2.UI 做出设计图 3.前后端约定接口&数据&参数 4.前后端并行开发(无强依赖,可前后端并行开发,如果需求变更,只要接口&参数不变,就不用两边都修改代码,开发效率高) 5.前后端集成 6.前端页面调整 7.集成成功 8.交付
请求方式
以前老的方式是:
1.客户端请求 2.服务端的 servlet 或 controller 接收请求(后端控制路由与渲染页面,整个项目开发的权重大部分在后端) 3.调用 service,dao 代码完成业务逻辑 4.返回 jsp
5.jsp 展现一些动态的代码
新的方式是:
1.浏览器发送请求 2.直接到达 html 页面(前端控制路由与渲染页面,整个项目开发的权重前移)
3.html 页面负责调用服务端接口产生数据(通过 ajax 等等,后台返回 json 格式数据,json 数据格式因为简洁高效而取代 xml) 4.填充 html,展现动态效果,在页面上进行解析并操作 DOM。
(有兴趣的童鞋可以访问一下阿里巴巴等大型网站,然后按一下 F12,监控一下你刷新一次页面,他的 http 是怎么玩的,大多数都是单独请求后台数据,
使用 json 传输数据,而不是一个大而全的 http 请求把整个页面包括动+静全部返回过来)
总结一下新的方式的请求步骤:
大量并发浏览器请求—>web 服务器集群(nginx)—>应用服务器集群(tomcat)—>文件/数据库/缓存/消息队列服务器集群
同时又可以玩分模块,还可以按业务拆成一个个的小集群,为后面的架构升级做准备。
前后分离的优势
1.可以实现真正的前后端解耦,前端服务器使用 nginx。
前端/WEB 服务器放的是 css,js,图片等等一系列静态资源(甚至你还可以 css,js,图片等资源放到特定的文件服务器,例如阿里云的 oss,并使用 cdn 加速),前端服务器负责控制页面引用&跳转&路由,前端页面异步调用后端的接口,后端/应用服务器使用 tomcat(把 tomcat 想象成一个数据提供者),加快整体响应速度。
(这里需要使用一些前端工程化的框架比如 nodejs,react,router,react,redux,webpack) 2.发现 bug,可以快速定位是谁的问题,不会出现互相踢皮球的现象。
页面逻辑,跳转错误,浏览器兼容性问题,脚本错误,页面样式等问题,全部由前端工程师来负责。
接口数据出错,数据没有提交成功,应答超时等问题,全部由后端工程师来解决。
双方互不干扰,前端与后端是相亲相爱的一家人。 3.在大并发情况下,我可以同时水平扩展前后端服务器,比如淘宝的一个首页就需要 2000+台前端服务器做集群来抗住日均多少亿+的日均 pv。
(去参加阿里的技术峰会,听他们说他们的 web 容器都是自己写的,就算他单实例抗 10 万 http 并发,2000 台是 2 亿 http 并发,并且他们还可以根据预知洪峰来无限拓展,很恐怖,就一个首页。。。) 4.减少后端服务器的并发/负载压力
除了接口以外的其他所有 http 请求全部转移到前端 nginx 上,接口的请求调用 tomcat,参考 nginx 反向代理 tomcat。
且除了第一次页面请求外,浏览器会大量调用本地缓存。 5.即使后端服务暂时超时或者宕机了,前端页面也会正常访问,只不过数据刷不出来而已。 6.也许你也需要有微信相关的轻应用,那样你的接口完全可以共用,如果也有 app 相关的服务,
那么只要通过一些代码重构,也可以大量复用接口,提升效率。(多端应用) 7.页面显示的东西再多也不怕,因为是异步加载。
8.nginx 支持页面热部署,不用重启服务器,前端升级更无缝。 9.增加代码的维护性&易读性(前后端耦在一起的代码读起来相当费劲)。 10.提升开发效率,因为可以前后端并行开发,而不是像以前的强依赖。 11.在 nginx 中部署证书,外网使用 https 访问,并且只开放 443 和 80 端口,其他端口一律关闭(防止黑客端口扫描),
内网使用 http,性能和安全都有保障。 12.前端大量的组件代码得以复用,组件化,提升开发效率,抽出来!
注意事项
1.在开需求会议的时候,前后端工程师必须全部参加,并且需要制定好接口文档,后端工程师要写好测试用例(2 个维度),不要让前端工程师充当你的专职测试,
推荐使用 chrome 的插件 postman 或 soapui 或 jmeter,service 层的测试用例拿 junit 写。ps:前端也可以玩单元测试吗?
2.上述的接口并不是 java 里的 interface,说白了调用接口就是调用你 controler 里的方法。
3.加重了前端团队的工作量,减轻了后端团队的工作量,提高了性能和可扩展性。
4.我们需要一些前端的框架来解决类似于页面嵌套,分页,页面跳转控制等功能。(上面提到的那些前端框架)。
5.如果你的项目很小,或者是一个单纯的内网项目,那你大可放心,不用任何架构而言,但是如果你的项目是外网项目,呵呵哒。
6.以前还有人在使用类似于 velocity/freemarker 等模板框架来生成静态页面,仁者见仁智者见智。
7.这篇文章主要的目的是说 jsp 在大型外网 java web 项目中被淘汰掉,可没说 jsp 可以完全不学,对于一些学生朋友来说,jsp/servlet 等相关的 java web 基础还是要掌握牢的,不然你以为 springmvc 这种框架是基于什么来写的?
8.如果页面上有一些权限等等相关的校验,那么这些相关的数据也可以通过 ajax 从接口里拿。
9.对于既可以前端做也可以后端做的逻辑,我建议是放到前端,为什么?
因为你的逻辑需要计算资源进行计算,如果放到后端去 run 逻辑,则会消耗带宽&内存&cpu 等等计算资源,你要记住一点就是
服务端的计算资源是有限的,而如果放到前端,使用的是客户端的计算资源,这样你的服务端负载就会下降(高并发场景)。
类似于数据校验这种,前后端都需要做!
10.前端需要有机制应对后端请求超时以及后端服务宕机的情况,友好的展示给用户。
扩展阅读
1.其实对于 js,css,图片这类的静态资源可以考虑放到类似于阿里云的 oss 这类文件服务器上(如果是普通的服务器&操作系统,存储在到达 pb 级的文件后,或者单个文件夹内的文件数量达到 3-5 万,
io 会有很严重的性能问题),
再在 oss 上配 cdn(全国子节点加速),这样你页面打开的速度像飞一样, 无论你在全国的哪个地方,并且你的 nginx 的负载会进一步降低。
2.如果你要玩轻量级微服务架构,要使用 nodejs 做网关,用 nodejs 的好处还有利于 seo 优化,因为 nginx 只是向浏览器返回页面静态资源,而国内的搜索引擎爬虫只会抓取静态数据,不会解析页面中的 js,
这使得应用得不到良好的搜索引擎支持。同时因为 nginx 不会进行页面的组装渲染,需要把静态页面返回到浏览器,然后完成渲染工作,这加重了浏览器的渲染负担。
浏览器发起的请求经过 nginx 进行分发,URL 请求统一分发到 nodejs,在 nodejs 中进行页面组装渲染;API 请求则直接发送到后端服务器,完成响应。
3.如果遇到跨域问题,spring4 的 CORS 可以完美解决,但一般使用 nginx 反向代理都不会有跨域问题,除非你把前端服务和后端服务分成两个域名。
JSONP 的方式也被淘汰掉了。
4.如果想玩多端应用,注意要去掉 tomcat 原生的 session 机制,要使用 token 机制,使用缓存(因为是分布式系统),做单点,对于 token 机制的安全性问题,可以搜一下 jwt。
5.前端项目中可以加入 mock 测试(构造虚拟测试对象来模拟后端,可以独立开发和测试),后端需要有详细的测试用例,保证服务的可用性与稳定性。
总结
前后端分离并非仅仅只是一种开发模式,而是一种架构模式(前后端分离架构)。
千万不要以为只有在撸代码的时候把前端和后端分开就是前后端分离了。需要区分前后端项目前端项目与后端项目是两个项目,放在两个不同的服务器,需要独立部署,两个不同的工程,两个不同的代码库,不同的开发人员。前后端工程师需要约定交互接口,实现并行开发,开发结束后需要进行独立部署,前端通过 ajax 来调用 http 请求调用后端的 restful api。前端只需要关注页面的样式与动态数据的解析&渲染,而后端专注于具体业务逻辑
开发人员分离
以前的 JavaWeb 项目大多数都是 java 程序员又当爹又当妈,又搞前端(ajax/jquery/js/html/css 等等),又搞后端(java/mysql/oracle 等等)。
随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只管前端的事情,后端工程师只管后端的事情。
正所谓术业有专攻,一个人如果什么都会,那么他毕竟什么都不精。
大中型公司需要专业人才,小公司需要全才,但是对于个人职业发展来说,我建议是分开。
对于后端 java 工程师:
把精力放在 java 基础,设计模式,jvm 原理,spring+springmvc 原理及源码,linux,mysql 事务隔离与锁机制,mongodb,http/tcp,多线程,分布式架构(dubbo,dubbox,spring cloud),弹性计算架构,微服务架构(springboot+zookeeper+docker+jenkins),java 性能优化,以及相关的项目管理等等。
后端追求的是:三高(高并发,高可用,高性能),安全,存储,业务等等。
对于前端工程师:
把精力放在 html5,css3,jquery,angularjs,bootstrap,reactjs,vuejs,webpack,less/sass,gulp,nodejs,Google V8 引擎,javascript 多线程,模块化,面向切面编程,设计模式,浏览器兼容性,性能优化等等。
前端追求的是:页面表现,速度流畅,兼容性,用户体验等等。
术业有专攻,这样你的核心竞争力才会越来越高,正所谓你往生活中投入什么,生活就会反馈给你什么。
并且两端的发展都越来越高深,你想什么都会,那你毕竟什么都不精。
通过将 team 分成前后端 team,让两边的工程师更加专注各自的领域,独立治理,然后构建出一个全栈式的精益求精的 team。
各种耦合
几曾何时,我们的 JavaWeb 项目都是使用了若干后台框架,springmvc/struts + spring + spring jdbc/hibernate/mybatis 等等。
大多数项目在 java 后端都是分了三层,控制层(controller/action),业务层(service/manage),持久层(dao)。
控制层负责接收参数,调用相关业务层,封装数据,以及路由&渲染到 jsp 页面。
然后 jsp 页面上使用各种标签(jstl/el/struts 标签等)或者手写 java 表达式(<%=%>)将后台的数据展现出来,玩的是 MVC 那套思路。
我们先看这种情况:需求定完了,代码写完了,测试测完了,然后呢?要发布了吧?
你需要用 maven 或者 eclipse 等工具把你的代码打成一个 war 包,然后把这个 war 包发布到你的生产环境下的 web 容器(tomcat/jboss/weblogic/websphere/jetty/resin)里,对吧?
发布完了之后,你要启动你的 web 容器,开始提供服务,这时候你通过配置域名,dns 等等相关,你的网站就可以访问了(假设你是个网站)。
那我们来看,你的前后端代码是不是全都在那个 war 包里?包括你的 js,css,图片,各种第三方的库,对吧?
好,下面在浏览器中输入你的网站域名(www.xxx.com),之后发生了什么?(这个问题也是很多公司的面试题)
我捡干的说了啊,基础不好的童鞋请自己去搜。
浏览器在通过域名通过 dns 服务器找到你的服务器外网 ip,将 http 请求发送到你的服务器,在 tcp3 次握手之后(http 下面是 tcp/ip),通过 tcp 协议开始传输数据,你的服务器得到请求后,开始提供服务,接收参数,之后返回你的应答给浏览器,浏览器再通过 content-type 来解析你返回的内容,呈现给用户。
那么我们来看,我们先假设你的首页中有 100 张图片,此时,用户的看似一次 http 请求,其实并不是一次,用户在第一次访问的时候,浏览器中不会有缓存,你的 100 张图片,浏览器要连着请求 100 次 http 请求(有人会跟我说 http 长连短连的问题,不在这里讨论),你的服务器接收这些请求,都需要耗费内存去创建 socket 来玩 tcp 传输(消耗你服务器上的计算资源)。
重点来了,这样的话,你的服务器的压力会非常大,因为页面中的所有请求都是只请求到你这台服务器上,如果 1 个人还好,如果 10000 个人并发访问呢(先不聊服务器集群,这里就说是单实例服务器),那你的服务器能扛住多少个 tcp 连接?你的带宽有多大?你的服务器的内存有多大?你的硬盘是高性能的吗?你能抗住多少 IO?你给 web 服务器分的内存有多大?会不会宕机?
这就是为什么,越是大中型的 web 应用,他们越是要解耦。
理论上你可以把你的数据库+应用服务+消息队列+缓存+用户上传的文件+日志+等等都扔在一台服务器上,你也不用玩什么服务治理,也不用做什么性能监控,什么报警机制等等,就乱成一锅粥好了。
但是这样就好像是你把鸡蛋都放在一个篮子里,隐患非常大。如果因为一个子应用的内存不稳定导致整个服务器内存溢出而 hung 住,那你的整个网站就挂掉了。
如果出意外挂掉,而恰好这时你们的业务又处于井喷式发展高峰期,那么恭喜你,业务成功被技术卡住,很可能会流失大量用户,后果不堪设想。
注意:技术一定是要走在业务前面的,否则你将错过最佳的发展期哟,亲~
此外,你的应用全部都耦合在一起,相当于一个巨石,当服务端负载能力不足时,一般会使用负载均衡的方式,将服务器做成集群,这样其实你是在水平扩展一块块巨石,性能加速度会越来越低,
要知道,本身负载就低的功能 or 模块是没有必要水平扩展的,在本文中的例子就是你的性能瓶颈不在前端,那干嘛要水平扩展前端呢???
还有发版部署上线的时候,我明明只改了后端的代码,为什么要前端也跟着发布呢???(引用:《架构探险-轻量级微服务架构》,黄勇)
正常的互联网架构,是都要拆开的,你的 web 服务器集群,你的应用服务器集群+文件服务器集群+数据库服务器集群+消息队列集群+缓存集群等等。
来说说 jsp
JSP 的痛点
以前的 javaWeb 项目大多数使用 jsp 作为页面层展示数据给用户,因为流量不高,因此也没有那么苛刻的性能要求,但现在是大数据时代,对于互联网项目的性能要求是越来越高,
因此原始的前后端耦合在一起的架构模式已经逐渐不能满足我们,因此我们需要需找一种解耦的方式,来大幅度提升我们的负载能力。
1.动态资源和静态资源全部耦合在一起,服务器压力大,因为服务器会收到各种 http 请求,例如 css 的 http 请求,js 的,图片的等等。
一旦服务器出现状况,前后台一起玩完,用户体验极差。
2.UI 出好设计图后,前端工程师只负责将设计图切成 html,需要由 java 工程师来将 html 套成 jsp 页面,出错率较高(因为页面中经常会出现大量的 js 代码),
修改问题时需要双方协同开发,效率低下。
3.jsp 必须要在支持 java 的 web 服务器里运行(例如 tomcat,jetty,resin 等),无法使用 nginx 等(nginx 据说单实例 http 并发高达 5w,这个优势要用上),
性能提不上来。
4.第一次请求 jsp,必须要在 web 服务器中编译成 servlet,第一次运行会较慢。
5.每次请求 jsp 都是访问 servlet 再用输出流输出的 html 页面,效率没有直接使用 html 高(是每次哟,亲~)。
6.jsp 内有较多标签和表达式,前端工程师在修改页面时会捉襟见肘,遇到很多痛点。
7.如果 jsp 中的内容很多,页面响应会很慢,因为是同步加载。
8.需要前端工程师使用 java 的 ide(例如 eclipse),以及需要配置各种后端的开发环境,你们有考虑过前端工程师的感受吗。
基于上述的一些痛点,我们应该把整个项目的开发权重往前移,实现前后端真正的解耦!
其次
1、无法做到动静分离
传统 java 程序通过 war 包形式部署到 tomcat,除了 java 代码和 jsp 页面,还包括 css、js、图片等静态资源,一旦其中的某个 jsp 页面出问题,会导致部分功能不可用,甚至服务器响应阻塞,无法对外提供服务。
2、分工协调性差
jsp 本质上是一个 java 类,所以早期 java 开发人员是前后端开发任务全负责,而 UI 设计师把设计好的 html 页面给开发人员集成,这个需要双方共同协调完成,效率低下,很难完成需求快速更新迭代,持续交付。
3、并发、吞吐量差
由于 jsp 本质是 java 类,只能放在 web 服务器(如 tomcat),所以 jsp 不能部署到并发性能更好的 nginx 或者 apache 下,这是很多人诟病 java web 性能不好的原因之一。
4、扩展性差
jstl 内置的一些 tag 标签耦合 java 代码(类似于 react 中的 component 组件),很难做到只修改页面而不用修改 java 代码,扩展性很差。
5、页面加载慢(同步机制)
如果一个页面承载的内容很多(如表单、表格、详情),会导致页面加载很慢。究其原因是 jsp 内在特性决定的。
首先,jsp 页面会初始化为 servlet 的 class 文件
其次,在 servlet 代码中解析 jsp tag 标签,转换成 html 网页标签
最后,以流的方式输出 html 网页
这里有个要命的问题,从 jsp 转换成 html 到浏览器渲染是一个同步过程。也就是说,如果数据加载很慢,会导致整个页面出不来。
前端较全技术汇总
IDE 集
VSCode:https://code.visualstudio.com/
SublimeText:https://www.sublimetext.com/
WebStorm:https://www.jetbrains.com/webstorm/
Atom:https://atom.io/
Hbuilderx/Hbuilder:https://www.dcloud.io/hbuilderx.html
微信开发者工具(小程序开发)
QQ 开发者工具(小程序开发)
支付宝开发者工具(小程序开发)
hbuilderx(小程序开发、网页开发、移动端开发)
构建集
简单易操作的包管理器,前端开发必备。
Yarn:https://yarnpkg.com/zh-Hans/
和 npm 差不多也是简单易操作的包管理器,两者选择其中一个。
Webpack:https://webpack.js.org/
强大的包转换器和打包
Gulp:https://www.gulpjs.com.cn/
Babel:https://babeljs.io/
代码转换器
ESLint:https://cn.eslint.org/
可组装的 JavaScript 和 JSX 检查工具。
PostCSS:https://www.postcss.com.cn/
用 JavaScript 工具和插件转换 CSS 代码的工具
框架集
Vue.js:https://cn.vuejs.org/
Nuxtjs:https://zh.nuxtjs.org
Nuxt.js 是一个基于 Vue.js 的通用应用框架。通过对客户端/服务端基础架构的抽象组织,Nuxt.js 主要关注的是应用的 UI 渲染,简称服务端渲染。
React:https://reactjs.org/
Angular:https://angular.cn/
AngularJS:https://angularjs.org/
Nodejs:https://nodejs.org/zh-cn/
基于 JS 开发的一个性能超过 PHP 的的服务器,这是作为一个前端走向全栈工程师必学的东西。
Express:http://www.expressjs.com.cn/
基于 Node.js 平台,快速、开放、极简的 Web 开发框架。
基于 Node.js 平台的下一代 Web 开发框架。
Egg 继承于 Koa。
Koa 是一个非常优秀的框架,然而对于企业级应用来说,它还比较基础。而 Egg 选择了 Koa 作为其基础框架,在它的模型基础上,进一步对它进行了一些增强。
Electron:https://www.electronjs.cn/
Electron(原名为 Atom Shell)是 GitHub 开发的一个开源 js 框架。它允许使用 Node.js(作为后端)和 Chromium(作为前端)完成桌面 GUI 应用程序的开发。
Nw:https://nwjs.org.cn/
Nwjs 和 Electronjs 都是同一个作者不同地方开发的前者主要由微软维护,而后者由 GitHub 团队维护,但是目前越来越多的人都在使用 Electron。
例如 VS Code 这个客户端软件就是用 Electron 语言写的,而微信开发者工具就是用 Nw 配合 react 配合开发的。
Redux:https://www.redux.org.cn/
Redux 是 JavaScript 状态容器,提供可预测化的状态管理。
ReactNative:https://reactnative.cn/
使用 JavaScript 编写原生移动应用。
WebGL:http://www.hewebgl.com/
主要用于网络游戏开发,是国内较为牛逼的同学开发的。
tensorflow:https://tensorflow.google.cn/
TensorFlow 是一个端到端开源机器学习平台。它拥有一个全面而灵活的生态系统,其中包含各种工具、库和社区资源,可助力研究人员推动先进机器学习技术的发展,并使开发者能够轻松地构建和部署由机器学习提供支持的应用。
多端开发的框架
uniapp:https://uniapp.dcloud.io/
uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到 iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。
Taro 是一套遵循 React 语法规范的 多端开发 解决方案。使用 Taro,我们可以只书写一套代码,再通过 Taro 的编译工具,将源代码分别编译出可以在不同端(微信 / 京东 / 百度 / 支付宝 / 字节跳动 小程序、快应用、H5、React-Native 等)运行的代码。
mpvue:http://mpvue.com/
基于 Vue.js 的小程序开发框架。
kbone: https://developers.weixin.qq.com/miniprogram/dev/extended/kbone/
Kbone 是一个致力于微信小程序和 Web 端同构的解决方案。
一些类库集
jQuery:http://jquery.com/
Zepto.js:https://zeptojs.com/
可以理解成是移动端的 jQuery。
ECharts:https://echarts.baidu.com/
使用 JavaScript 实现的开源可视化库。
tween.js:http://www.createjs.cc/tweenjs/
用来调整和动画 HTML5 和 Javascript 属性,提供了简单并且强大的 tweening 接口。
EaselJS :http://www.createjs.cc/easeljs/
使 HTML5 Canvas 标签变得更简单。用于创建游戏,生成艺术作品,和处理其他高级图形化等有着很友好的体验。
SoundJS:http://www.createjs.cc/soundjs/
提供了简单而强大的 API 来处理音频。通过插件来执行实际的音频实现,简单直接的处理声音。
PreloadJS:http://www.createjs.cc/preloadjs/
用来管理和协调相关资源加载的类库,它可以方便的帮助你预先加载相关资源。
openlayers:https://openlayers.org/
一个高性能的、功能丰富的库,满足您的所有映射需求。使得在任何网页中放置动态地图变得很容易。它可以显示从任何源加载的地图块、矢量数据和标记。开发 OpenLayers 是为了进一步利用各种地理信息。它是完全免费的,开源 JavaScript,在 2 子句 BSD 许可下发布(也称为 FreeBSD)。
数据库
MongoDB:https://www.mongodb.com/
MongoDB 是一个文档数据库,这意味着它将数据存储在类似于 JSON 的文档中。我们认为这是思考数据的最自然的方式,并且比传统的行/列模型更有表现力和更强大的功能。
Mongoose:https://mongoosejs.com/
Mongoose 是一个 MongoDB 的框架便于更好的操作数据库
CSS
Sass 是成熟、稳定、强大的 CSS 扩展语言。入门文档可以看:http://sass.bootcss.com/
Less:http://lesscss.org/
给 CSS 加点料。入门文档可以看:https://less.bootcss.com/
Stylus:http://stylus-lang.com/
UI 框架
Bootstrap:http://www.bootcss.com/
ElementUI:http://element-cn.eleme.io/
基于 Vue.js 的组件库。
iView:https://www.iviewui.com/
一套基于 Vue.js 的高质量 UI 组件库。
VUX:https://vux.li/
一个凑合的 Vue.js 移动端 UI 组件库(由个人维护)
cube-ui:https://didi.github.io/cube-ui/#/zh-CN/docs/introduction
cube-ui 是基于 Vue.js 实现的精致移动端组件库。
Muse-UI:https://muse-ui.org/#/zh-CN
Muse UI 基于 Vue2.0 开发,Vue2.0 是当下最快的前端框架之一,小巧,api 友好,可用于开发的复杂单页应用
vant:https://youzan.github.io/vant/#/zh-CN/
轻量、可靠的移动端 Vue 组件库
Layui:https://www.layui.com/
由职业前端倾情打造,面向全层次的前后端开发者,低门槛开箱即用的前端 UI 解决方案
MUI:https://dev.dcloud.net.cn/mui/
最接近原生 APP 体验的高性能前端框架
Ant Design:https://ant.design
基于 React 的 UI 组件库,主要用于研发企业级中后台产品。官网推出了 Ant Design pro 作为示例,可以看看。
Ant Design Mobile:https://mobile.ant.design/
一个基于 Preact / React / React Native 的 移动端 UI 组件库。
Ant Design of Vue:https://vue.ant.design/docs/vue/introduce-cn/
Ant Design 的 Vue 实现,开发和服务于企业级后台产品。
CDN 加速器
BootCDN: https://www.bootcdn.cn/
稳定、快速、免费的前端开源项目 CDN 加速服务
共收录了 3599 个前端开源项目
调试集
whistle:https://wproxy.org/whistle/
代理抓包工具,很好很强大。
Fiddler:https://www.telerik.com/fiddler
编码规范
Bootstrap 编码规范:https://codeguide.bootcss.com/
es6 编程风格:http://es6.ruanyifeng.com/#docs/style
AirbnbJavascriptStyleGuide:https://github.com/airbnb/javascript
强大的技术学习网站
MDN:https://developer.mozilla.org/zh-CN/docs/Web
w3schools:https://www.quanzhanketang.com/
w3school:https://www.w3school.com.cn
w3cschool:https://www.w3cschool.cn/
开源中国:https://www.oschina.net/project/lang/28/javascript
smashingmagazine:https://www.smashingmagazine.com/
HTML 中文网:http://www.css88.com
爱思资源网:http://www.aseoe.com/
掘金 APP
CSDN 网站及 APP
segmentFauultAPP
字体图标集
Font Awesome:http://www.fontawesome.com.cn/
Iconfont:https://www.iconfont.cn/
icomoon:https://icomoon.io/
EasyIcon:https://www.easyicon.net/
icons8:https://icons8.cn/
IconStore:https://iconstore.co/
iconninja:http://www.iconninja.com/
web 字体
webfont:https://www.webfont.com/onlinefont/index
MOKE 数据
Easy Mock:https://www.easy-mock.com
切图工具
PS
Pxcook(像素大厨):https://www.fancynode.com.cn/pxcook
原型设计工具
Mockplus:直接搜索下载
uxpin:https://www.uxpin.com/
静态站点生成工具集
VuePress:https://www.vuepress.cn/
GitBook:https://www.gitbook.com/
GitHubpage:https://pages.github.com/
API 接口
聚合数据:https://www.juhe.cn/
和风天气:https://www.heweather.com/
讯飞开放平台:https://www.xfyun.cn/
网易云音乐接口:https://binaryify.github.io/NeteaseCloudMusicApi/#/
心知天气:https://www.seniverse.com/
饿了么接口:https://github.com/bailicangdu/node-elm/blob/master/API.md
其他工具
程序员的工具箱:https://tool.lu/
有八十个在线小工具特别强悍,是我较为喜欢的一个。
CanIUse:https://caniuse.com/
浏览器兼容性查询。前端同学必须要知道。
极简大纲笔记、一键生成思维导图。非常好用。
JSON 格式化:http://www.bejson.com/
短链生成:http://www.dh6.ink/
GitHub 短网址:https://git.io/
在线 PS:https://www.photopea.com/
图片在线裁剪:https://www.asqql.com/gifc/
Gif 添加字幕:http://www.yingjingtu.com/
Photoshop 的投影参数转换为 CSS 代码:https://psd2css.mezw.com/
将 Photoshop 设计文件图层中的混合选项参数快速转换为 CSS3 代码,以节省前端开发人员的时间和精力。
Get Emoji:https://emoji.svend.cc/
图片转 Ascii:http://picascii.com/
视频转 GIF:https://github.com/vvo/gifify
OCR 文字识别:https://app.xunjiepdf.com/ocr
学 UI 网:http://www.xueui.cn/design/online-tools
总结
该内容主要收集于网络和平常自己用到的一些工具,如果想学习前端开发的同学,你可以先学习 HTML、CSS 和 JS 基础打牢后,可以学习一些库和框架,前端常用的库、框架、UI 上面都已经贴出,你可以按照该技术栈进行学习而不是漫无目的去晚上找各种资料,学框架啃文档做小 demo 会学的更快更牢。
JAVA 后端常用技术
Spring Framework
Spring 容器
http://projects.spring.io/spring-framework/
SpringMVC
Spring MVC 框架
http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc
Apache Shiro
Spring session
分布式 Session 管理
http://projects.spring.io/spring-session/
MyBatis
ORM 框架
http://www.mybatis.org/mybatis-3/zh/index.html
MyBatis Generator
代码生成
http://www.mybatis.org/generator/index.html
PageHelper
MyBatis 物理分页插件
http://git.oschina.net/free/Mybatis_PageHelper
Druid
数据库连接池
https://github.com/alibaba/druid
FluentValidator
校验框架
https://github.com/neoremind/fluent-validator
Thymeleaf
模板引擎
Velocity
模板引擎
ZooKeeper
分布式协调服务
Dubbo
分布式服务框架 http://dubbo.io/
TBSchedule & elastic-job
分布式调度框架
https://github.com/dangdangdotcom/elastic-job
Redis
分布式缓存数据库 https://redis.io/
Solr & Elasticsearch
分布式全文搜索引擎
http://lucene.apache.org/solr/https://www.elastic.co/
Quartz
作业调度框架 http://www.quartz-scheduler.org/
Ehcache
进程内缓存框架
ActiveMQ
消息队列
JStorm
实时流式计算框架 http://jstorm.io/
FastDFS
分布式文件系统
https://github.com/happyfish100/fastdfs
Log4J
日志组件
http://logging.apache.org/log4j/1.2/
Swagger2
接口测试框架
sequence
分布式高效 ID 生产
http://git.oschina.net/yu120/sequence
AliOSS & Qiniu & QcloudCOS
云存储
https://www.aliyun.com/product/oss/http://www.qiniu.com/https://www.qcloud.com/product/cos
Protobuf & json
数据序列化
https://github.com/google/protobuf
Jenkins
持续集成工具 https://jenkins.io/index.html
Maven
项目构建管理 http://maven.apache.org/