一、背景
七镜近半年来非常热衷于写小程序,可能是linux操作比较多的关系(数仓运维),对于自动化研究越发得多。想一想:花点时间,写个小程序,去替代重复性的工作,用的时候,心情要多美就有多美!
linux大多都是黑窗口操作,黑窗口中执行命令,黑窗口中输出结果,对于经常使用的程序员来说,用起来非常便捷,很适合把一连串的命令组合起来去完成一个复杂的任务。
但是,七镜的技术方向是应用开发(准确的说,是廉价快速的应用开发),意味着,七镜做的软件单单方便自己用还不够,七镜还需要降低所做的应用的使用门槛,这样才能让更多的人使用。
二、谈及前后端分离
作为一个大项目来说,现在都2023年了,肯定选择前后端分离,七镜的客户端技术栈主要是react,服务端技术栈主要是Gin,那么做大型项目时,定义好前后端交互的接口规范,就可以前后端分开开发了,也能把工作任务分配给其他人。
但是作为一个小项目来说(尤其是七镜其近半年来写的小程序),功能比较单一,很多时候,我的用户需要界面的地方只是几个参数的配置,七镜写一个客户端界面,即可把小项目完完整整的跑下来。比如说:一个文字转语音的小程序,用户配置一下发音人,上传一个文本文件,程序输出一个语音文件,整个流程就跑完了。
这种场景,如果七镜为了实现一个客户端界面,去使用前后端分离的架构,引入前端的各种技术栈(webpack、typescript、scss、react),简直就是大炮打蚊子了!不但增加了项目开发的复杂性,还使得最终使用的时候,增加了部署成本(毕竟前后端分离的项目,需要一个单独的web服务,比如nginx、apache、tomcat),可能由于这众多技术栈的原因,还需要下载安装其他的依赖(比如,jdk、gcc等等)。
三、引入前后端不分离
七镜想起来在最开始的时候学习java时,接触过jsp;在学python的时候,接触过jinja2;在学习golang的时候,也了解过html/template标准库。这是都是前后端不分离的技术,虽然增加了代码的耦合度,项目复杂了之后,不利于维护,但是七镜的使用场景是小项目。一个小项目,只有一个页面,总共就1000行代码,维护起来完全没问题。
而且引入开发语言对应的模板引擎之后,比如拿七镜现在最喜欢的golang开发语言来说,我通过使用html/template标准库,就可以实现一个简单的界面,既满足了降低用户使用门槛的需求,又降低了应用部署门槛。
由于golang的跨平台特性,七镜在windows上写的应用,既可以在windows上运行,又可以同时在linux上运行,还可以在mac上运行。而且解压即用,无需安装额外的依赖。
另外golang写的程序编译之后,体积非常小,基本上30M以内的大小,想象一下,这么点大的玩意,能提供一个用户界面,不需要用户安装额外的东西,解压即用,并且完成一个用户的实际需求,简直不要太值——太值啦!
四、写在后头
这个世界不缺少创意,也不缺少想法,发明技术的是一些人,推广出去的是另一些人,七镜在刻意培养一种让空中楼阁落地的能力。