页面仔初窥"前端工程化"
今天看了几篇前端界的一位大牛--张云龙的文章,其中一篇在自己的理解范围内看得懂一些,有所收获,说的是前端工程化的事,看完算是对前端工程形成了一个模糊的概念。
现在我所接触到的前端开发,还是张云龙大神所说的“茹毛饮血”的前端时代,但是关于前端工程的概念,在我了解前端的过程中却不绝于耳。现在我所做的项目,应该还算不上复杂的工程,技术选型方面,可能还停留在选哪个UI框架上。目前所使用的最高级的工具,也只是avalon,甚至连avalon的组件化都使用甚少,只是做了一个通用的下拉选择组件。但这与文章中言明的前端工程还相差甚远,接下来我说下自己看完文章后,对前端发展为一个工程的理解。
从jQuery加Bootstrap说起
jQuery加Bootstrap,需要哪里搭哪里,复用极低,资源的依赖关系基本靠开发人员脑力记忆,这是最初级的前端开发方案,也是我现在比较熟练的方案。JS的复用,是一个public.js文件,里面是我写的一个_public模块,模块在匿名函数空间内运行,向外暴露出一个_public对象作为接口,避免污染全局的运行空间,里面是一些自己写的好用的函数和一些兼容低版本浏览器的polyfill。CSS的复用是一个public.css文件,里面根据不同的作用对象,定义了不同class,用于各个页面去复用这些样式。另外引入的各种插件的依赖关系和引入顺序,主要由人工记忆。这种方式下,我自己可以明显感觉到的缺点是:1.复用性太低,能复用的除了一些功能函数和简单的样式,没有可复用的组件,比如一个日期选择的组件都没有,于是每次需要一个功能,就要手写一个功能,最多从别处粘贴一下代码完成"复用"……2.资源的引入很复杂,不能一个import搞定一个资源,引用路径和依赖关系每次都很麻烦。比如引用一个jQuery的插件,一定要先引入JQuery,再引入插件,且有些插件会要引入多个文件,加上写这些插件的路径,事情就变得一点也不"智能"了。
avalon-我自己迈出的第一步
因为React,Angular,Vue的流行,我也接触到了这些看起来更高级一些的框架,由于Vue的文档被大家所推崇,并且还是国人尤雨溪大神的作品,所以我选择从Vue开始学起,第一次看文档是比较痛苦的,文档中说到的很多概念都没有,反反复复看了一遍又一遍,结合一些实例,总算理解了组件,父子组件的通信,组件的生命周期,路由,状态管理这些是什么,这个过程是有点痛苦的,因为从没接触过webpack, npm这些,为了能知道自己粘贴的命令行是在干什么,自己粘贴的这个webpack.config.js是在干什么,经历了一个这样的过程:
Vue里的这些都是个啥?-->不管了,弄个例子下来看看-->github上弄下来,发现不知道怎么运行起来-->原来需要用webpack啊-->原来还要npm install各种依赖包啊。这些东西一次性突然蹦出来的时候,其实我是凌乱的,之前连Node是什么都不知道啊……在这期间,发现了一篇好文章,照着做了一遍以后,很有收获,也理解了这些是在干什么了。推荐如果同样不懂这些的前端同学也可以看一看。
Vue懂了是什么,该怎么用,怎么学以后,我就跃跃欲试打算用在公司的项目中了。可是后来得知了一个噩耗,因为我们服务的客户主要还是原始人类(仅本人观点,与公司无关,客户你要怼就怼我吧),用的机器和系统所限,我们必须要兼容IE8,我了解到的Vue应该是基于getter, setter的,这些特性IE9才支持,换句话说,使用Vue是不可能了。不过我依然贼心不死,想找找有没有兼容IE8的MVVM框架,这一找还真找到了,是司徒正美大神写的avalon,看了下大神处理issue的速度,惊为天人,于是就决定使用avalon了。说实话,avalon的文档的确对新手很不友好……可能是因为版本更新飞快吧……不过大神写的教程可比文档要好,因为还带着版本更新日志,看完以后总算能开始做事了。其实这也是我第一次了解到设计模式,用了avalon以后,比如想写一个面板切换,是这样的:
main.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>test</title>
<script type="text/javascript" src="avalon.js"></script>
<script type="text/javascript" src="main.js"></script>
</head>
<body>
<div ms-controller="app" class="ms-controller">
<button type="button" ms-click="@panel = 'panel1'">面板1</button>
<button type="button" ms-click="@panel = 'panel2'">面板2</button>
<button type="button" ms-click="@panel = 'panel3'">面板3</button>
<div ms-visible="@panel === 'panel1'"></div>
<div ms-visible="@panel === 'panel2'"></div>
<div ms-visible="@panel === 'panel3'"></div>
</div>
</body>
</html>
main.js:
var appVm = avalon.define({
$id: 'app',
panel: 'panel1'
})
ms-click是绑定click事件,ms-visible将根据它的表达式的值,控制它所在的元素的显示隐藏,这样就很容易看懂了。这么做有一个好处,我们可以将注意力更多地关注在虚拟模型"appVm"上,控制它的内容的值就可以了,avalon将自动为我们完成从虚拟视图到视图的渲染。avalon还有一个组件的模块,可以生成自定义的组件,不过这个组件没有那么多指令可以用,也没有那么灵活,但是有生命周期,所以还是可以提高一些代码的复用性的。我也是刚学习MVVM框架,我相信用先进的设计模式,能够做的事情肯定不止这点,用得好将会非常厉害!
回到前端工程化 - 压缩和资源合并
以下的内容都是我还不了解,正在或者将要学习的,更多是记录和摘要。
当技术选型完成以后,除了开发,代码的运行效率也成了前端需要关注的点,于是就引出了代码的压缩,校验,和资源合并的问题。我所理解的代码压缩可以让文件变得更小,用于开发的日志功能和debug功能都会被压缩掉,这样才可以刚才地用于生产环境。代码校验其实我是不懂的,在将来接触到之前,我暂时把它理解成每个资源都有自己的版本,对应有签名标识和完整性问题,于是就需要对资源进行校验才能更好地构建和进行资源的整合。资源合并以后,最起码的,发送的请求的次数就减少了。做完这一步,代码的运行效率就提升了。这件事人力完成压缩在合并显然是不可能的,这样改一次源码就要手动更新一次用于生产环境的压缩后的代码,还要整合在一起,所以这些必须借助工具自动完成,这样前端工程自动化的道路才开始了。
模块化开发
这是一个我觉得很有意思的部分,模块化开发,像大神所说的,模块化开发的最大价值应该是分治。那么一个大的系统被拆成了一个个小系统,再被拆成一个个组件,这样不论是对于不同人员进行并行开发,维护,还是复用性,都是有大好处的。需要哪个JS模块或者CSS模块就直接引入,想想都觉得会减少很多重复性工作的时间。
组件化开发和资源管理
以上两点已经超出了目前我的能力范围了,之前的我还能想一想也许怎样就能实现,但这里的内容我暂时是想不到怎么实现的,所以只得先在此留坑,等我走到这一步的时候再回来填坑啦!
页面仔初窥"前端工程化"的更多相关文章
- 初窥css---包含一些概念和一些文字样式
初窥css CSS相关概念 全称是层叠式样式表.规定了html在网页上的显示样式.我们都知道css主要是负责装饰页面的,但是其实在HTML4之前,网页的样式与架构全部都是写在一起的,也是在HTML4之 ...
- Scrapy001-框架初窥
Scrapy001-框架初窥 @(Spider)[POSTS] 1.Scrapy简介 Scrapy是一个应用于抓取.提取.处理.存储等网站数据的框架(类似Django). 应用: 数据挖掘 信息处理 ...
- 前端工程化开发之yeoman、bower、grunt
上两遍文章介绍了前端模块化开发(以seaJs为例)和前端自动化开发(以grunt为例)的流程,参见: http://www.cnblogs.com/luozhihao/p/4818782.html ( ...
- scrapy2_初窥Scrapy
递归知识:oop,xpath,jsp,items,pipline等专业网络知识,初级水平并不是很scrapy,可以从简单模块自己写. 初窥Scrapy Scrapy是一个为了爬取网站数据,提取结构性数 ...
- 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML(转)
1.什么是工程化开发 软件工程的工程化开发概念由来已久,但对于前端开发来说,我们没有像VS或者eclipse这样量身打造的IDE,因为在大多数人眼中,前端代码无需编译,因此只要一个浏览器来运行调试就行 ...
- 前端工程化(二)---webpack配置
导航 前端工程化(一)---工程基础目录搭建 前端工程化(二)---webpack配置 前端工程化(三)---Vue的开发模式 前端工程化(四)---helloWord 继续上一遍的配置,本节主要记录 ...
- 前端工程化(三)---Vue的开发模式
从0开始,构建前后端分离应用 导航 前端工程化(一)---工程基础目录搭建 前端工程化(二)---webpack配置 前端工程化(三)---Vue的开发模式 前端工程化(四)---helloWord ...
- Flutter 即学即用系列博客——04 Flutter UI 初窥
前面三篇可以算是一个小小的里程碑. 主要是介绍了 Flutter 环境的搭建.如何创建 Flutter 项目以及如何在旧有 Android 项目引入 Flutter. 这一篇我们来学习下 Flutte ...
- python爬虫 scrapy2_初窥Scrapy
sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...
随机推荐
- BottomNavigationView 使用
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.Cons ...
- django 补充和中间件
配置 from django.conf import settings form组件 from django.forms import Formfrom django.forms import fie ...
- php多维数组排序
数组 array(11) { [0] => array(7) { ["food_id"] => string(2) "31" ["food ...
- python中的第三方日志模块logging
基本上每个系统都有自己的日志系统,可以使自己写的,也可以是第三方的.下面来简单介绍一下python中第三方的日志模块,入手还是比较简单的,但是也很容易给自己埋雷. 下面是我参考的资料链接 入手demo ...
- 创建列表明细应用1-使用fragment
笔记自<Android编程权威指南第二版> 第七章,创建一个列表明细应用 fragment是一种控制器对象,activity可委派它完成一些任务,这些任务通常就是管理用户界面.(管理用户界 ...
- 三. html&JavaScript&ajax 部 分
1. 判 断 第 二 个 日 期 比 第 一 个 日 期 大 如何用脚本判断用户输入的的字符串是下面的时间格式2004-11-21必须要保证用户 的输入是此格式,并且是时间,比如说月份不大于12等等, ...
- Rhythmk 一步一步学 JAVA(6): JSP 语法学习笔记
1.修改JSP页面模版: 找到MyEclips安装目录,搜索“Jsp.vtl”,找到该文件修改编码,以及一些不需要用到的代码. 2.查找项目生成的Servlet文件路径: 查看当前项目父级目录搜索 . ...
- Adjacent Bit Counts(01组合数)
Adjacent Bit Counts 4557 Adjacent Bit CountsFor a string of n bits x 1 , x 2 , x 3 ,..., x n , the a ...
- Mybatis控制台打印sql
mybatis-config.xml配置如下: <configuration> <settings> <setting name="lazyLoadingEna ...
- Python中的logging模块【转】https://www.cnblogs.com/yelin/p/6600325.html
[转]https://www.cnblogs.com/yelin/p/6600325.html 基本用法 下面的代码展示了logging最基本的用法. 1 # -*- coding: utf-8 -* ...