文章声明:转载来源:https://www.zhihu.com/question/19834302/answer/15070774
一、前端通用学习方法
前端开发上手快,又容易得到反馈(页面效果是可见的),我推荐学习一点内容后快速实战,在实战中找到成就感,发现问题,然后再带者问题回去系統学习,如此往复。
二、基础
html + css
这部分建议在 w3school 在线教程 上学习,边学边练,每章后还有小测试。学习过程中请打开
chrome刘览器调试工具,直接命令行在内做些练习。
javascript
要学的内容实在很多,如果没有其他编程语言的基础的话,学起来可能要费些力,还是建议先在w3school上学习。之后建议马上看《javascript语言精粹》,js是一门很混乱的语言,这本书能够帮助你区分哪些是语言的精华,哪些是糟粕,对于语言精华,应该深入学习。糟粕部分能看懂别人马的代码就行,自己就不用会试了。
对于习惯看视频学习的同学,以上内容也可以在 慕课网-国内最大的T技能学习平台上学习。虽然我没用过,但好几位同学推荐过了,大概看了下,内容还不错。
数据结构和算法
正如开篇的分析,目前市场缺的是高级前端,初级到高级的门槛不在未来,而是在过去的大学基础课。
前端为什么要学这些?因为这些都是稍微复杂一点的场景解決问题的心备武器。比如,把个列表形式的地址数据,以树形乡這染到页面,或者反过来;又比如,把一个多级嵌套的数据对象,转化成扁平的map结构再提交到服务器。更关键的,数据结构和算法,是计算机的思維方式,尤其是分治递归的思想,影响到代码实现、 模块设计、乃了至到系統设计。
二、初级
有了以上基础,就可以进行一般的静态网页设计,不过对于复杂的页面还需要进一步学习。
1. css
对于css的学习,我推荐分三块:“基础概念〞"css2.1规范” "css3规范”。
必看 精通CSS(第2版)(豆辦),看完这本书你应该对:盒子模型,流动,block,inline,层叠,样式优先级,等概念非常了解了。这本确实有些年头了,但基础概念部分讲述非常清晰,可以称之为经典。ie6,
7相关的内容可以不看。css3的部分可以参考:cSS3实用指南(豆瓣)。这本书同样有些老,只是最新出版的书中没发现有特别好的。
关丁浏览器兼容性。webkit内核已成为市场主流,ie6、7已成为历史,ie3、9的市场份额在进步缩小,总之兼容IE已不在是前端工程师面试需要考察的点。
2.javascript
上而控到内容达不足以让你胜任s编程。在有了基础之后,进一步学习内容包括:
2.1.简单框架。推荐先学 zept0°,简单易用,在w3school简单学可s后,直接上手 zepto 即可完成一些简单的项目。zepto 源码简单清晰,也适合新手阅读。补充:可以使用codecademy 学javascnipt, zepto,用户休验真的很好(感谢 Tonyouyang)。学习zepto只是为了快速上手开发项目,获得成就應。同时还是要关注/S原生编性的能力,尤其随者低端刘览器份额的下降,很多zepto ApI 已经可以被原生浏觉器api替代。以天猫消费者端 h5页面为例,主要就是靠 原生/5+少量zepto api 的方式开发完成,配合pwa等浏览器最新api就可以开发出极致的用户体验。
2.2.复杂框架。是指 react. vue、angular 等不直接慢作dom的框架。这类框架建议js基础打扎实后再学习。复杂框架是用来解决复杂可题的。对于电商无线端导购页面来说原生JS足以。对于类似商家管理系統。这类交互复杂,开发量大的系統,才适合用这类框架。对于这些框架核心在于埋解理念,不要只停留在会用的层面。
2.3.javascript 语言花式。这个名字可能井不恰当,只是我找不到可以描述“面向对象”,西数式:这个两个概念的概念。javascript不完全是一个面向对象的语言,它的很多设计理念都有西数编
桯语言的影子,甚至说如果你不用面向对象,宏全可以把它理解成一门西数式编程语言。javascript
的很多语言特性,都是因为他具有西数式语言的特点才存在的。这部分推荐先学习面向对象的基本理记,对封装,继承,多态等概念要理解,维基百科,百度白科会是你的招手,另外推荐 《objectoriented javascript》,应该有中文版。对与西数式编程可以参考这篇文章:JavaScript 中的函数
式綺程实践
2.4.javascript 语言内部机制。必须弄清如下概念:js中交量的作用域,变量传递方式,西数的定义环境与执行环境,闭包,西数的四种调用方式(一般西数,对象的方法,apply. call),以及四种國用方式下,this指向的是谁。这部分内容你会在(javascript语言精粹》中详细了解。
2.5. dom编程,这个web前端工程师的校心技能之一。必读 《dom编程艺术》 ,另外 《高性能javascript》这本书中关于dom编程的部分讲的也很好。
2.6. 网络编程,这部分相对简单,就这些关键字,自己搜素学习即可:fetch, websocket,
isonp, cors, formData。男外、Ajax已経波 Fetch Standard 取代,学 fetch api 即可,如果遇到不拿诺面武官还任问 ajax 的事情,直接跟他讲你对fetch的理解即可。
2.7.es5,es6。现在开发js大部分基于es5的,ie8l以下通过es5-shimQ。但利用一些工具,现在已经可以直接写es6代码了,尤其在reactjsa, nodejs类型的项目中。对于从es5,es6每个阶段js发生了哪些变化都需要系統学习,学习顺序建议是 Javascript基础->es5->es6,越靠前的越重要。一些参考链接:ECMAScript 5 compatibility tableECMAScript 6入门ES5《 张鑫旭
3. html5
需要了解htm/都提供了哪些api,然后项目中用起来。这部分没有什么难理解的,关键在于能用
html5解决业务问题,以及不支持html5的浏览器的降级方案。这部分体现了前端的一个思想:面向末来编程,尽早将新技术引入业务中来,而不是过分考惠兼容性向题,进而号致面向过去编程。
四、中級
初级阶段的目标是能写出可以运行页面。中级阶段的目标则是以更快的速度,写出体验更好的页面。
1. 高内聚.低耦合
如果说数据结构和鲜法是从初级到高级的第一道门槛,能否写出高内聚、低稱合的代码,则是第二道门榴。
这部分是《设计模式》课程的主要内容,在《敏捷软件开发-榄式,原则与实战》 这部分书中也有更好解读,这里只能简单说下我的理解:
高内聚和低糯合的核心是内聚什么?解糯什么? 简单来说就是一个分类问题,展开来说分类的原则包括:变化的角度,未来可能变化和不太可能受化的代码需要解糯;功能的角度,不同职能的代码必须解糯。从变化的角度埋解,对应的原则包括:开放一封闭原则 (OCP)、 Liskov替換原则(LSP)、依赖倒置原则(DIP)、接口隔离原则 (ISP);
从功能的角度埋解对应的原则是:单一责任原则 (SRP)。至于单例工厂、模板、代理等等设计模式,只是这些原则之下的具体解决方案。
所以如果再有面试官去考察你的设计模式功底,要先去跟他讲你对模式之上的原则的理解。具体的模式,在不通语言范式下的用法可能不同,甚至压根没用。但模式背后的原则,却在哪都能用。
2. 极致用户体验
在webkit + v8 组合出现之后,浏览器的性能得到很大提升,以至于在多数场景下前端工程师都不会面台的什么性能可题。这其实是从初级到中级的一道隐形的门槛,很多工作多年,由于工作场景的限制,按純不到什么向题,自己也没主动学习,导致在性能优化维度—片空白。
遗憾的是业务在发展,为了更高的开发效率,前端工程和组件体系的复杂度也在提升。很多场景下,我们依然要面临性能优化的问题。《高性能javascript》 依然是这个领域的经典,部分过时内容(第五章,字符串和数组相关操作,V8已经做优化;第九章,构建部分,现在基于webpack已经有很成熟的方案了;第十章工具不用看,直接去看chrome的devtool文档)自己忽路一下即可。
总结一下:对于前端页面极致的用户体验围统这三方面:加载体验、渲染体验、操作体验。千万不可以只知道优化加载体验,5G时代即将来临,网络速度回得到进一 步提升,但CPU处理速度,貌似还没看到突破性进展,末来的用户体验问题,会更加聚焦到渲染体验和操作体验。
3.工程效率
前端项目同样面临软件生命周期的各个环节,首先是代码管理,你必须学会使用git。其次是代码的构建,如今前端代码构建已经不是简单的压缩一下了,需要进行依赖管理、模块合并、各种编译,必须要学会使用webpacka、rollup等前端构建工具,以及前端模块管埋的方式,amd, cmd, es6module 等等。
五、高级
从初级、到中级是可以根据教程(比如本文) 或者参加培训而快速达到的。但进入高级只能靠自己,就算你找到 个“高级前端研修班”
,学到了高级前端的技巧,也学不到灵魂。这里只提供一个前端知识结构,仅供进步学习的同学参考:JacksonTian/fks• GitHub
帖子还没人回复快来抢沙发