关注公众号 前端开发博客,回复“加群”

加入我们一起学习,天天进步

转自:知乎

https://www.zhihu.com/question/425782106/answer/1543007211

前言

前端工作两年多。大部分前端原理、框架都能完全运用。工作中几乎遇不到解决不了的问题(除了那些恶心无法实现的需求)现在经常被安排去面试新人(被安排去面试,主要是工作能力比较突出的原因,公司还有很多3年以上的员工)。下面说说我的学习方法或许对你有用!

一、打好基础不用说

HTML、CSS、JavaScript 三大件,完全掌握。不懂得就直接查 MDN。HTML重点掌握语义化。区分块级和内联标签。其他查文档就好了。还有就是定义 head 里面一些meta 了解下。

CSS。重点看盒子模型,定位,层级,过渡,动画和 transform。知道原理和规则。大部分工作都是照着设计稿化。掌握上面几个99%还原也不难。接下来重点学习几种常见的布局。完了之后去搞flex。最后搞下sass、less。基本就差不多了。

JavaScript。重点来了,红宝书看一遍掌握基础,进阶去看《你不知道的 JavaScript》。就这两套足够了,别搞那么多。每个知识点搞懂。ES6基本没啥问题。下面几个问题优搞懂,优先级如下:

  • this 用法,相关原理

  • 原型/原型链

  • 闭包

  • 面向对象相关

  • 同步异步/回调/promise/async、await

  • 模块化 CommonJS, AMD

  • 先搞这懂这些比较难的概念,对你JS理解更加深入。接下来在开始看框架方面

二、框架方面

前期要会用,后期要懂原理。

新人先搞 Vue。Vue 算是比较简单的框架了,上手容易。照着官方文档来问题不大。原理方面要提高自己认识。学习怎么看源码。github常去逛逛。

学习框架之前,我其实特别建议,新人先去了解 Babel 和 webpack 不仅仅是使用。一些原理方面的东西工作中也会用到。babel 里面会有教你如何编译代码。webpack教你如和打包文件。自己手写编译器和打包工具也不是特别难。反正对之后看vue、react源码帮助挺大。

搞完 Vue 全家桶,去了解下 React,React hooks 学习下新的理念。再回过头来看Vue。你会发现他们是如此的相似去又不同。

多去实践总结,对整体框架理解会越来越深刻。

今天先马到这里。想写的太多,马上就要上班下次有空再来码...

三、如何看源码

新人刚开始看源码,会陷入两个困境中。一是无从下手。二是看了之后感觉没啥收获。

这个也很正常。一般我们熟知的框架都有个几千甚至上万个PR。太大细节会干扰你。掌握整个节奏和流程。学习原理也比较吃力。就连找个入口都像大海捞针一样。建议从下面几个方面入手:

  • 挑简单的上手。别一开始就搞 vue、react、webpack。太难,会直接劝退新人。不要为了面试而去读。反而效果不好,面试稍微问深入一点就答不出来了。平时有兴趣多琢磨琢磨。按照难易程度,函数库 < 组件库 < 框架 < 工程化 分别典型代表 lodash < vant < vue < webpack

  • 手撸简易模型。像vue, webpack, babel 都有简易项目给你撸。有的创始人(尤哥)还直播手撸。国外的更多,youtube 一搜一大堆。就算不看源码,照着写出了简易 demo 对原理和理解提升都是很大的。

  • 调试开源项目。先把项目拉下来。在vscode里面跑下,核心函数多打几个断点。看看里面变量是怎么diff的。对理解更深刻了。

看了源码是别人的,学到了是自己的。学习时候边记笔记,边思考原理,总结经验。下面来谈谈前端工程化怎么弄。

四、前端工程化

现在最流行的打包工具 webpack 用起来。当然直接用 vue-cli2、vue-cli3、create-react 都是可以的。但是 webpack 相关还是得掌握。

首先重点搞下babel、webpack。学习下编译,打包的原理。自己配置下 webpack。尝试自己去写下下 webpack 的 loader 和 plugin。学习这些之前要懂一点 node.js, node.js 不需要全部学习。一般就日常用到读写文件fs接口,path 路径接口。这些 api 都不难写几个 demo 就懂了。基本上webpack 里面配置文件也没用到多少 node 的东西。最后自己学会配置webpack的配置文件。

如果想深想去优化打包体积和速度,就需要去了解很多webpack插件。webpack 里面最核心的就是插件了。

当然前端工程化不仅仅是这些,CI/CD可持续集成, Umi 了解下。shell各种脚本自动化命令、代码生成技术了解下。

五、性能优化的方案

一般来说。性能优化没什么系统化的文档供人学习。完全靠一些经验和自己的实践。

