Smart Tools 网站的架构之美

news2025/4/26 0:44:36

本文将简要介绍Smart Tools工具箱网站的架构设计,带领大家一起领略架构之美。

Smart Tools是一款实用的在线工具箱网站,地址:https://smart-tools.cn

总体架构

Smart Tools工具箱网站是采用前后端分离的总体架构。其中,前端是由Angular框架开发,后端包含三个服务,分别是Java 服务、NodeJs 服务、Python 服务。所有的请求都经过Nginx进行代理。

前端技术选型

为什么前端基于Typescript和Angular技术,它们有何优势和弊端?

目前的前端技术主要分为两类:

  • 服务端渲染技术。例如,Java生态中的Thymeleaf页面模板引擎,NodeJs生态中的ejs等,其优势是有利于搜索引擎爬虫,适合编写简单的页面。
  • 客户端渲染技术。其也被称为SPA技术。例如,目前行业主流的三大前端框架,Angular、Vue、React,其优势是适合编写复杂的前端项目,缺点是不利于搜索引擎爬虫。

这里 Smart Tools 网站选择的是 Typescript 和 Angular 。其理由如下:

  • Typescript 相对于 Javascript 语法更加规范,符合我作为一个后端Java程序员的使用习惯
  • Angular 是谷歌开源的技术,我对很多谷歌开源的技术都很喜欢
  • Angular 具有良好的生态以及技术文档,能够帮助初学者快速入门
  • Angular 框架有一套完善的机制用于支持复杂的前端系统

由于 Angular 框架搭建的应用属于SPA(单页应用),所以我们需要考虑如何优化搜索引擎爬虫。目前,Smart Tools 网站主要考虑了Baidu Spider、Bingbot、Google Spider 爬虫程序。

实现Angular应用的服务端渲染技术主要包括两类:

  • 预渲染技术
  • 服务端渲染技术

预渲染技术指的是在编译阶段,将所有的路由页面转换成静态的html。

服务端渲染技术指定是搜索引擎的爬虫程序会被重定向到一个chromium的解析服务,将页面路由解析成静态的html。

预渲染的缺点是每次代码修改都需要重新构建,而服务端渲染不存在这个问题,但服务端渲染的架构相对复杂,需要引入格外技术进行支撑。在 Smart Tools 网站中,我们选择的是预渲染技术,目前是接入的是prerender.io提供的技术方案。

惰性加载技术

由于前端应用中包含众多小工具组件,良好的路由和模块划分将有利于提供网站上各个工具的访问速度。这里,我们将详细介绍Smart Tools 工具箱的路由方案设计。

 Smart Tools 网站的路由方案是由三级路由组成,每一级路由都采用惰性加载。所谓的惰性加载是一种按需加载的模式,只有用户跳转到特定的路由模块后才会加载该模块的js文件。

UI 设计

目前主流的开源UI组件主要包括BootstrapMaterial UIAnt Design,这里我选择了Google开源的Material UI。主要原因如下:

  • Material UI是Google开源的UI设计规范,应用于Android、Chrome、Youtube、Bilibili,这些都是我很喜欢的应用。

Material UI的简单介绍

Material UI基于Google的Material Design规范,该规范提供了一种现代化且一致的设计语言,可在各种平台上提供可靠的用户体验。Material UI提供了许多预先构建好的UI组件,如按钮、输入框、表格、卡片等,这些组件都符合Material Design规范,可以很容易地进行自定义和样式更改。此外,Material UI还提供了主题支持,使得您可以轻松地在应用程序中使用自定义的颜色和字体。

后端技术选型

由于Smart tools工具网站包含众多的工具,每一种工具都有适合它的语言和类库。以格式化工具为例,我们是基于prettier类库进行格式化处理,而当前版本的prettier类库有11.2MB的大小。如果在前端进行业务逻辑的处理,势必需要客户端加载更多的js依赖,从而影响网站页面的加载性能,所以我们选择在后端Nodejs中进行处理。

