疾风式全栈(11)-客户端总览(草稿)
既然有了服务器的概念,那么与之对应的就叫客户端,其实都是电脑,只是有一些为更多电脑提供服务,就成为服务器,我们平常用电脑,也会开启一些服务,但很多是本地服务(本地这个词译自英文local,翻译的较为生硬,但是现在已经通用了,慢慢适应吧.我刚开始接触电脑时被这个词闹到晕的不行,哪是本地哪是外地啊.计算机术语翻译有很多问题,都是历史遗留下来的,对于学习造成了一定阻碍.希望将来可以重新制定规范的翻译.目前来说,还是学好英语的同时,了解一下这些流行的叫法吧),也就是客户端和服务器端都是在本机上的进程(运行的软件称为进程).一般个人使用的电脑会尽量避免开启公开的服务,否则容易被利用,引起一些安全问题.但是服务器就是一定要打开对外的服务,所以也需要在安全方面做好防范.(安全是一个重要的问题,我们可能不会过多探讨,大家可以根据需要自己学习,在实际工作中总结经验)
所以,我们说的客户端,就是指用户直接使用的软件,客户端可以通过网络,使用服务器端提供的服务.这就是C/S(client和server分别是客户端和服务器的意思)架构.而现在这个词的意思更多时候是专指需要安装的客户端软件.因为随着web的流行,浏览器成为了最重要的客户端,很多软件选择以网页技术在浏览器中运行.这样客户只需要安装标准的浏览器,不需要再单独安装特别的客户端,输入网址即可使用.这种模式被称为B/S(browser是浏览器)架构.
基于web的软件开发非常流行,是目前的主流,但是由于web平台起步较晚,发展历程中也经历不少曲折,开发规范度和性能体验上还是需要更多提升.web的优势在于通用,而且也相对简单,但是正是这种简单性,导致功能不完备和开发的随意.毕竟web的出现本来只是为了在网络上方便的显示文章.后来由于市场需要才成为软件开发平台,HTML5,CSS3,ES6等web应用的基础规范都是在近年才逐渐推出和完善的.很多开发和运行的环境都还在使用更传统的规范,开发过程中有很多痛苦,需要hack技巧,也就是以一些很别扭的方式解决简单的问题.web的前景还是非常美好的,随着规范的逐步完善,浏览器兼容性也不再是大问题,各种新的语法和API为开发提供了方便,随着HTTP2的到来,通信的性能也将提高.web技术这种通用性,对于复杂的客户端环境来说,还是非常宝贵,编写一次代码,在各个支持web的环境下就都可以运行.
所以现在web技术的发展方向是越来越规范和完善的开发环境.一个特征就是不再使用文档风格的换地址,跳转页面,而是更像应用风格的变路径,切换组件,这种模式被称为单页应用.后台只在初次连接时,返回基础的html,css和js文件,作为应用运行的基础,之后跟服务器的交流只是访问数据接口,其他的运算都在前端完成.这就是所谓的前后端分离.而在此之前的PHP,ASP,JSP等技术,都是在服务器端拼装页面和数据,通过跳转地址发送不同的页面到前端的.
单页和前后端分离的模式,让前端页面更像真正的软件,但是由于web技术目前的一些局限(我理解主要是解决首屏加载慢的问题),有时也会在服务器端预先拼装好一部分数据和页面发到前端,但是由于node的流行,可以采用和前端一样的技术在后端拼页面,这就是前后端同构渲染.
而C/S的模式,也可以叫原生客户端开发,有一些积累的成熟的技术和更强的灵活性和性能体验.但是不同的环境需要使用对应的技术,需要面对多个环境话的开发成本较高.
目前的客户端环境主要包括电脑上的windonws,Linux,Mac, 手机和平板的android和iOS.
根据这些条件,现在有一种方案是使用web技术开发,最终通过工具生成本地安装包格式.甚至可以混合使用web技术和原生技术,各取所长.这方面的代表是移动端的React Native, 和电脑端的electron.
编辑器VS code和Atom就是使用这种方式制作,可以在使用中体验.由于模拟web运行环境,会占用较多的系统资源.
而sublime使用原生技术开发,占用内存非常少.而像idea,使用的是java提供的图形界面环境,占用资源更高,性能也一般,从现在的趋势看是属于逐渐边缘化的技术.
我们日常在电脑上下载安装的软件多数是采用原生技术开发的.包括浏览器在内.目前电脑软件原生开发有一个流行的技术叫QT,据说开发效率也很高,基于C++,有兴趣的可以关注一下.现在 的HBuilderX以及WPS都在使用QT开发.
另一种方案是像微信小程序这样的所谓轻应用,在原生环境之上,通过像微信这样的重量级应用搭建出一个运行平台.开发技术一般也仿照web技术实现,但是通过封装提供了类似原生功能的API.微信小程序在目前市场上非常火爆,有一些前端基础的话学习也很容易,建议大家学习了解.对于自己的知识和就业都很有帮助.并且腾讯推广小程序非常用心,甚至以近乎白送的价格提供云服务器环境,加上客服,推广,监控等各种实用的功能,如果有好的项目或创意,通过小程序平台实现自主创业也是很好的选择.
客户端开发,或者包括所有的软件开发,都有两个重要的概念,一个是组件,一个是模板.彼此相关的内容封装在一个组件中,组件可以彼此包含或调用,通过各个组件的组合来实现一个大型系统.传统的客户端技术都有各种方便的组件,现在的web组件标准还没有最终确定,但是vue和react这些框架都提供了自己的组件化模型.各自的生态系统中也都有了大量基础的组件.
而模板说的是像脚手架一样的基础设施,提供了项目整体的结构,最基本的配置和能运行的demo.只需要按照自己的需求往里填入相应的组件.vue和维修小程序都提供了脚手架,后端的express和koa也有生成项目脚手架的工具,java里的Spring Initializr也是要快速生成一个基本的项目.我们要善于利用这些工具提高开发效率和可维护性.