我们常提到性能好坏是由什么来衡量呢?

访问页面地址 --> 页面首次加载数据 --> 渲染出完整页面的时长

非首次情况下,命中缓存的加载缓存数据 --> 渲染出完整页面的时长。

一般我从下面几个方面着手去做,一般问题都不大。

减小资源(静态资源,后端加载的数据)大小

  • 压缩代码HTML/CSS/JS

  • 压缩图片、音视频大小

  • Tree-Sharking 消除无用代码

以上webpack都可以搞定

避免同一时间的过多次数请求

  • CSS 实现雪碧图:使用background-position共享一张图

  • 图片懒加载:监听滚动后offsetTop,  使用src 替换 src(真实路径)

  • 列表懒加载(分批加载):监听滚动后offsetTop, 发送请求加载下一页的数据

  • 路由懒加载

  • 代码分包分块加载(webpack)

  • 预加载技术

  • 小程序分包、预下载等。

利用缓存(空间换时间)

  • CDN 内容分发:获取更近网络节点缓存下来的静态资源

  • 浏览器缓存(自带)

  • 部分资源保存在LocalStorage或者APP缓存中(手动操作)

其他

  • SSR 服务端渲染:解决SPA框架带来JS动态渲染页面带来的延迟和白屏问题。

这些都可以去实践的,难度不大。难度大的地方可能是 dom 节点成千上万的时候渲染的性能问题。这个场景遇到的很少,方案很多。不同人有不同解决方案,有功夫可以自己去尝试尝试。

上面提到很多点都可以深入到很深。由于篇幅原因,点到即止。

纯粹是把一些我以前走过的弯路掰直了再分享给大家。毕竟不是《前端入门到精通》哈哈哈

六、学习移动端web开发

前端现在为什么这么火?各个公司都还挺缺优秀的前端。原因在于技术红利。

移动端web流行起来之后,特别是H5和小程序,带动了多少前端就业,前端迅速取代了安卓和iOS 的大量岗位。

回到正题:所以作为前端人,移动web一般是都要接触的。不同于PC 端。

移动端有哪些东西呢?不需要全部懂,差不多知道就行了。要用的时候再去学。

  • 绝对单位换相对单位:px => rem / vw / rpx

  • 弹性布局:使用flex、grid布局

  • hairline (1px的粗线处理):使用伪元素 + transform: scale(倍数) 缩放线框

  • WebView 环境了解下

  • 安卓iOS 兼容踩坑:点击延迟、穿透、滚动不流畅、安全区域等等。

  • 小程序开发相关踩坑

  • JSBridge: H5 与App 通信

  • H5动画制作

  • 跨平台框架:react native、weex、flutter 等等

简单的说移动web 就是:html/css/js 跑在手机app 里面的WebView(web运行环境)。

小程序/公众号就是在这个基础上,将自己APP里面的WebView 租售给其他人使用。

微信APP ----- 提供SDK ----> 微信webview ----- 提供运行环境-----> 公众号h5 / 小程序

为什么微信可以容纳几乎无限的H5/小程序页面呢?

因为公众号/小程序的代码都存储在云端,通过不同的路由就可以给几乎无数的开发者使用。

使得微信成为一个运行环境+入口的存在。

七、做前端我有没有觉得吃力?

**刚做时前端不吃力。**因为我是软件工程专业,学前端之前,学过 C/C++、Java、PHP、.net 成绩还不错基本都是90多分。感觉自己干后端也不吃力。实验室里面的项目都是前后都写。最爱 PHP,当时最崇拜鸟哥。本以为以后就走上PHP后端工程师的道路了,成为鸟哥那样的大神。

由于项目需要的原因,后来渐渐开始学起学 HTML、CSS、JavaScript 这些语法相关的东西。刚接触时没有感觉太大难度。

当时就想着怎么把页面搞好看,搞各种动画炫技。写一个小球从下面弹出来的效果,换各种姿势弹出。当时觉得前端真的有意思,就入了前端的坑。入坑前,以为前端就是搞各种漂亮的页面,各种特性惊艳别人。

随着接触的越来越深。接触到了 AJAX, jQuery ,Bootstrap,前端开始注重体验。各种框架横空出世 backbone => Angular => React => Vue 眼花缭乱。

折腾了 JQuery 开始折腾 backbone 觉得前端还能这样玩。有些迷茫了,感觉脑袋快要炸了,那段时间特别焦虑,疯狂看书写代码,怎么这么多东西要学啊。

JavaScript 也不精通,到原型就不理解了,虽然有C++,JAVA面向对象的知识,但JavaScript 你怎么和别人玩的不是一个套路啊。当时就都用ES6了, 行,学。都用Sass了,行,学。不学也可以,看不懂别人的代码呀。