目前后端技术主要包括三类:

  • java 和 spring,作为后端的主要接入服务,承担主要的业务逻辑
  • nodejs,提供格式化工具、数据类型转换工具等
  • python,提供爬虫类工具等

部署方案

在Smart Tools网站中系统模块的部署层面上,我们的原则是尽量基于Docker容器进行部署。原因是容器化部署可以减小系统对虚拟机环境的依赖。

目前Smart Tools网站包含的服务如下:

  1. nginx,基于docker容器进行部署
  2. smart-tools-java,基于docker容器进行部署
  3. smart-tools-nodejs,基于本地部署,可调用本地安装的类库
  4. smart-tools-python,基于docker容器进行部署
  5. mysql,基于docker进行部署

总结

好的系统架构是不会轻易改变的,不同的网站开发者基于不同的业务考量,通常会选择不同的架构方式。本文简介了Smart Tools工具箱网站的架构方案,希望能够给优秀的你一些参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/495773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

纯干货建议码住,新手写软文有哪些注意事项

随着互联网发展的越来越好,越来越的企业开始注重网络营销,软文营销就是其中的一种。软文营销对于很多企业来说无疑是非常具有优势的一种宣传方式。它可以帮助公司更优秀的传达其产品及服务的诉求,吸引潜在客户,加强品牌知名度&…

Java 电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标…

一文解析Multi-queue 架构

