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

为什么前端开发变得越来越复杂了?这可能是我们的错

前端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~

Hello,大家好,我是 Sunday。

最近有很多同学来问我:“Sunday 老师,前端学起来好多的东西啊。各种框架、各种库、各种语法、各种标准,弄得我完全懵逼了。Sunday 老师,你之前是怎么学的,好厉害啊!”

这不禁让我开始反思:“我厉害吗?我可不这么觉得!” 那我之前是怎么学习这些东西的呢?

我只是占了时间的便利而已~~

背景

如今可用的大量框架和工具给人的印象是 Web 开发可能已经变得过于复杂。如果是一个新人,有这么多要考虑的东西确实会令人感到“恐惧”。好像每一个框架都需要学习,如果不学习给人的感觉就是 “就是没有办法工作” 的样子。更何况还有各种新的热门框架教程和课程增加我们的焦虑感。

但是,大家有没有想过一点,或许前端开发远没有那么负责,这一切也只是一种所谓的 “夸张” 而已。


我记得最初在我学习前端的时候,Angular 还是 1 的版本。Vue 也才刚刚出现。那个时候前端开发好像很简单。标准网站主要由 HTML 和 CSS 组成的静态页面组成,并添加少量 JavaScript 和 jQuery。

快进到今天,看起来就像一个平行宇宙正在发生,有大量的选择。新项目应该使用哪个框架?也许是更成熟的产品,如 React、Angular、Vue、Svelte,或者可能是上个月推出的热门新产品?每个框架都有其独特的生态系统。你还需要决定是否使用 TypeScript 而不是 “普通的” JavaScript,并选择如何使用Next、Nuxt 或 Gatsby 等框架进行服务器端渲染(或静态站点生成) 。如果你想要一个没有错误的应用程序,还不能忘记单元和端到端测试。不过哪怕做到了这些,我们也仅仅知识触及了前端生态系统的表面!

但建立网站真的变得更加复杂了吗?我们今天使用的许多框架和工具最初都是为大型项目而设计的。作为一个新人,真的有这么多要考虑的东西吗?一些新的课程(可能是上周刚刚发布的新框架)没有了它们真的会影响你的工作(找工作)吗?显然不会的!

最初的前端开发状态

作为 2013 年开始工作,2015 后进入 Web 开发的人,那个时候的前端开发真的是非常简单,至少对我来说是这样的。

我记得我可以只使用静态 HTML 页面、最少的 CSS 样式以及少量的 JavaScript(或许还有一点 jQuery)来添加交互功能(这是应用在一个 最高有百万日活 的项目中的技术栈)。你看,哪怕是这样的一个大型项目,它的开发方案依然非常简单。

不过,当时也确实存在一些大型的框架,比如:angular 1。有部分团队也在尝试使用这种全新的技术方案,不过随着 angular 2 的推出,这埋葬了一大批的项目(经历过那个年代的同学应该有对应的感受)。

在当时,我们更关注与 SEO 和页面的优化,但是也仅限于一些标记和关键字之类的东西。与现在的标准相比,可访问性、用户体验和响应式布局 等其他因素几乎在当时都是被忽略的。

不过,随着原生(android || IOS)开发褪去,web 逐渐占据主流。越来越多的功能添加,以及越来越多的人开始依赖于 web 项目。我们开始逐渐在原有的基础之上创建出:新的解决方案、新工具、新工作流程、新功能以及满足更大网络和更大需求所需的任何其他新功能。

JavaScript 框架

越来越多的 JavaScript 框架开始出现,比如大家所熟知的:Vue、React、Angular,通过它们又延伸出了各种生态,如:Element、AntD、Pinia、Redux 等等。

现在,哪怕是一个很小的项目(比如我前几天所做的 运气模拟器依赖了 vue)也会依赖这些框架完成。我好像已经失去了 不依赖框架,完成项目独立开发的能力

但是我们好像忘记了:JavaScript 框架最初应该是为了支持大型项目而不是小型项目而创建的。 学习框架的成本很高,虽然它使用起来确实很简单。但是这是一个增加了我们学习复杂度的来源。

不是所有的项目都必须要依赖框架

JavaScript 框架最适合用于较大的应用程序。如果你正在处理较小的项目,基于组件的框架只会使事情变得复杂,将网站拆分为组件层次结构,这对于小型项目来说很多时候是多余的。

就像 vuex 中犹大所说的一样:

请记住,框架的目的是:简化你的开发并节省你的时间。 不要被框架所绑架。

大家的期望正在变得越来越大

项目的规模随着时间的推移而增长,这是合乎情理的。但是反过来 先构建一个巨型的架构,来应对小型的功能 显得就 不合情理 了。