**毕业前为准备校招前端工程师,真的很吃力。**就怕校招面试时,自己啥都不懂。

功夫不负有心人,校招时候顺利拿到了自己满意的Offer。记得当时和面试官对答入流,好像找到知音一样。面试官也是过来人,基本能问的都问了。

拿到Offer之后就去了实习。实习第一个任务:将一个ES6的后台管理系统重构成 Vue2.0 全家桶的项目。有个导师带,但是她和我是不同项目,出了架构以外代码都是自己写。

这个阶段还是收获了很多:

  • git 命令特别熟练。commit、stash、merge/rebase、cherry-pick、push/pull/fetch、reset等等基本都敲都特别多了

  • 严格了代码规范。Eslint、prettier 都用起来了

  • 会自己写业务组件,会封装高级组件、写常规页面了。基本上大部分不是特别复杂的交互都ok。难一点多找下资料可以做出来。

  • 学会管理API了。自己尝试封装了 axios。统一处理错误和弹窗。

  • 会抽取公共css、JavaScript 函数,编写CSS 变量和JavaScript 常量了

  • webpack 能看懂配置文件了。

实习过后顺利转正。转正之后,换了另外一个导师带,加入到项目组作为一个比较大的项目的核心开发。基本不再做管理系统了。主要做一个saas 平台。涉及比较难的富文本编辑,UI 拖拽生产文章,数据可视化生产报表等等。还写了几个谷歌浏览器插件。

  • 开始提升写页面效率,写的比较快了。

  • 研究 webpack 的插件打包编译效率

  • 研究 babel 编译原理

  • 研究了 Vue 编译的一些原理

  • 研究了 一些图表的使用,多半使用的echart。常规图表基本都用过。

  • CI & CD 自己去搭建。学了一些 shell 脚本开发。研究了 docker 相关的东西。

  • 尝试去写基础组件,搭建基础组件库。

  • 学习 React 相关的语法。

  • 研究富文本编辑,图片压缩裁剪原理等等

  • 写一个简单的微信公众号,接触到了 H5 开发。

工作第一年,基本上主战场在PC 端。**前半年挺吃力,后半年熟练后游刃有余。**会怼产品,会喷设计,会和后端兄弟配合默契。和团队感情也很深了。

无奈项目由于某些原因终止,团队解散,调到新团队。在老东家工作一年多后,由于个人原因离开去了一家新的的公司,主战场从PC 到了手机。开始接触移动H5、hybrid 开发。

八、学习吃力的原因肯定是学习方法不太正确。总结下一般怎么才能真正学到东西

  • 详略得当:前端知识太多,抓重点学,不要像背字典一样。

  • 不要急着写代码,先理清流程(以一个函数为单位,可以先写注释)再写代码。

  • 看视频看讲解是会误以为自己会了,其实并没有。

  • 学会总结:一句话可以讲清楚的事情,不要多说一句。减少心智负担。

  • 不介意复制代码,但是要知道这个代码里面大致实现原理。感兴趣自己重写一个。

  • 较大的项目,不要急着看代码。可以先把项目跑起来。通过改代码里面的参数来理解里面的核心流程。

  • demo 式编程。对于新框架,参考demo来上手更快更容易理解。

  • 渐进式编程。对于比较复杂的功能/需求。不要想着一气呵成。先实现一个核心,每次往上面加细节,有点像绘画。

  • 断点单步调试很有用,定位bug会更快。当然有些不易调试的应用选择打log。一次打 log 要多打点,免得打完log,有得再加。

    黑盒太多的项目,实在找不到bug原因。发给同事帮忙看。可能很快就能看出来。当局者迷,旁观者清。(很多时候是拼写的问题)

- EOF -

推荐阅读  点击标题可跳转

2021 阿里字节快手面经 & 个人成长经验分享

Vue.js开发移动端经验总结

32个原生 JS 知识点|面试高频

点击下方公众号卡片,关注我

在公众号对话框,回复关键字 “1024”

免费领取前端进阶大礼包

如果觉得这篇文章还不错,来个【分享、点赞、在看】三连吧,让更多的人也看到~