Linux上传统的块设备层(Block Layer)和IO调度器(如cfq)主要是针对HDD(hard disk drivers)设计的。我们知道,HDD设备的随机IO性能很差,吞吐量大约是几百IOPS(IOs per seco…

魔兽世界服务端AzerothCore核心Centos系统编译教程

魔兽世界服务端AzerothCore核心Centos系统编译教程 大家好,我是艾西今天跟大家分享下用linux系统怎么编译一个自己的魔兽世界服务端 准备工作:服务器一台、 安装软件、下载源码、 地图文件、 修改配置文件 修改文件执行权限、 修改配置文件、编译及启动、编译项目 数据…

体验 langchain-ChatGLM

体验 langchain-ChatGLM 1. 什么是 langchain-ChatGLM2. 什么是 langchain3. Github 地址4. 安装 Miniconda35. 创建虚拟环境6. 部署 langchain-ChatGLM7. 启动 langchain-ChatGLM8. 访问 langchain-ChatGLM9. API部署10. 命令行部署11. 其他,LangChain Document Lo…

rem响应式布局-自动将px转换为rem--px2rem插件的使用

在项目中我们可能要做适配根据不同分辨率做相应的页面处理 当你在项目中采用rem做响应式页面的时候,如果代码里面写的是rem单位的话,会不好判断各种距离、宽高的具体数值,下面介绍一款插件:px2rem,使用此插件可以在代码…

windows怎么把包含某个关键词的文件移动到一个文件夹中

文章目录 windows怎么把包含某个关键词的文件移动到一个文件夹中问题来源省流版本操作过程具体问题方法一:使用cmd终端解决方法二:使用python脚本 总结 windows怎么把包含某个关键词的文件移动到一个文件夹中 问题来源 今天想移动window文件&#xff0…

Java中的基本容器知识你真的了解过吗?

前言:尽量使用简单易懂的通俗语言让大家初步了解各个重要的知识点。博学之,审问之,慎思之,明辨之,笃行之。 一、容器(Collection) Collection容器其实是用来存储独立元素的各种数据结构&#xf…

CPU相关概念:物理cpu数、核数、逻辑cpu数,12核20线程实例分析

文章目录 0. 写此篇博客的原因1. 物理CPU,核,逻辑CPU概念1.1 内核工作方式1.2 超线程1.3 什么是大小核 2. CPU信息的查询方法2.1 Windows下查询CPU信息的方法2.2 Linux下查询CPU信息的方法方法一:lscpu 整体查看方法二:分别查看 3…

思享工具箱,各种工具汇总

站长,开发者常用在线工具集合 - 思享工具箱 思享工具箱,各种工具汇总 https://tool.4xseo.com/ JSON工具 Json格式化 Json格式化(上下) Json格式化(左右) Json在线压缩转义 Json生成C#实体类 Json生成Java实体类 Json生成Go结构…

戴尔Alienware x15R1 R2原厂win11系统带F12 Support Assist OS Recovery恢复功能

戴尔Alienware x15R1 x15R2原厂win11系统带F12 Support Assist OS Recovery恢复功能 恢复各机型预装系统,带所有dell主题壁纸、dell软件驱动、带戴尔SupportAssist OS Recovery恢复功能,一次性恢复成新机状态,并且以后不用重装系统&#xff…

OpenGL(七)——摄像机

目录 一、前言 二、摄像机空间 2.1 摄像机位置 2.2 摄像机方向 2.3 右轴 2.4 上轴 2.5 LookAt观察矩阵 三、视觉移动 3.1 自由移动 3.2 移动速度 3.3 视觉移动 3.4 缩放 四、摄像机类 一、前言 之前3D物体已经有了,如何在观察空间中随意移动去“游览”3D物…

三维数据学习笔记:ply数据内容介绍

目录 前言1. 三维数据的组成1.1 点云数据1.2 网格数据 2. ply数据内容2.1 属性2.1.1 文本描述属性2.1.2 数据描述属性2.1.2.1 顶点(vertex)2.1.2.2 面(face)2.1.2.3 相机(camera) 2.2 数据2.2.1 顶点(vertex)2.2.2 面(face)2.2.3 相机(camera) 3. 示例3.1 示例13.2 示例2 前言 …

中盐集团:加快推进数智化转型,引领盐行业高质量发展

2022年无论对党和国家,还是对中盐集团,都是极不平凡、极为重要的一年。 这一年,党的二十大胜利召开,在“两个一百年”奋斗目标的历史交汇期,描绘了以中国式现代化全面推进中华民族伟大复兴的宏伟蓝图,开启了…

chatgpt国内能用吗?详细解读gpt的使用方法

chatgpt国内能用吗?Chat GPT是一种自然语言处理技术。它基于深度神经网络,并使用Transformer模型进行预测和生成。Chat GPT是OpenAI公司的一项人工智能技术,并在自然语言处理领域拥有广泛的应用。今天我们就来详细的聊聊国内能不能使用这个问…

Unity3D:内置着色器的用途和性能

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 内置着色器的用途和性能 Unity 中的着色器是通过__材质__来使用的,材质本质上结合了着色器代码与纹理等参数。此处提供了关于着色器/材质关系的深入说明。 当选择材质…

PPP报文解析与代码封装分享

一、简介: PPP(Point-to-Point Protocol点到点协议),属于数据链路层协议,这种链路提供全双工操作,并按照顺序传递数据包。 PPP协议是一个协议集包含:LCP(Link Control Protocol&am…

DDR3学习(一)

I.MX6U-ALPHA开发板上带有一个256MB/512MB的DDR3内存芯片,一般Cortex-A芯片自带的RAM很小,比如I.MX6U只有128KB 的 OCRAM。 如果要运行Linux的话完全不够用,所以需要外接一片RAM芯片,I.MX6U 支持 LPDDR2、LPDDR3/DDR3,…

互联网陪诊系统功能方案

互联网陪诊系统是一款为用户提供陪同患者到医院就医全程陪同,排队约号,排队检查,排队缴费,取送结果,代办买药,代办问诊等。 业务线上预约平台,让客户享受到最为专业的医院助医服务. 功能介绍 专…

卫星下行链路预算模型(未完待续)

卫星下行链路预算模型 1. 接收端天线模型 简单一些,考虑地球同步卫星多波束通信系统,波束指向固定。波束数量为 N b N_b Nb​. 波束中心在地面的位置可以用经度向量和纬度向量表示: P ⃗ l g [ l 1 , l 2 , . . . , l N b ] P ⃗ l a [ a 1 , a 2 …