《从零构建前后分离的web项目》准备 - 前端了解过关了吗?

前端基础架构和硬核介绍

技术栈的选择

首先我们构建前端架构需要对前端生态圈有一切了解,并且最好带有一定的技术前瞻性,好的技术架构可能日后会方便的扩展,减少重构的次数,即使重构也不需要大动干戈,我通常选型技术栈会参考以下三点:

一、提出自身业务的需求

  • SEO 是否非常重要?
  • 主要面向:移动端还是 pc 端?
  • 是否有开发 app 的规划?

有了这样的问题我们可以带着问题去重点选型一些这写问题技术方案比较成熟的技术栈。

二、自身是否成熟,文档是否友好

这里举一个以前开发过程中实际遇到的,当时为了优化用户体验,节省开发效率 选型了一款 MVVM 轻量框架,可惜当时没有决定权,CTO 选型了 avalon

当时之所以没有选择 backbone ,主要是因为没有成熟的中文文档,考虑到团队的流动性和上手性暂时没做考虑,最终选择了 司徒正美的 avalon 当时来说还是比较前卫的,也有一些以去哪网为首的大公司都在用。我们当时用的时候 avalon2 刚出不久,直接用的 2.0,使用过程也出现了一点问题:文档离散,这一块那一块,存在后置性,生态少,扩展性价比不高 ,有时候遇到匪夷所思的 bug 寻找原因翻了几遍 demo 、文档 可能会找到答案,没有重点标识。当然就当时来说确实是给我们提升了部分开发效率,但是我可能当时更偏向 Angular 或 vue 的。因为他们有无以伦比的生态圈和各种问题的技术方案以以及完善的开发者文档,值得一提的是 avalon 的作者是兼职维护的,如果全栈运营的话,我相信远比现在更好,看一看 avalon 的源码也会对自己有不少的提升。对于生产的技术选型要更加谨慎。

三、了解其生态系统

上文提到了生态系统,以我比较常用的 vue 来举例,vue 发展至今仅官方为我们提供了以 vuex、 vue-router、 vue-loader、 vue-cli、 vuepress、 vue-devtools、 vue-ssr 为首的 89 个开源项目,包括无数的 vue 相关的 UI 库,vue 插件 甚至是近两年淘宝提供的 Hybridweex 的支持

截止今天 github 开源的 与 vue 相关的项目多达 167,752 个,与 angular 相关的多达 416,811 个,与 react 相关的 多达 594,272 个。

统计时间 2018-09-01

我想有了这样的生态支持,完全可以满足我们中小项目的 95% 以上的需求,至于比较哪个更强是没有意义的 。

因为比较熟悉让我斗胆私自选择 vue 作为我们的 SPA 主架构

四、画出我们期望的前端基础架构模型

因为我们上一章选型了 Vue,如果只考虑前端我们最初的想法:技术栈大概是这样的:

通过 node 和 webpack 的支持 把 vue 组件 build 打包成传统元素,发布到 http 服务中,请求后端服务。

随后可能是这样的:

随着目前主流第三方库的越来越多和技术的尝鲜、客户端的需求、或被动[不得不用]、或主动的去引用了 babel less sass *.loader 和 hybrid 等组件库。

再后来的技术栈需要我们根据真正踩坑之后才会逐步完善

可能是 polyfill 懒加载 xss protobuf 等 针对 浏览器兼容速度优化SEO通信协议 等具体问题。所以,前期可以不用过多考虑,我们只要知道:这个问题我们是可以解决的,但是现在可以先不去考虑,有些同学,太过于“完美主义”以至于想法不错,但动起手来做了几天就不做了,完美主义害死人

了解 Webpack

WebPack 可以看做是模块打包机器,它可以分析你的项目结构,找到 JavaScript 模块以及其它的一些浏览器不能直接运行的拓展语言:Stylus、Scss、less、TypeScript、CoffeeScript 等,并将其转换和打包为合适的格式供浏览器使用。比较常用的还可以通过 webpack-dev-server 进行开发模式的热更新

WebPack 是一种模块化开发的方案

当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle

webpack 通过 loader 可以支持各种语言和预处理器编写模块,最后打包为一个(或多个)浏览器可识别的 *JavaScript css * 文件

目前支持的 loader 列表

