谈一谈工作中的前后端功能开发范围
在BS开发中,往往都是团队开发,分为前端和后端,往往经常会遇到此处功能是前端进行功能开发还是后端进行功能开发的讨论,本文以我自己的观点进行论述。
笔者的观点是:
-
功能实现的优先性:您强调,无论是前端还是后端开发,重要的是能够实现功能。这种实用主义的观点强调了结果的重要性,而不是过程中的具体实现细节。【不论黑猫白猫,能抓老鼠的就是好猫】
-
团队和技术栈的考虑:应该基于团队的技术能力和项目的特点来决定功能的实现方。这表明,技术选择不应仅仅基于技术本身,而应结合团队能力和项目需求。
-
前后端分工的考虑:
- 技术特点:如JavaScript在处理计算密集型任务和精确数值计算方面的局限性,这些因素应在分配前后端任务时考虑。
- 项目需求:并发性和需求的变动性是决定前后端分工的重要因素。例如,高并发应用可能需要将一些任务分配到前端以减轻后端负担。
- 技术生态:对技术生态的了解也是重要的,因为它可以帮助开发人员利用现有的工具和库来补充他们的解决方案。
-
团队成员的态度和能力:
- 一些团队成员可能会推脱责任,而优秀的开发人员应相信自己的技术栈可以完成各种任务。
- 同时,如果有合理的原因,某些任务可能确实不适合某一端来完成。
1.一般情况说明
笔者个人认为以下情况或多或少说明了一些人物的特点和立场问题
2.1.干不了
干不了,这个不属于我方的范围,应该给到另一端。
在这种情况下并且无法拿出一些实际和理论的说明
- 我80%认定此类人都在推脱
- 没有主观能动性,好的开发是相信自己的技术栈可以干任何的事情。
下结论:此类人80%是喜欢推脱的人,10%是大神、10%技术不扎实。
2.2. 不可以做,因为…
此类人,一般可以拿出一定的原因进行问题说明。有的原因是可取的有的原因是不可取的。
3. 前后端工作分工说明
3.1. 功能实现的优先性
在软件工程的实践中,功能的实现是首要任务。在这个阶段,最关键的是确保所需功能得以实现,而不必过于纠结于是否以最优雅或最理想的方式实现。这种实用主义的方法强调了可操作性和实际效果,为项目提供了明确的方向和目标。
3.2. 评估实现的优质和合理性
一旦功能实现的可行性得到确认,下一步是评估其实现方式的优质性和合理性。这涉及到多个方面的考量:
3.2.1. 技术特点的考量
- 前端限制:诸如JavaScript的单线程模型和执行速度限制等因素,对于某些类型的任务(如计算密集型任务)可能不是最佳选择。在这些情况下,考虑将这些任务分配给后端可能更为合适。
- JavaScript并不擅长计算密集型操作
-
单线程执行模型: JavaScript在浏览器中运行时通常是单线程的,这意味着它在执行长时间运行的复杂计算时可能会阻塞用户界面。虽然现代JavaScript引擎(如V8)进行了优化以提高性能,但它们仍然受限于单线程的限制。
-
执行速度: 相比于编译语言如C++或Java,JavaScript作为一种解释型语言,在执行速度上通常较慢。这是因为JavaScript代码在执行前需要先被解释或即时编译,而编译语言在运行前已经被编译为机器码。
-
优化限制: 虽然JavaScript引擎如V8进行了大量优化,但它们在优化计算密集型任务方面的能力仍然有限,特别是当与专门为此类任务设计的语言或环境相比。
-
内存管理: JavaScript的自动内存管理(垃圾回收)可能导致性能开销,尤其是在进行大规模或复杂的计算时。
- JavaScript无法进行银行数值计算
JavaScript中的所有数字都是以64位浮点数的形式存储的(遵循IEEE 754标准),这意味着在处理非常大或者需要非常高精度的数字时可能会遇到精度问题。这在金融计算中尤为重要,因为金融计算通常要求非常高的精确度。
- 后端的强项:后端通常处理更为复杂的逻辑,数据存储和安全问题。对于需要快速处理大量数据,或者需要保证数据安全和完整性的任务,后端是更合适的选择。
3.2.2. 项目需求的考量
- 并发性能:高并发应用要求后端具备强大的处理能力。前端可以通过承担一些非关键任务来减轻后端的负担。
在软件并发较高的项目中,可以将一些非必要的操作交到前端去实现,尽量减少后端的并发压力,比如读取Shapefile文件中的图形(往往这样的项目并发不高,只是举例,不必争论),就不要把文件上传到后端,后端再解析为WKT或者GeoJson等再返回给前端了,前端可以使用第三方包自己获取其中的矢量空间范围。
- 需求的动态性:如果一个项目的需求频繁变更,那么将某些功能实现为可配置和由后端数据驱动可能更为合适,以便快速适应这些变化。
对于此类便需要将需求中经常变化的内容开发为可配置,并由后端数据驱动。前端进行变化,如此就可以使需求的变化不会导致项目的重复部署。
3.2.3. 技术生态的考量
-
库和工具的支持:了解所使用的技术栈及其生态系统是至关重要的。某些任务可能由于缺乏适当的库或工具支持而更适合在特定端(前端或后端)实现。
-
社区和文档:一个强大且活跃的开发社区以及丰富的文档资源,可以为开发人员在特定技术选择上提供更多的支持和便利。
综上所述,前后端工作分工不仅仅是一种技术决策,更是一种战略考量,涉及到技术特点、项目需求和技术生态等多个方面。有效的分工可以提高开发效率,优化资源利用,并增强最终产品的性能和用户体验。
相关文章:
谈一谈工作中的前后端功能开发范围
在BS开发中,往往都是团队开发,分为前端和后端,往往经常会遇到此处功能是前端进行功能开发还是后端进行功能开发的讨论,本文以我自己的观点进行论述。 笔者的观点是: 功能实现的优先性:您强调,无…...

