当前位置: 首页 > news >正文

谈一谈工作中的前后端功能开发范围

在BS开发中,往往都是团队开发,分为前端和后端,往往经常会遇到此处功能是前端进行功能开发还是后端进行功能开发的讨论,本文以我自己的观点进行论述。

笔者的观点是:

  1. 功能实现的优先性:您强调,无论是前端还是后端开发,重要的是能够实现功能。这种实用主义的观点强调了结果的重要性,而不是过程中的具体实现细节。【不论黑猫白猫,能抓老鼠的就是好猫】

  2. 团队和技术栈的考虑:应该基于团队的技术能力和项目的特点来决定功能的实现方。这表明,技术选择不应仅仅基于技术本身,而应结合团队能力和项目需求。

  3. 前后端分工的考虑

    • 技术特点:如JavaScript在处理计算密集型任务和精确数值计算方面的局限性,这些因素应在分配前后端任务时考虑。
    • 项目需求:并发性和需求的变动性是决定前后端分工的重要因素。例如,高并发应用可能需要将一些任务分配到前端以减轻后端负担。
    • 技术生态:对技术生态的了解也是重要的,因为它可以帮助开发人员利用现有的工具和库来补充他们的解决方案。
  4. 团队成员的态度和能力

    • 一些团队成员可能会推脱责任,而优秀的开发人员应相信自己的技术栈可以完成各种任务。
    • 同时,如果有合理的原因,某些任务可能确实不适合某一端来完成。

1.一般情况说明

笔者个人认为以下情况或多或少说明了一些人物的特点和立场问题

2.1.干不了

干不了,这个不属于我方的范围,应该给到另一端。

在这种情况下并且无法拿出一些实际和理论的说明

  • 我80%认定此类人都在推脱
  • 没有主观能动性,好的开发是相信自己的技术栈可以干任何的事情。

下结论:此类人80%是喜欢推脱的人,10%是大神、10%技术不扎实。

2.2. 不可以做,因为…

此类人,一般可以拿出一定的原因进行问题说明。有的原因是可取的有的原因是不可取的。

3. 前后端工作分工说明

3.1. 功能实现的优先性

在软件工程的实践中,功能的实现是首要任务。在这个阶段,最关键的是确保所需功能得以实现,而不必过于纠结于是否以最优雅或最理想的方式实现。这种实用主义的方法强调了可操作性和实际效果,为项目提供了明确的方向和目标。

3.2. 评估实现的优质和合理性

一旦功能实现的可行性得到确认,下一步是评估其实现方式的优质性和合理性。这涉及到多个方面的考量:

3.2.1. 技术特点的考量
  • 前端限制:诸如JavaScript的单线程模型和执行速度限制等因素,对于某些类型的任务(如计算密集型任务)可能不是最佳选择。在这些情况下,考虑将这些任务分配给后端可能更为合适。
    • JavaScript并不擅长计算密集型操作
  1. 单线程执行模型: JavaScript在浏览器中运行时通常是单线程的,这意味着它在执行长时间运行的复杂计算时可能会阻塞用户界面。虽然现代JavaScript引擎(如V8)进行了优化以提高性能,但它们仍然受限于单线程的限制。

  2. 执行速度: 相比于编译语言如C++或Java,JavaScript作为一种解释型语言,在执行速度上通常较慢。这是因为JavaScript代码在执行前需要先被解释或即时编译,而编译语言在运行前已经被编译为机器码。

  3. 优化限制: 虽然JavaScript引擎如V8进行了大量优化,但它们在优化计算密集型任务方面的能力仍然有限,特别是当与专门为此类任务设计的语言或环境相比。

  4. 内存管理: 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标签 单标签: <标签名 \> 双标…...

华容道问题求解第一部分_详细设计(一)之棋子和游戏类_初始化部分

按&#xff1a;因为自控力和能力的原因&#xff0c;这个其实是在和代码同时进行的。 主要 类 说明 这一层是整个项目的基础&#xff0c;将对未来的算法的效率产生重要影响。为了和界面隔离&#xff0c;以及自身逻辑的清晰&#xff0c;下面的两个类是必须的&#xff0c;棋子类…...

【框架】Spring 框架重点解析

