基础 - 前端知识体系详解

一、前端三要素

HTML(结构): 超文本标记语言(Hyper Text Markup Language),决定网页的结构和内容。
CSS(表现): 层叠样式表(Cascading Style Sheets),设定网页的表现样式。
JavaScript(行为): 是一种弱类型脚本语言,其源代码不需经过编译,而是由浏览器解释运行,用于控制网页的行为

表现层(CSS)

CSS层叠样式表是一门标记语言,而不是编程语言,因此不可以自定义变量,不可以引用等,换句话说就是不具备任何语法支持,它的主要缺陷如下:

  • 语法不够强大,比如无法嵌套书写,导致模块化开发中需要书写很多重复的选择器
  • 没有变量和合理的样式复用机制,使得逻辑上相关的属性值必须以字面的形式重复输出,导致难以维护
  • 这就导致了我们在工作中无端增加了许多工作量。为了解决这个问题,前端开发人员会使用一种称之为【CSS预处理器】的工具,提供CSS缺失的样式层复用机制,减少冗余代码,提高样式代码的可维护性。大大提高了前端在样式上的开发效率

什么是CSS预处理器

CSS预处理器定义了一种新的语言,其基本思想是用一种专门的编程语言,为CSS增加了一些编程的特性,将CSS作为目标生成文件,然后开发者就只要使用这种语言进行CSS的编码工作。转化成通俗易懂的话来说就是"用一种专门的编程语言,进行Web页面样式设计,再通过编译器转化为正常的CSS文件,以供项目使用"

常用的CSS预处理器有哪些

  • SASS:基于Ruby,通过服务端处理,功能强大,解析效率高。需要学习Ruby语言,上手难度高于LESS
  • LESS:基于NodeJS,通过客户端处理,使用简单。功能比SASS简单,解析效率也低于SASS,但在实际开发中足够了,所以我们后台人员如果需要的话,建议使用LESS

行为层(JavaScript)

JavaScript是一门弱类型脚本语言,其源代码在发往客户端运行之前不需要经过编译,而是将文本格式的字符代码发送给浏览器由浏览器解释运行

Native原生JS开发原生JS开发,也就是让我们按照【ECMAScript】标准的开发方式,简称是ES,特点是大部分浏览器都支持。截止到目前,ES3标准已发布如下版本:

ES3
ES4(内部,未正式发布)
ES5(全浏览器支持)
ES6(常用,当前主流版本)
ES7
ES8
ES9(草案阶段)

区别就是逐步增加新特性浏览器不支持新特性是前端发展的一个很大阻碍,需要进行额外的操作,把ES6写完的代码打包编译成ES5,这样才能让全浏览器支持

TypeScript微软的标准

TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。由安德斯·海尔斯伯格(C#、Delphi、TypeScript之父;.NET创立者)主导

该语言的特点就是除了具备的ES的特性之外还纳入了许多不在标准范围内的新特性,所以会导致很多浏览器不能直接支持TypeScript语法,需要编译后(编译成JS)才能被浏览器正确执行

JavaScript框架

  • JQuery:大家熟知的JavaScript框架,优点是简化了DOM操作,缺点是DOM(W3C 文档对象模型,是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式)操作太频繁,影响前端性能;在前端眼里使用它仅仅是为了兼容IE6、7、8;
  • Angular:Google收购的前端框架,由一群Java程序员开发,其特点是将后台的MVC模式搬到了前端并增加了模块化开发的理念,与微软合作,采用TypeScript语法开发;对后台程序员友好,对前端程序员不太友好;最大的缺点是版本迭代不合理(如:1代 -> 2代,除了名字,基本就是两个东西);
  • React:Facebook出品,一款高性能的JS前端框架;特点是提出了新概念【虚拟DOM】用于减少真实DOM操作,在内存中模拟DOM操作,有效的提升了前端渲染效率;缺点是使用复杂,因为需要额外学习一门【JSX】语言;
  • Vue:一款渐进式(等用到一个新功能再学习这个功能)JavaScript框架,所谓渐进式就是逐步实现新特性的意思,如实现模块化开发、路由、状态管理等新特性。其特点是综合了Angular(模块化)和React(虚拟DOM)的优点;
  • Axios:前端通信框架;因为Vue的边界很明确,就是为了处理DOM,所以并不具备通信能力,此时就需要额外使用一个通信框架与服务器交互;当然也可以直接选择使用jQuery提供的AJAX通信

 

UI框架

  • Ant-Design:阿里巴巴出品,基于React的UI框架
  • ElementUI:饿了么出品,基于Vue的UI框架(主流)
  • Boostrap:Twitter推出的一个用于前端开发的开源工具包
  • AmazeUI:一款HTML5跨屏前端框架

JavaScript构建工具

  • Babel:JS编译工具,主要用于浏览器不支持的ES新特性,比如用于编译TypeScript
  • WebPack:模块化打包器,主要作用是打包、压缩、合并及按序加载

二、前后端分离的演变史

1.后端为主的MVC时代

为了降低开发的复杂度,以后端为出发点,比如:Struts2、SpringMVC等框架的使用,就是后端的MVC时代;

以SpringMVC流程为例(注意区分:MVC是模式,SpringMVC是框架)

  • 发起请求到前端控制器(DispatcherServlet)
  • 前端控制器请求HandlerMapping查找Handler,可以根据xml配置、注解进行查找
  • 处理器映射器HandlerMapping向前端控制器返回Handler
  • 前端控制器调用处理器适配器去执行Handler
  • 处理器适配器去执行Handler
  • Handler执行完成给适配器返回ModelAndView
  • 处理器适配器向前端控制器返回ModelAndView,ModelAndView是SpringMVC框架的一个底层对象,包括Model和View
  • 前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(JSP)
  • 视图解析器向前端控制器返回View
  • 前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域
  • 前端控制器向用户响应结果

优点

MVC是一个非常好的协作模式,能够有效降低代码的耦合度,从架构上能够让开发者明白代码应该写在哪里。为了让View更纯粹,还可以使用Thymeleaf、Freemarker等模板引擎,使模板里无法写入Java代码,让前后端分工更加清晰

缺点

前端开发重度依赖开发环境,开发效率低,这种架构下,前后端协作有两种模式:

  • 第一种是前端写DEMO,写好后,让后端去套模板。好处是DEMO可以本地开发,很高效。不足是还需要后端套模板,有可能套错,套完后还需要前端确定,来回沟通调整的成本比较大
  • 另一种协作模式是前端负责浏览器端的所有开发和服务器端的View层模板开发。好处是UI相关的代码都是前端去写就好,后端不用太关注,不足就是前端开发重度绑定后端环境,环境成为影响前端开发效率的重要因素

前后端职责纠缠不清:模板引擎功能强大,依旧可以通过拿到的上下文变量来实现各种业务逻辑。这样,只要前端弱势一点,往往就会被后端要求在模板层写出不少业务代码。还有一个很大的灰色地带是Controller,页面路由等功能本应该是前端最关注的,但却是由后端来实现。Controller本身与Model往往也会纠缠不清,看了让人咬牙的业务代码经常会出现在Controller层。这些问题不能全归结于程序员的素养,否则JSP就够了

对前端发挥的局限性:性能优化如果只在前端做,空间非常有限,于是我们经常需要后端合作,但由于后端框架限制,我们很难使用【Comet】、【BigPipe】等技术方案来优化性能

2.基于AJAX带来的SPA时代

时间回到2005年AJAX(Asynchronous JavaScript And XML,异步JavaScript和XML,老技术新用法)被证实提出并开始使用CDN作为静态资源存储,于是出现了JavaScript王者归来(在这之前JS都是用来在网页上贴广告的)的SPA(Single Page Application)单页面应用时代

优点

这种模式下,前后端的分工非常清晰,前后端的关键协作点是AJAX接口。看起来是如此美妙,但回过头来看,这与JSP时代区别不大。复杂度从服务端的JSP已到了浏览器的JavaScript,浏览器端变得很复杂。类似SpringMVC,这个时代开始出现浏览器端的分层架构:

缺点

  • 前后端接口的约定:如果后端的接口一塌糊涂或者业务模型不够稳定,那么前端开发会很痛苦;不少团队有也有类似尝试,通过接口规则、接口平台等方式来做。有了和后端一起沉淀的接口规则,还可以用来模拟数据,使得前后端可以在约定接口后实现高效并行开发
  • 前端开发的复杂度控制:SPA应用大多以功能交互型为主,JavaScript代码过十万行很正常。大量JS代码的组织,与View层的绑定等,都不是容易的事情

3.前端为主的MV*时代

此处的MV*模式如下:

  • MVC(同步通信为主):Model、View、Controller
  • MVP(异步通信为主):Model、View、Presenter
  • MVVM(异步通信为主):MOdel、View、ViewModel

为了降低前端开发复杂度,涌现了大量的前端框架,比如:AngularJS、React、Vue.js、EmberJS等,这些框架总的原则是先按类型分层,比如Templates、Controllers、Models,然后再在层内做切分、如下图:

优点

  • 前后端职责很清晰:前端工作在浏览器端,后端工作在服务端。清晰的分工,可以让开发并行,测试数据的模拟不难,前端可以本地开发。后端则可以专注于业务逻辑的处理,输出RESTful
  • 前端开发的复杂度可控:前端代码很重,但合理的分层,让前端代码能各司其职
  • 部署相对独立:可以快速改进产品体验

缺点

  • 代码不能复用。比如后端依旧需要对数据做各种校验,校验逻辑无法复用浏览器端的代码。如果可以复用,那么后端的数据校验可以相对简单化
  • 全异步,对SEO(Search Engine Optimization,搜索引擎优化)不利,往往还需要服务端做同步渲染的降级方案。静态资源通过同步加载,也就是直接将内容写在HTML文件里,是可以直观看到的信息。这样就有利于搜索引擎爬取关键词。相反的,异步加载,例如AJAX,只用事件触发的时候才会加载,这种加载方式就是对搜索引擎爬取关键词无益的。
  • 性能并非最佳,特别是移动互联网环境下
  • SPA不能满足所有需求,依旧存在大量多页面应用。URL Design需要后端配合,前端无法完全掌控

4.NodeJS带来的全栈时代

前端为主的MV*模式解决了很多很多问题,但如上所述,依旧存在不少不足之处。随着NodeJS的兴起,JavaScript开始有能力运行在服务端。这意味着可以有一种新的研发模式

在这种研发模式下,前后端的职责很清晰。对前端来说,两个UI层各司其职:

  • Front-End UI Layer 处理浏览器层的展现逻辑。通过CSS渲染样式,通过JavaScript添加交互功能,HTML的生成也可以放在这层,具体看应用场景
  • Back-End UI Layer 处理路由、模板、数据获取、Cookie等。通过路由,前端终于可以自主把控URL Design,这样无论是单页面应用还是多页面应用,前端都可以自由调控。后端也终于可以摆脱对展现的强关注,转而可以专心于业务逻辑层的开发

通过Node,Web Server层也是JavaScript代码,这意味着部分代码可前后复用,需要SEO的场景可以在服务端同步渲染,由于异步请求太多导致的性能问题也可以通过服务端来缓解。前一种模式的不足,通过这种模式几乎都能完美解决掉

与JSP模式相比,全栈模式看起来是一种回归,也的确是一种向原始开发模式的回归,不过是一种螺旋上升式的回归

基于NodeJS的全栈模式,依旧面临很多挑战:

  • 需要前端对服务端编程由更进一步的认识。比如TCP、IP等网络知识的掌握
  • NodeJS层与Java层的高效通信,NodeJS模式下,都在服务器端,RESTful HTTP通信未必高效,通过SOAP等方式通信更高效。一切需要在验证中前行。
  • 对部署、运维层面的熟练了解,需要更多知识点和实操经验
  • 大量历史遗留问题如何过度。这可能是最大的阻力

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Mac】Downie 打开提示试用的解决办法?

前情 我们在使用 Downie 的时候,可能遇到提示试用的问题,如下图所示。 原因 旧版本的 Downie 没有卸载干净导致的。 解决办法 先使用 AppCleaner 卸载掉电脑上的 Downie 旧版本软件,必须使用 AppCleaner 卸载。重新安装 Downie 即可。

如何保证数据不丢失?(死信队列)

死信队列 1、什么是死信 死信通常是消息在特定的场景下表现: 消息被拒绝访问消费者发生异常,超过重试次数消息的Expiration过期时长或者队列TTL过期时间消息队列到达最大容量 maxLength 2、什么是死信队列 只由死信构成的消息队列是死信队列 死信队…

PhpStorm完全配置指南:打造高效PHP开发环境!

Phpstorm环境配置与应用,具体包括安装PhpStorm、配置PHP运行环境、Apache集成、调试和部署等步骤。下面将详细展开每个步骤的具体操作和注意事项。 PhpStorm的下载与安装 下载地址:访问PhpStorm的官网下载地址,选择合适的版本进行下载。建议选…

springboot、spring@JsonAlias(velue)的作用

‌JsonAlias注解用于为字段或参数指定反序列化时的别名。‌‌ 在Java开发中,‌特别是在使用Jackson库进行JSON序列化和反序列化时,‌JsonAlias注解扮演着重要的角色。‌它允许开发者为字段或参数指定一个或多个别名,‌这样在反序列化过程中&…

希尔排序,详细解析(附图解)

1.希尔排序思路 希尔排序是一种基于插入排序的算法,通过将原始数据分成若干个子序列,然后对子序列进行插入排序,逐渐减小子序列的间隔,最后对整个序列进行一次插入排序。 1.分组直接插入排序,目标接近有序--------…

玩机进阶教程-----回读 备份 导出分区来制作线刷包 回读分区的写入与否 修改xml脚本

很多工作室需要将修改好的系统导出来制作线刷包。前面分享过很多制作线刷包类的教程。那么一个机型中有很多分区。那些分区回读后要写入。那些分区不需要写入。强写有可能会导致不开机 不进系统的故障。首先要明白。就算机型全分区导出后在写回去 都不一定可以开机进系统。那么…

萌啦数据插件使用情况分析,萌啦数据插件下载

在当今数字化时代,数据已成为企业决策与个人分析不可或缺的重要资源。随着数据分析工具的日益丰富,一款高效、易用的数据插件成为了众多用户的心头好。其中,“萌啦数据插件”凭借其独特的优势,在众多竞品中脱颖而出,成…

基于SpringBoot的房屋交易平台的设计与实现

TOC springboot235基于SpringBoot的房屋交易平台的设计与实现 第1章 绪论 1.1 研究背景 互联网概念的产生到如今的蓬勃发展,用了短短的几十年时间就风靡全球,使得全球各个行业都进行了互联网的改造升级,标志着互联网浪潮的来临。在这个新…

基于Web的农产品直卖平台的设计与实现

TOC springboot266基于Web的农产品直卖平台的设计与实现 绪论 1.1 选题背景 当人们发现随着生产规模的不断扩大,人为计算方面才是一个巨大的短板,所以发明了各种计算设备,从结绳记事,到算筹,以及算盘,到…

电路板元器件识别指南:电子技术核心知识

电子设备无处不在,从我们日常使用的手机到复杂的医疗设备,背后都有一个共同的组件——电路板。电路板上的各种元器件是电子设备功能实现的基础。在此,道合顺帮助读者们理解电路板上不同元器件的作用与识别方法,从而更好地维护和使…

Spring boot logback日志框架加载初始化源码

##LoggingApplicationListener监听 Overridepublic void onApplicationEvent(ApplicationEvent event) {if (event instanceof ApplicationStartingEvent) {onApplicationStartingEvent((ApplicationStartingEvent) event);}else if (event instanceof ApplicationEnvironment…

2024最新金三银四必问面试题大全

我花了三天时间,整理了100道最经典的常见测试面试题(附答案)!完整版文档见文末! 1、所做项目的情况,主要做什么类型的测试? 2、你在测试中发现了一个bug,但是开发经理认为这不是一个…

安卓主板_MTK联发科主板定制开发|PCBA定制开发

MTK联发科安卓主板,采用MT6762八核平台方案,支持谷歌Android 11.0系统,MT6762采用ARM八核A53内核芯片、主频高达2.0GHz,GPU采用ARM PowerVR GE8329650MHZ,支持主流19201080分辨率,支持硬解H.264&#xff0c…

【TabBar嵌套Navigation案例-设置页面-解析plist Objective-C语言】

一、我们来做这个设置页面 1.先看一下我们的示例程序,当我们点击上边的这个齿轮时候, 会跳到一个Controller里边来,然后呢,这个Controller,是一个TableView,组的样式, 我们先把这个小功能,先做了,再来说设置页面里边的东西啊, 首先呢,点击这个齿轮的时候,我要找到…

常用任务管理函数

任务挂起函数 void vTaskSuspend( TaskHandle_t xTaskToSuspend ) 有比较简单的两点需要注意。 第一,使用任务挂起函数必须将INCLUDE_vTaskSuspend配置为1。 第二,实参为要挂起任务的句柄。 void vTaskSuspendAll(void) 这个…

仓库与文件的提交/修改/删除

目录 1. 创建仓库 ​编辑​编辑 2. 界面解释 3. 再创建仓库 4. 移除仓库 5. 本地添加文件到仓库 ​编辑​编辑 6. 比对,提交 7. 修改,提交 8. 查询版本号 9. 删除文件 git 是分布式版本控制工具,需要将中央服务器克隆到本地&#…

Android逆向题解-攻防世界app2

又是一个花里胡哨的题。 一通分析没啥用。 最后指令启动界面就ok。 adb shell am start -n com.tencent.testvuln/com.tencent.testvuln.FileDataActivity 还是看一眼解密代码 protected void onCreate(Bundle bundle0) {super.onCreate(bundle0);this.setContentView(0x7F030…

东南亚TikTok直播:直播专线的重要性及其优势

在东南亚地区进行TIKTOK直播时,是否需要使用专线呢?答案是肯定的。因为你的客户群体面向东南亚,需要东南亚IP直播地址,才能够推送精准的东南亚用户到你的直播间。本文将讨论使用TikTok直播专线的一些优势。 使用专线直播可以确保获…

自主导航巡检车在石油领域和相关专业中的发展和应用

随着石油行业的不断发展,特别是在勘探和生产的过程中,石油设施往往分布广泛,环境复杂。传统的人工巡检方式不仅效率低,而且面临着高风险和高成本的问题。自主导航巡检车的出现,结合了无人驾驶、传感器技术、数据分析和…

注意力机制篇 | YOLOv8改进之引入NAMAttention注意力机制 | 基于标准化的注意力模块

前言:Hello大家好,我是小哥谈。本文提出一种基于归一化的注意力模块(NAM),可以降低不太显著的特征的权重,这种方式在注意力模块上应用了稀疏的权重惩罚,这使得这些权重在计算上更加高效,同时能够保持同样的性能。我们在ResNet和MobileNet上和其他的注意力方式进行了对比…