Web 开发变得过于复杂的想法源于:我们相信我们都拥有与大型企业相同的需求和资源。

这是一个很可怕的事情!

这意味着每个新项目可能需要独特的架构来满足其要求。大公司的所有项目都需要庞大的架构,并且他们的结构经过 “精心设计(至少相对来说是这样)”,以确保可扩展性和维护。他们还拥有庞大的客户群,因此,通过更多的收入、更多的工程师和更清晰的问题了解,维护大型代码库将变得更加容易。

但是对于小公司来说。为了最大程度地减少浪费,小公司的项目应该最小化,不仅要满足其需求的规模,还要满足团队中开发人员的能力。试图模仿大公司的巨型代码架构是毫无意义的

有些人可能会说:“这是我们为了未来的可扩展性和维护而必须做出的牺牲!” 相信我,如果你这么做的话,那么你们肯定撑不到那个时候。

模仿大公司的巨型架构只有一个价值,那就是 增加你简历中的亮点。 如果你从这一点进行考虑,那么你这样做是 “正确的”。

每个解决方案都会引入一个新的问题

每个新框架或库都会出现一个新问题。缺少时间的开发人员花费几个月时间开发出来一个新的工具来解决该问题。如果没有问题呢?那么请放心——我们会创建一个问题,就像多年前的 中、前 台分离一样。

不过世界上任何的行业好像都是想通的,这个事情并不仅仅存在于开发行业。UG 克里希那穆提(印度哲学家)说过:显而易见的事实是,如果你没有问题,你就会制造问题。如果你没有问题,你就不会觉得自己还活着。

我们可以随意以 React 为例(因为我更喜欢 Vue ,所以我不想以 Vue 为例)。它最初是由Facebook创建的,旨在为Facebook开发更多动态功能,同时改善 Facebook 的开发者体验。

自从 React 在 2013 年开源,已经创建了数百个依赖库来解决各种特定于 React 的问题。

  • 如何启动 React 项目?有 Create React App 和 Vite
  • 如何进行状态管理?有 Redux,还有 Mobx
  • 需要创建表单吗?有一个 React Hook 表单
  • 需要服务器端渲染吗?有 Next、Remix 或 Gatsby 等

每个解决方案都有自己的注意事项,开发人员将为它们创建自己的解决方案。

React 可能会认为自己很委屈,因为它认为自己是一个库,而不是一个框架。但是它不可避免地会被社区扩展。同时,Angular 和 Vue 都是拥有自己社区生态系统的框架。并且这只是冰山一角,因为存在许多 JavaScript 框架,每个框架都有自己独特的意识形态和依赖关系。

如何简化我们的代码

在刚才我们已经讨论了很多代码变得复杂的原因。那么接下来我们就要思考 如何才能简化我们的代码

想象一下,你正在开发一个项目、评论和评价其所在地区的餐厅(类似于大众点评)。该项目有关每家餐厅的信息、以及评论的功能。但是在很多情况下,项目最终都会被 延迟发布,因为我们总会添加很多不必要的功能。比如:SSR、通知、离线模式和动画等等。我们在做这些的时候 甚至还没有任何一个用户

我们要知道:完成比完美要重要的多

思考的越多会让我们真正陷入到 过渡设计 的怪圈之中:

所以 简化你的项目吧。去掉那些暂时不需要的功能,去掉那些暂时不需要的框架。 为目标选择合适的工具,而不要为工具选择合适的目标!

相关文章:

为什么前端开发变得越来越复杂了?这可能是我们的错

前端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~ Hello,大家好,我是 Sunday。 最近有很多同学来问我:“Sunday 老师,前端学起…...

VR系统的开发流程

虚拟现实(Virtual Reality,VR)系统是一种通过计算机技术模拟出的具有三维视角和交互性的虚拟环境,使用户能够沉浸在其中并与虚拟环境进行交互。这种技术通常利用头戴式显示器和手柄等设备,使用户能够感觉到仿佛身临其境…...

前端输入框校验限制不能输入中文