Spring 框架重点解析 1. Spring 框架中的单例 bean 是线程安全的吗&#xff1f; 不是线程安全的 Spring 框架中有一个 Scope 注解&#xff0c;默认的值是 singleton&#xff0c;即单例的&#xff1b;因为一般在 Spring 的 bean 对象都是无状态的&#xff08;在生命周期中不被…...

js中的内存泄漏

理解 内存泄漏是计算机,中由于疏忽或者错误造成程序未能释放已经不在使用的内存,知道浏览器结束 垃圾回收机制 js具有自动的垃圾回收机制,垃圾收集器会定期(周期性)的找出那些不在继续使用的变量,然后释放内存 常见的内存泄漏 意外的全局变量 function foo(){bar 123123…...

营业执照年报申报

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

Springboot教程(五)——单元测试

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

【Kotlin】函数

1 常规函数 1.1 无参函数 fun main() {myFun() }fun myFun() {println("myFun") // 打印: myFun } 1.2 有参函数 1&#xff09;常规调用 fun main() {myFun("myFun") // 打印: myFun }fun myFun(str: String) {println(str) } 2&#xff09;形参指定默…...

Unity生命周期函数解析

本文由 简悦 SimpRead 转码&#xff0c; 原文地址 mp.weixin.qq.com Unity生命周期函数解析 Unity 生命周期函数是在游戏对象的不同阶段被调用的方法&#xff0c;通过这些函数&#xff0c;我们可以在不同的时刻执行特定的代码。在这篇文章中&#xff0c;我们将一步步解析 Unit…...

【Qt】QTextEdit/QPlainTextEdit 实现 Tab 键多行缩进与反缩进

【Qt】QTextEdit/QPlainTextEdit 实现 Tab 键多行缩进与反缩进 文章目录 I - 主要原理II - 代码实现2.1 - 自定义类2.2 - 实现 Tab 缩进2.3 - 实现反缩进 III - 参考链接 I - 主要原理 由于 QTextEdit 和 QPlainTextEdit &#xff0c;都无法实现多行选中缩进与反缩进&#xff…...

C++缺陷与思考

数组隐式转换为指针 size_t func(int a[10]) {return sizeof(a); }int a[100]; func(a); // 指针大小 sizeof(a); // 数组大小函数的参数看似是一个数组形式&#xff0c;但事实上他已经退化为指针了&#xff0c;也就是等价于size_t func(int* a)&#xff0c;而数组作为参数传…...

无公网ip环境使用DS file软件远程访问内网群晖NAS中储存的文件

文章目录 1. 群晖安装Cpolar2. 创建TCP公网地址3. 远程访问群晖文件4. 固定TCP公网地址5. 固定TCP地址连接 DS file 是一个由群晖公司开发的文件管理应用程序&#xff0c;主要用于浏览、访问和管理存储在群晖NAS&#xff08;网络附加存储&#xff09;中的文件。这个应用程序具有…...

软件工程基础

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/136446772 一. 软件工程 1、软件危机。具体表现为&#xff1a;软件开发进度难以预测、软件开发成本难以控制、软件功能难以满足用户期望、软件质量无法保证、软件难以维护和软件缺少适当的文档资料。 …...

alzet供应商你值得拥有

在20世纪70年代&#xff0c;ALZE公司研发出来一款巧妙的药物输送装置——Alzet osmotic pump。这款产品如胶囊般精致小巧&#xff0c;它既有胶囊的外表&#xff0c;也具有胶囊的作用。在Alzet osmotic pump中藏有可以装配药物溶液的空间。此款胶囊泵如同一个小投递员&#xff0…...

x86中的TSS与任务切换

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

打造去中心化透明储蓄罐:Solidity智能合约的又一实践

一、案例背景 传统的储蓄罐通常是由个人或家庭使用&#xff0c;用于存放硬币或小额纸币。然而&#xff0c;这样的储蓄罐缺乏透明性&#xff0c;用户无法实时了解储蓄情况&#xff0c;也无法确保资金的安全性。 通过Solidity智能合约&#xff0c;我们可以构建一个去中心化…...

Java Mybatis数据库面试题

Java Mybatis数据库面试题 前言1、什么是 Mybatis&#xff1f;2、Mybaits 的优缺点&#xff1a;3、SQL 注入如何防止&#xff1f;4、MyBatis 框架适用场合&#xff1a;5、MyBatis 与 Hibernate 有哪些不同&#xff1f;6、#{}和${}的区别是什么&#xff1f;7、当表中的字段名和实…...

C# 异步编程在 AI 应用中的最佳实践

一、引言 AI 应用开发中的异步需求 在当今的人工智能应用开发领域,异步编程已经成为不可或缺的核心技术。当我们与 AI 大模型进行交互时,网络请求的延迟、流式响应的处理、并发调用多个模型——这些场景无不对程序的响应能力和吞吐量提出了极高要求。传统的同步编程模式在面…...

LeetCode刷题笔记:用动态规划一口气搞定6道回文串问题(附Java代码)

动态规划解回文问题&#xff1a;从子串到子序列的通用解法 回文串问题在算法面试中出现的频率居高不下&#xff0c;无论是统计回文子串数量、寻找最长回文子串&#xff0c;还是处理回文子序列&#xff0c;动态规划(DP)都是解决这类问题的利器。本文将带你系统掌握六种经典回文问…...

重启 CSDN 两周复盘:从 0 到 10700 + 阅读,37 岁老码农的内容创作实战

从 3 月 23 日正式重启 CSDN&#xff0c;到今天 4 月 6 日&#xff0c;整整两周时间。从最初的「码龄 14 年&#xff0c;重新出发」&#xff0c;到现在累计10700 总阅读量、155 分原力值&#xff0c;这两周的每一步&#xff0c;都是我对「个人技术品牌」的真实实践&#xff0c…...

leetcode 189

找到了&#xff0c;这题和高级搜索树里面的就地循环移位是一个题。实际上就是一个经典问题&#xff0c;我记得在哪里&#xff0c;却不知道怎么解决。好像也知道一点&#xff0c;就是反转&#xff0c;然后再反转。利用空间局部性&#xff0c;把缓存的作用发挥到极致。注意这里的…...

源码阅读的艺术:开源项目入门者的渐进式指南

文章目录 每日一句正能量前言一、为什么读源码是开源入门的必修课二、准备工作&#xff1a;建立项目的"认知地图"2.1 三层结构分析法2.2 依赖关系可视化 三、第一层阅读&#xff1a;从"使用"到"入口"3.1 追踪一个完整请求3.2 绘制"调用链&q…...

VRM Addon for Blender全流程指南:从安装到高级角色创作

VRM Addon for Blender全流程指南&#xff1a;从安装到高级角色创作 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 to 5.0 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender VRM Addon for Blende…...

GD32450i-EVAL开发实战:TLI接口配置与双图层应用解析

1. GD32450i-EVAL开发板与TLI接口初探 第一次拿到GD32450i-EVAL开发板时&#xff0c;那块480x272的RGB屏幕立刻吸引了我的注意。作为GD32F450芯片的官方评估板&#xff0c;它内置的TLI&#xff08;TFT-LCD Interface&#xff09;接口让图形显示开发变得异常简单。TLI接口本质上…...

颠覆式角色定制:开源工具Diablo Edit2如何重塑暗黑破坏神2游戏体验

颠覆式角色定制&#xff1a;开源工具Diablo Edit2如何重塑暗黑破坏神2游戏体验 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 在暗黑破坏神2的冒险旅程中&#xff0c;每位玩家都曾面临存档管理的…...

肿瘤研究者的monocle3实战:追踪癌细胞转移路径的5个关键分析步骤

肿瘤研究者的monocle3实战&#xff1a;追踪癌细胞转移路径的5个关键分析步骤 乳腺癌转移机制的研究一直是肿瘤学领域的难点。单细胞RNA测序技术让我们有机会在单个细胞分辨率下观察肿瘤微环境的异质性&#xff0c;而monocle3作为当前最先进的轨迹推断工具&#xff0c;能够帮助研…...

Hunyuan-MT 7B效果实测:韩语、俄语、藏语等小语种翻译到底有多准?

Hunyuan-MT 7B效果实测&#xff1a;韩语、俄语、藏语等小语种翻译到底有多准&#xff1f; 1. 小语种翻译的痛点与解决方案 在全球化交流日益频繁的今天&#xff0c;小语种翻译需求快速增长&#xff0c;但传统解决方案往往存在三大痛点&#xff1a; 准确率低&#xff1a;韩语…...