工作两年前端经验分享相关推荐

  1. 川大计算机考研失败经历,失败过,又成功了 川大传播学两年考研经验分享

    随着昨天晚上川大文新学院研究生拟录取名单出来,我的两年考研路程终于尘埃落定.从15年的375分,英语52到2016的408,英语79,面试+口语第一,复试总分第一,我也算是成功的突破了自己的局限. 我 ...

  2. linux扩展两个桌面,经验分享:九大GNOME Shell扩展助您定制桌面Linux

    原标题:经验分享:九大GNOME Shell扩展助您定制桌面Linux 每位用户在首次设置新计算机时,都会进行有针对性的自定义--包括切换桌面环境.安装终端shell.选择自己喜欢的浏览器或者更改壁纸 ...

  3. 我的web前端工作日记1------web前端经验

    转载请注明出处:https://blog.csdn.net/dreamer_sen/article/details/82143519 在公司干坐了一天,觉得应该找点事做.所以,就有了记录自己前端工作的 ...

  4. 自学Java半年,没有包装简历,成功找到工作!!个人经验分享

    先说下情况,我是理工科出身,本科,英语基础尚可,过了六级!!自己大学自学过,也学过C.现在想学Java,本来考虑辞职报培训班,也看了差不多四家机构,都不是很满意,学费一万6左右,我只能贷款,报班的话学 ...

  5. 从零开始 Code Review,两年实战经验分享!

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 来源:http://t.cn/RtHE14S 前几天看了<Code Review 程序员的 ...

  6. 求职季找工作心得与应聘经验分享(一)

    历经一年光阴,博主完整地走过了从心理准备.技术准备.参与笔试与面试流程到与HR乃至公司高管深入交流的心路历程,最终在这个盛夏的毕业季之后,迈入了自己综合考量下最为满意的一个单位.回头望去,博主前后一共 ...

  7. 求职季找工作心得与应聘经验分享(二)

    3.    制定求职战略 这里的求职战略指的是应聘用人单位的时间.数量和难度的选择,每位求职者可能适合各不相同的求职战略.这里只介绍博主的个人选择,博主喜欢接触各类的人和事,认为能从不同的经历中学习到 ...

  8. 外接服务器硬盘电源怎么用,科普文,设备上架经验分享,也就那点事

    今天,科普设备上架那点事. 本文按照一般工作过程,完成经验分享,希望能够给读者以帮助. 一.前期工作很重要,现场工勘大概包括以下内容. 1.检查机柜配电,是否合格. 2.设备承重情况. 3.位图连线表 ...

  9. c语言大创项目指导过程记录,“大创”项目经验分享讲座成功举办

    (通讯员 卢嘉慧)3月18日晚,大学生创新创业系列指导讲座第二期"为你指点迷津"主题讲座成功举办.讲座邀请2020年结项并获得优秀的学生项目负责人李东敏和李鑫为同学们分享" ...

  10. nvme驱动_耗时3天2夜,搞定了macbook pro(2015款)更换nvme固态,经验分享一下,希望能帮到有需要的人!...

    捣鼓原因:macbook 进水,烧了主板,电池,还有固态! 提醒一下,固态坏了,本子会一直灰屏,什么都没提示!(就是有背景灯,什么都没显示)按op键,恢复模式都没反应!没办法,只能更换固态,上网查了下 ...

最新文章

  1. 【TensorFlow2.0】(1) tensor数据类型,类型转换
  2. exec函数族的使用
  3. HDU 1026 Ignatius and the Princess I 迷宫范围内的搜索剪枝问题
  4. Oracle基本概念与数据导入
  5. SAP官方帮助网站,help.sap.com 背后那些事儿
  6. dubbo中log4j检查(开发环境中建议设置为false)
  7. 洞察设计模式的底层逻辑
  8. k8s创建Deployment报错:missing required field “selector“ in io.k8s.api.apps.v1.DeploymentSpec
  9. 创建一个django的项目 使用自创的虚拟环境
  10. 图片保存到数据库以及从数据库中Load图片
  11. mvc可以运行在linux下吗,asp.netmvc部署到linux(centos)
  12. 【项目】ARX程序开发:框裁直线(Rect Trim Line)功能开发
  13. Matlab滤波器设计
  14. NLP语义匹配 | 经典前沿方案整理
  15. CSS3 结构性伪类选择器(1)
  16. 服务器运维的日常维护工作有哪些
  17. 计算机组装安装主板的依靠什么初步定位,电脑维修高级全科班
  18. GPIO实现I2C从机的设计[1]
  19. 【大数据AI人工智能】创造意义的是人类,不是机器
  20. Python3计算今天是否生日以及距离生日还有多少天

热门文章

  1. 基于JavaWeb的小说阅读网站设计与实现 毕业论文+答辩PPT+项目源码及数据库文件
  2. Python 实现电信天翼网关光猫自动重启
  3. zh-cn语言(文化)代码与国家地区对照表
  4. 删除Word模板文件
  5. Typora设置图片背景
  6. cad画钟表_如何在Word中画钟表?
  7. HTML链接和锚点学习---第四天
  8. 快速从B站下载视频到本地(无需安装软件)
  9. java beetl输出demo_Beetl 快速入门
  10. 投资学U20 期权市场与交易策略 习题解读