Kubernetes 学习总结(46)—— Pod 不停重启问题分析与解决
我们在做性能测试的时候,往往会发现我们的pod服务,频繁重启,通过kubectl get pods 命令,我们来逐步定位问题。 现象:running的pod,短时间内重启次数太多。 定位问题方法:查看pod日志 kubectl get event …...

Vulnhub靶机:Bellatrix
一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.4) 靶机:Bellatrix(10.0.2.9) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/hogwa…...

深入探讨 AutoGPT:彻底改变游戏的自主 AI
原文地址:Deep Dive into AutoGPT: The Autonomous AI Revolutionizing the Game 2023 年 4 月 24 日 AutoGPT 是一个功能强大的工具,它通过 API 使用 GPT-4 和 GPT-3.5,通过将项目分解为子任务并在自动循环中使用互联网和其他工具来创建完…...
Java Web之网页开发基础复习
tomcat之网页开发基础复习 **声明** :HTML标准规范 </!doctype> <html> : 根标签 <head>: 头部标签 内含<title><meta><link><style> <body>: 主体 <body></body> html标签 单标签: <标签名 \> 双标…...

华容道问题求解第一部分_详细设计(一)之棋子和游戏类_初始化部分
按:因为自控力和能力的原因,这个其实是在和代码同时进行的。 主要 类 说明 这一层是整个项目的基础,将对未来的算法的效率产生重要影响。为了和界面隔离,以及自身逻辑的清晰,下面的两个类是必须的,棋子类…...