了解 ES6

官方说法

ECMAScript 6(简称ES6)是于2015年6月正式发布的JavaScript语言的标准,正式名为ECMAScript 2015(ES2015)。它的目标是使得JavaScript语言可以用来编写复杂的大型应用程序.

科普

很多人总是搞不清楚 ES 这些东西,这里大白话讲讲: 他们的先后顺序是:ES5、ES6(ES2015)、ES7、ES8

在 2015 年 6 月 ES6 的第一个版本发布, 正式名称就是 《ECMAScript 2015 标准》(简称 ES2015)算是 2011 年 ECMAScript 5.1 之后的 6.0版本 2016 年 6 月,小幅修订的《ECMAScript 2016 标准》(简称 ES2016)[因为改动小,其实他是 6.1 版本,但总有人愿意叫它 ES7 ,不标准的] 2017 年 6 月发布 的《ECMAScript 2017 标准》(简称 ES2017) [因为改动小,其实他是 6.2 版本,但总有人愿意叫它 ES8 ,不标准的]

就像 Kubernetes 人们开他起了一个 K8S 的名字 (KS 中间有 8 个单词),他是不标准的

了解 Babel Traceur

Babel、Traceur 是一个编译JavaScript的平台,它可以编译代码帮你达到以下目的:

JavaScript.next-to-JavaScript-of-today compiler

今天就使用未来的 JavaScript

截止发布日期 (2018-09-04) ,没有一款完全支持ES6的JavaScript代理(无论是浏览器环境还是服务器环境),所以热衷于使用语言最新特性的开发者需要将ES6代码转译为ES5代码。

让你能使用最新的JavaScript代码(ES6,ES7...),而不用管新标准是否被当前使用的浏览器完全支持;

ES7 作者完全没精力看 ,不过 Bable 逐渐替代了 Google 的 Traceur 成为主流了,我是个俗人,所以我选 Bable

了解 Sass Less Stylus

Sass 是不是违反了中国的广告法了??

Sass 、Stylus 和 Less 之类的预处理器是对原生CSS的拓展,它们允许你使用类似于variables, nesting, mixins, inheritance等不存在于CSS中的特性来写CSS,CSS预处理器可以这些特殊类型的语句转化为浏览器可识别的CSS语句。

  • 一张表格对比三语言
语言实现特性赋值缩进
SassRuby变量$开头$var: value不需要
LessJavaSript变量@开头@var: value不需要
StylusNodeJs不能使用@开头var:10都可以

你现在可能都已经熟悉了,上文讲 WebPack 讲过: webpack 里使用相关 loaders 进行配置就可以使用了,以下是常用的CSS 处理loaders:

Less Loader Sass Loader Stylus Loader

自己去找:loader 列表

像:哪种语言更好、使用的更多、更简单 容易引起争议的 博主不想讨论,看自己喜好

了解 Electron

一个可以使用使用: JavaScript, HTML 和 CSS 构建跨平台的桌面应用的框架,也算 hybrid 的一种,主要场景是 PC 端,没啥好说的。

值得一提的是 Visual Studio Code 、Atom、GIthub Desktop 都是基于此构建的,有时候按 CMD option i 有惊喜哦

基于 Electron 开发的APP列表

总结

这些也就基本是前端比较常用的主流技术栈组成的骨架了,之后的各种 webpack 插件,各种工具库的选型随着项目实战引入更好,现在讲大家也记不住。

别急实战中的前端架构要比现在复杂得多,跟我一起循序渐进的的来。

下一章为大家实战:《如何快速构建项目并升级为一个规范的前端骨架》

关于我

  • 目前在写《从零构建前后分离项目》系列,修正和补充以此为准

  • 不断更新的 项目实践地址

往期文章

《从零构建前后分离 WEB 项目》 序 - 开源的意义

《从零构建前后分离web项目》:开篇 - 纵观WEB历史演变

《从零构建前后分离web项目》探究 - 深入聊聊前后分离架构

《从零构建前后分离web项目》准备 - 前端了解过关了吗?前端基础架构和技术介绍

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

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

相关文章

联想w540笔记本参数_2020年12月笔记本电脑推荐!联想、惠普、华为笔记本电脑推荐!18款高性价比笔记本电脑推荐!!!...