一般我们在做表单的时候都会有表单校验,通常都是用element提供的表单验证的功能,只需要通过 rules 属性传入约定的验证规则,如下面这样 rules: {userName: [{validator: checkUsername,trigger: "blur",},{ validator: this.checkData, trigge…...

强大的文本绘图——PlantUML

PlantUML是一款开源工具,它允许用户通过简单的文本描述来创建UML图(统一建模语言图)。这种方法可以快速地绘制类图、用例图、序列图、状态图、活动图、组件图和部署图等UML图表。PlantUML使用一种领域特定语言(DSL)&am…...

ES相关问题

在Elasticsearch(ES)集群中,节点根据其配置和角色可以分为以下几种主要类型: Master Node(主节点): 主节点负责管理整个集群的元数据,如索引的创建、删除、分片分配等。它维护着集群…...

基于Linux直接安装的Nginx版本升级方法

引言 随着版本的迭代和漏洞的发现,Nginx作为一款软件避免不了打补丁的命运。 以下基于Linux直接安装的Nginx版本升级。 以下操作均在本地虚拟机中操作验证,请验证后再线上操作。基于centos7测试。 前置资源 获取nginx的最新源码版本网址&#xff1a…...

探索设计模式的魅力:状态模式揭秘-如何优雅地处理复杂状态转换

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,并且坚持默默的做事。 探索设计模式的魅力:状态模式揭秘-如何优雅地处理复杂状态转换 文章目录 一、案例…...

力扣hot100题解(python版10-12题)

哎- -最近本来就没时间写算法 这算法怎么还这么难。。。 10、和为 K 的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1]…...

【算法】复杂度分析

第一章、如何分析代码的执行效率和资源消耗 我们知道,数据结构和算法解决的是“快”和“省”的问题,也就是如何让代码运行得更快,一级如何让代码更节省计算机的存储空间。因此,执行效率是评价算法好坏的一个非常重要的指标。那么&…...

车载电子测试学习内容

搜集了一些车载测试的学习内容,大家可以参考。...

STM32F103x 的时钟源

AHB (Advanced High-performance Bus) 高速总线,用来接高速外设的。 APB (Advanced Peripheral Bus) 低速总线,用来接低速外设的,包含APB1 和 APB2。 APB1:上面连接的是低速外设,包括电源接口、备份接口、 CAN 、 US…...

【电路笔记】-RC放电电路

RC放电电路 文章目录 RC放电电路1、概述2、RC放电电路3、RC放电电路示例当电压源从完全充电的 RC 电路中移除时,电容器 C 将通过电阻 R 放电。 1、概述 RC 放电电路利用电阻器-电容器组合的固有 RC 时间常数以指数衰减率对电容器进行放电。 在之前的 RC 充电电路教程中,我们…...

【C++STL】STL容器详解

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…...

缓存篇—缓存雪崩

什么是缓存雪崩 通常我们为了保证缓存中的数据与数据库中的数据一致性&#xff0c;会给 Redis 里的数据设置过期时间&#xff0c;当缓存数据过期后&#xff0c;用户访问的数据如果不在缓存里&#xff0c;业务系统需要重新生成缓存&#xff0c;因此就会访问数据库&#xff0c;并…...

力扣日记2.22-【回溯算法篇】47. 全排列 II

力扣日记&#xff1a;【回溯算法篇】47. 全排列 II 日期&#xff1a;2023.2.22 参考&#xff1a;代码随想录、力扣 47. 全排列 II 题目描述 难度&#xff1a;中等 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输…...

如何理解三大微分中值定理

文章看原文,自己写的只是备份 高等数学强化2:一元函数微分学 中值定理 极值点 拐点_一元函数中值定理-CSDN博客 高等数学强化3:一元函数积分学 P积分-CSDN博客 高等数学强化3:定积分几何应用-CSDN博客...

Linux--自定义shell

shell shell就是操作系统提供给用户与操作系统进行交互的命令行界面。它可以理解为一个用户与操作系统之间的接口&#xff0c;用户可以通过输入命令来执行各种操作&#xff0c;如文件管理、进程控制、软件安装等。Shell还可以通过脚本编程实现自动化任务。 常见的Unix系统中使…...

AIGC 实战:Ollama 和 Hugging Face 是什么关系?

Ollama和 Hugging Face 之间存在着双重关系&#xff1a; 1. Ollama是 Hugging Face 开发并托管的工具&#xff1a; Ollama是一个由 Hugging Face 自行开发的开源项目。它主要用于在本地运行大型语言模型 (LLM)&#xff0c;特别是存储在 GPT 生成的统一格式 (GPT-Generated Un…...

Gitee教程2(完整流程)

1.配置git git config --global user.name "用户名" git config --global user.email "密码" 如何获取&#xff1f; gitee右上角加号点击新建仓库&#xff0c;仓库名随便起一个就行 找到这条命令&#xff0c;把这两句一个一个复制到vscode终端就行 2.创建g…...

Go 1.22 中的 for 循环新特性详解

目录 每次迭代都创建新变量 支持整数类型循环 小结 在 Go 语言中&#xff0c;for 循环是实现迭代的主要方式。Go 中的 for 循环非常灵活&#xff0c;有多种使用方式&#xff0c;包括传统的三部分 for 循环、类似于其他语言中的 while 循环以及迭代集合的 range 循环。 在 1…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...