在前端三大框架日益变成前端必备工具时,考察一些框架的源码变成了面试必问,也是初级前端到高级前端实现晋升的有效途径之一。也有不少资深大佬推荐咱们有时间多去读源码,能很大程度提高本身的能力和认识。(大佬请绕过忽略,只是可能写给刚入门的前端同窗的一些观点)css
那么做为一名业务前端,或者一名初级前端,或者也是一名高级前端该怎么看待这个事情,有没有必要真的去研读源码,以及将这件事放在什么重要等级上呢?这也是不少前端或许扩大到程序员都一直在争议的话题:面试造火箭,实际拧螺丝。前端
其实,在咱们讨论一件事有什么价值以前,有两个问题咱们要必须清楚,1 这件事是不是有益的 2 这件事是否适合如今的本身,是否能解决本身当前的刚需。vue
在谈一些技术框架的时候,首先要认识到技术框架意味着什么,什么是咱们真的要学习的。前期,掘金还相继出现过一波的什么中止学习框架、驳中止学习框架之类的文章,起源就是由于外文的一个大佬提倡你们不要以学习框架为主为最终目的,让你们尽可能多把重心放在技术和设计思想上,而后有些人曲解了观点。个人观点也是如此,很是同意原文的观点。我本身将技术分为如下三个阶段:react
目前市场上大多数的前端属于5年之内经验的,随着大部分公司对前端的工做经验要求愈来愈高,慢慢的公司都喜欢加上一条指望3-5年的工做经验。由于前端技术在快速迭代,我最诚恳的建议就是重学前端。linux
首先,咱们有必要列一下前端的知识图谱。通常状况下,图谱上所能列出的是多数都有书籍参考或者大部分所熟悉的知识点,也就是处于第一阶段的。这时候我会推荐你们学习以及了解的内容:git
考察对源码的理解实际是考察你的技术深度,若是你能将框架中的一些设计原理越能详细的说出,理解对,说明你不但基础好,并且在技术深度上有必定的造诣。固然不得不说,随着这些内容变成面试必问题,这类问题的答案在网上有很是多的版本,而不少开发者可能会不求甚解的去背,甚至在不理解、基础很差的状况下,必定要看懂源码的整个内容。若是咱们的基础不是特别好,当务之急仍是基础牢固一点。程序员
那么其实,若是你的项目具备必定难度或者表明性,能体现你的技术深度,也是何尝不可的,但大多码农可能没有特别典型的项目能真实体现本身的所有能力,尤为是不少公司业务驱动的前提下,即便你有较好的技术可能也没有空间去发展。es6
考察你是否读了源码也是为了考察你是不是属于极客类型的码农,意味着你可能很喜欢学习研究一些代码,对技术具备更高的兴致,具备更好的潜力。github
那么其实,若是你不读框架源码,你能常常关注一些大佬的博客或者技术贴,或者常常参与一些界内的论坛,那么也能够用来证实你这点符合要求。面试
这点是最直接的目的,由于考察前端基础可能对于3年甚至更久经验来讲,太没有办法过滤出什么了,因此考察框架源码是为了过滤出你和其余人的差异,从中选择出更具备优点的候选人。
无论公司提出这样的面试题是否合理,咱们都该以正确平和的心态去理解这件事自己,不要有不平衡或者以为这样考核没价值。公司怎样筛选人才是公司的权利,或者说是面试官的面试标准,咱们能作的只是让本身尽量优秀,在这方面可能的话花出一些时间了解一下。
不管何时,技术基础都是在最重要的部分,咱们应该让本身的技术基础足够扎实,这样可以减小一些低级问题,可以快速的解决一些问题,也可以在框架更新迭代的时候,不由于框架迭代而心慌,由于不管框架怎么迭代,其都是基于基础api而设计封装出的一些api。
实战能力是最实际的能力,我也称这点为工做技能,解决实际问题的能力。咱们作一切的学习以及研究都是为了解决实际的问题,而不是为了学术或者为了好看或者kpi.这里的实战能力就是针对一些需求,最好与相应技术的对应,或者能够作必定的关联。当符合某些条件时,咱们可以根据已有的知识点,提出完成需求所应该具备的技术方案,以及其细节处的收益和风险点。
攻关能力,是指可以为公司提供技术储备以及解决重大的技术难题。尤为是目前公司内或者网络上缺乏比较相似的成熟的、针对性的方案时。
咱们学习框架,不建议形式同样的去看每行代码,而后最终结果是咱们看完了整个框架每一个地方都知道怎么实现的了,由于这样作就像咱们要抄一遍课文,而后每一个地方加上注解同样,当然熟悉了,但没有什么直接价值。
我建议咱们要至少处于如下4种角度去学习源码:
1 为了更好的理解和使用框架。就像以前不少人都会看api使用jq同样,实际上不少人不能正确合理高效的使用。咱们读源码是为了让咱们更好的理解框架为何能实现这样的功能,以及咱们怎样才能更好的用好,好比像基于vue框架写的ui框架,咱们能够认为那些写ui框架的人比较好的理解了框架的一些设计思想。
2 学习设计思想。在没有很好地项目代码做为参考学习的案例时,其实咱们最好的案例就是各个框架的源码,咱们在读源码时,要清楚每一个关键点的设计整体是依赖于什么实现的,而不是记住具体的代码。好比双向绑定核心就是依赖于对象的定义属性增长监听,好比自定义事件的核心是发布订阅机制,好比keep-alive的实现的基本原理是依赖数据缓存节点等。也许框架里写了不少api,实现了不少功能,可是其一些核心的设计上可能用到的设计思想都是同样的,咱们不须要重复的学习理解每一个api是具体怎么写代码的。
3 代码技巧和代码风格。一个框架被开源被大多数人使用,咱们还要从中学习框架的代码风格,代码组织方式,代码的技巧,这些都是只学会基础和设计模式后还须要提升的部分。
4 更多的去延伸场景,针对性的学习。每当咱们读一段源码时,要将之以一个新的角度去解读,而不是以框架的某个文件,某种算法单独的局限于这个场景去分析。咱们须要为咱们本身想总结的内容找出一个更加独立的场景和技术话题,而后综合本身看到的几个框架文件,思考得出本身的答案。
就到这里了,但愿你们有不一样见解积极发言,下次在看完源码以后可以总结出一些不一样的文章。