前言&#xff1a;笔记本电脑&#xff0c;主要分为三种&#xff1a;轻薄本<全能本<游戏本。轻薄本&#xff0c;又称办公笔记本电脑&#xff0c;因为轻薄方便携带&#xff0c;通常用于移动办公使用。全能本&#xff0c;就是把轻薄本的集显变成了小独显&#xff0c;增加了独…

【BZOJ 1098】办公楼(补图连通块个数,Bfs)

补图连通块个数这大概是一个套路吧&#xff0c;我之前没有见到过&#xff0c;想了好久都没有想出来QaQ 事实上这个做法本身就是一个朴素算法&#xff0c;但进行巧妙的实现&#xff0c;就可以分析出它的上界不会超过 $O(n m)$。 接下来介绍一下这个技巧&#xff1a; 很显然一个…

Spring MVC:资源

我从博客读者那里收到的最常见的问题之一是如何在Spring MVC的应用程序中使用CSS和javascript文件。 因此&#xff0c;这是撰写有关Spring MVC中资源使用情况的文章的好机会。 通常&#xff0c;我将使用基于Java的配置方法。 如今&#xff0c;很难想象没有CSS和JavaScript文件…

c语言读文件空格间隔,c语言文件流实现按单个词读取(以空格、分号等作间隔)...

c语言文件流实现按词读取(以空格、分号等作间隔)1.基本描述在之前的作业中&#xff0c;认真编写代码&#xff0c;从中发现不少知识积累上的欠缺。编程中使用到的c语言文件读取&#xff0c;要求是按照获取到一个完整的词&#xff0c;并对其进行处理。写有java或c语言源程序的.tx…

山东专升本access知识点_全国各省份每年的专升本考试大纲啥时候公布?考纲公布之前你该做什么?...

?星标/置顶专升本招考下一个上岸的就是你最近小编在专升本招考后台收到很多同学的留言&#xff0c;大多同学都是看到好多省都公布了专升本考试政策和大纲&#xff0c;却迟迟不见自己所在的省份出&#xff0c;于是火急火燎地找到小编来问&#xff1a;XX省的考试大纲到底啥时候出…

观点|蚂蚁金服玉伯:我们是如何从前端技术进化到体验科技的?

小蚂蚁说&#xff1a;王保平&#xff0c;花名玉伯。熟悉前端和SeaJS的人一定对这个名字不陌生。作为前端领域的一枚大大大牛&#xff0c;他现在担任蚂蚁金服体验技术部负责人。本文&#xff0c;他分享了他从前端一路进阶升级到体验科技的个人思考&#xff0c;并详细介绍了体验科…

excel 电阻并联计算_电路分析基础(5)-关于电阻,有些话我还是要说一说

电阻定义&#xff1a;导体对电流的阻碍作用就叫该导体的电阻。不同的导体&#xff0c;电阻一般不同&#xff0c;电阻是导体本身的一种性质。定义式如下&#xff1a;因此&#xff0c;我们应该清楚了欧姆定律的本质到底是什么&#xff0c;为啥电阻跟电压和电流没有关系&#xff0…

针对新手的Java EE7和Maven项目–第2部分–为我们的应用程序定义一场简单的战争...

从第一部分恢复 第1部分 我们刚刚定义了父 pom。 一种特殊的pom类型&#xff0c;它最终定义了我们的应用程序将要使用的库。 它还配置了所有用于打包我们应用程序每个模块的Maven工具。 您可以在此处 签出 -1部分示例代码。 因此&#xff0c;到目前为止&#xff0c;在将要开发…

postman实现从response headers中获取cookie,并将其设置为环境变量

1.最近在学习postman的使用方法,为了保证后续模块操作&#xff0c;必须在登录时获取的session值&#xff0c;并将其设置为环境变量&#xff0c;session的位置处于response headers里面返回的set-cookie参数&#xff0c;并且将set-cookie中的session通过split方法截取出来. 写法…

010 pandas的DataFrame

一&#xff1a;创建 1.通过二维数组进行创建 2.取值 取列,取位置的值 3.切片取值 这个和上面的有些不同&#xff0c;这里先取行&#xff0c;再取列 4.设定列索引 这里使用的行索引与上面不同。 5.通过字典的方式创建 6.索引 包含行索引&#xff0c;与列索引 7.修改列索引 转载于…