【框架】Spring 框架重点解析
Spring 框架重点解析 1. Spring 框架中的单例 bean 是线程安全的吗? 不是线程安全的 Spring 框架中有一个 Scope 注解,默认的值是 singleton,即单例的;因为一般在 Spring 的 bean 对象都是无状态的(在生命周期中不被…...
js中的内存泄漏
理解 内存泄漏是计算机,中由于疏忽或者错误造成程序未能释放已经不在使用的内存,知道浏览器结束 垃圾回收机制 js具有自动的垃圾回收机制,垃圾收集器会定期(周期性)的找出那些不在继续使用的变量,然后释放内存 常见的内存泄漏 意外的全局变量 function foo(){bar 123123…...

营业执照年报申报
姿势:营业执照年报申报 借鉴文章:个体工商户年报申报流程(不要再花冤枉钱) 1、国家企业信用信息公示系统 地址:https://www.gsxt.gov.cn/index.html 2、登录(重庆的方式二简单)...

Springboot教程(五)——单元测试
idea中一般使用JUnit进行单元测试 基本使用 我们可以在idea的test文件夹下的XXXXApplicationTests内进行单元测试: 可以在Test标注的方法上写测试代码: SpringBootTest class C0101ApplicationTests {Testfun contextLoads() {println("Hello …...

【Kotlin】函数
1 常规函数 1.1 无参函数 fun main() {myFun() }fun myFun() {println("myFun") // 打印: myFun } 1.2 有参函数 1)常规调用 fun main() {myFun("myFun") // 打印: myFun }fun myFun(str: String) {println(str) } 2)形参指定默…...
Unity生命周期函数解析
本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com Unity生命周期函数解析 Unity 生命周期函数是在游戏对象的不同阶段被调用的方法,通过这些函数,我们可以在不同的时刻执行特定的代码。在这篇文章中,我们将一步步解析 Unit…...
【Qt】QTextEdit/QPlainTextEdit 实现 Tab 键多行缩进与反缩进
【Qt】QTextEdit/QPlainTextEdit 实现 Tab 键多行缩进与反缩进 文章目录 I - 主要原理II - 代码实现2.1 - 自定义类2.2 - 实现 Tab 缩进2.3 - 实现反缩进 III - 参考链接 I - 主要原理 由于 QTextEdit 和 QPlainTextEdit ,都无法实现多行选中缩进与反缩进ÿ…...
C++缺陷与思考
数组隐式转换为指针 size_t func(int a[10]) {return sizeof(a); }int a[100]; func(a); // 指针大小 sizeof(a); // 数组大小函数的参数看似是一个数组形式,但事实上他已经退化为指针了,也就是等价于size_t func(int* a),而数组作为参数传…...

无公网ip环境使用DS file软件远程访问内网群晖NAS中储存的文件
文章目录 1. 群晖安装Cpolar2. 创建TCP公网地址3. 远程访问群晖文件4. 固定TCP公网地址5. 固定TCP地址连接 DS file 是一个由群晖公司开发的文件管理应用程序,主要用于浏览、访问和管理存储在群晖NAS(网络附加存储)中的文件。这个应用程序具有…...
软件工程基础
本博客地址:https://security.blog.csdn.net/article/details/136446772 一. 软件工程 1、软件危机。具体表现为:软件开发进度难以预测、软件开发成本难以控制、软件功能难以满足用户期望、软件质量无法保证、软件难以维护和软件缺少适当的文档资料。 …...
alzet供应商你值得拥有
在20世纪70年代,ALZE公司研发出来一款巧妙的药物输送装置——Alzet osmotic pump。这款产品如胶囊般精致小巧,它既有胶囊的外表,也具有胶囊的作用。在Alzet osmotic pump中藏有可以装配药物溶液的空间。此款胶囊泵如同一个小投递员࿰…...

x86中的TSS与任务切换
前言 今天在学习《深入理解Linux内核》的时候,发现出现了一个新的名词TSS(Task-State Segment),这还是我第一次了解到原来x86提供了硬件级别的任务切换功能,之前以为任务切换都是操作系统实现的来着,这里也…...

打造去中心化透明储蓄罐:Solidity智能合约的又一实践
一、案例背景 传统的储蓄罐通常是由个人或家庭使用,用于存放硬币或小额纸币。然而,这样的储蓄罐缺乏透明性,用户无法实时了解储蓄情况,也无法确保资金的安全性。 通过Solidity智能合约,我们可以构建一个去中心化…...
Java Mybatis数据库面试题
Java Mybatis数据库面试题 前言1、什么是 Mybatis?2、Mybaits 的优缺点:3、SQL 注入如何防止?4、MyBatis 框架适用场合:5、MyBatis 与 Hibernate 有哪些不同?6、#{}和${}的区别是什么?7、当表中的字段名和实…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...