unity烘培单个物体_Unity可编程渲染管线(SRP)教程:二、自定义着色器

本文翻译自Catlike Coding&#xff0c;原作者&#xff1a;Jasper Flick。本文经原作者授权&#xff0c;转载请说明出处。原文链接在下&#xff1a;https://catlikecoding.com/unity/tutorials/scriptable-render-pipeline/custom-shaders/​catlikecoding.com本章内容如下&…

一套比较完整的前端技术选型,需要规整哪些东西,你知道不?

1. 背景及现状 随着前端开发复杂度的日益增加&#xff0c;各种优秀的组件框架也遍地开花。同时&#xff0c;我们面临业务规模的快速发展和工程师团队的不断扩张&#xff0c;如何解决资源整合、模块开发、项目部署、性能优化等问题势在必行。 2. 目标 根据背景和现状的分析&a…

asp.net core2.0里的Nlog

Microsoft.Extensions.Logging&#xff0c;到了Version2.0.0.0&#xff0c;没了AddNlog() ? ——我找不到输出的日志&#xff01; 。。。。。经过一番百度 step1:添加个Provider 这样&#xff0c;在Startup里Configure实现一个ILoger 如果在controller里使用&#xff1f;——…

golang jwt设置过期_听说你的JWT库用起来特别扭,推荐这款贼好用的!

以前一直使用的是jjwt这个JWT库&#xff0c;虽然小巧够用, 但对JWT的一些细节封装的不是很好。最近发现了一个更好用的JWT库nimbus-jose-jwt&#xff0c;简单易用&#xff0c;API非常易于理解&#xff0c;对称加密和非对称加密算法都支持&#xff0c;推荐给大家&#xff01;简介…

随机验证码 pillow

安装 pip3 install pillow 基本使用 import PILfrom PIL import Imagefrom PIL import ImageDraw, ImageFontimport random 1.创建图片 from PIL import Image img Img.new(mode"RGB",size(120.30),color(255,255,255))# 在图片查看器中打开 # img.show()# 保存在本地…

微信小程序裁剪图片成圆形

前言 最近在开发小程序&#xff0c;产品经理提了一个需求&#xff0c;要求微信小程序换头像&#xff0c;用户剪裁图片必须是圆形&#xff0c;也在github上看了一些例子&#xff0c;一般剪裁图片用的都是方形&#xff0c;所以自己打算写一个小组件&#xff0c;可以把图片剪裁成圆…

MFC控件编程之组合框跟列表框

MFC控件编程之组合框跟列表框 一丶简介 如果要使用组合框跟列表框.那么就要知道.组合框列表框是最核心的东西就是索引. 索引是从0开始的. 二丶组合框列表框常用的方法 AddString(字符串) 添加一个字符串.放到最后面. DeleteString(索引); 删除指定索引的字符串. int GetCurSe…

多重继承_Python 和 Java 基础对比 10 —— 类的封装、继承和多态

Python大星一、Python 类的封装、继承和多态封装继承Python 支持多父类的继承机制&#xff0c;所以需要注意圆括号中基类的顺序&#xff0c;若是基类中有相同的方法名&#xff0c;并且在子类使用时未指定&#xff0c;Python 会从左至右搜索基类中是否包含该方法。一旦查找到则直…

前端也要会的数据结构 (不定期更新篇)

前端的软肋 一说到前端大家脑子里只有&#xff0c;布局、展示数据、修改样式等等。可是数据是哪里来的呢&#xff1f;后端给的后端给的。数据的结构呢&#xff1f;后端给啥用啥。 这就是前端的一个软肋。我们的业务让我们并不需要过深入的了解数据结构&#xff0c;数据结构和…

鸿蒙系统8月9日发布,8月9日,华为发布EMUI10.0系统+展示鸿蒙系统

8月9日&#xff0c;华为将召开华为全球开发者大会&#xff0c;本次大会邀请了5000名全球开发者、1500位合作伙伴&#xff0c;是华为历来规模最大的一次会议。在华为开发者大会上&#xff0c;华为将推出EMUI 10.0系统&#xff0c;由华为消费也业务软件总裁王成录主讲。EMUI是手机…