现在面试有时候会问到工程化问题,所谓工程化,就是在一些问题的上最优解决方法
现在做一个大型项目一般遇到的问题有:
css管理问题:就是css选择器命名冲突问题怎么解决,就是如何做样式隔离的?方法对于react来说就是css modules,在class里写变量,然后react脚手架自动将变量名转化为唯一的字符串当作class选择器的名字;
对于vue来说就是用scoped来解决,原理是同一个组件的所有元素上都添加了一个唯一的属性名,然后通过属性选择器的使用方式隔离样式,这样做是否有性能问题,怎么测试css选择器的性能?
跨组件通信怎么做?对于react来说一般用redux,对于vue来说一般用vuex
国际化怎么做?国际化有一套通用的解决方案,就是可以现在后台创建一个应用,这个应用就是跟当前项目的国际化解决方案应用,然后在引入一个第三方库,然后每次需要添加新的文案的时候,就是在后台找到这个应用,添加一个key和这个key对应的其他国家的语言的值,然后在前端这边执行第三方库,第三方库会根据前端传递的应用名,拉取对应的文案,相当于key和对应的数据有了,然后前端这边根据当前的国际环境使用对应的文案即可,一般是一个4个对象,一个是key的集合,剩下3个分别是中文,日文,英文对象,这3个对象是key-value形式,key就是第一个key集合里的key,value是对应的文字
UI组件库的选择?大公司一般有一套自己的组件库,直接用即可,小公司一般用饿了吗或者vant
代码规范怎么做?代码规范一般都使用eslint,如果让程序员自己做代码规范,那是最蠢的,代码规范一开始就应该搞自动化,通过监听保存文件的操作,自动对当前文件走一次eslint,这样大家都省事了
自动化发布怎么做?这个真不用前端做,一般大公司都有一个发布平台,可以把代码拉下来然后进行打包和发布的操作,如果没有就自己搭建一个jenkins
代码管理一般用git,多人开发只要拉好分支就行,开发好之后进行评审,评审这块儿大公司也会有一个平台用于代码评审,指定好远程分支就可以进行评审了,评审好后主管应该会把这条分支的代码合并到develop上,到时候发布即可
测试这里,大公司居然是自己测试的,但是发布的时候有个灰度发布的功能,可以先发1%的用户,然后通过性能监控观察是否出现bug,如果出现bug,就马上关闭灰度,
灰度是一个可以及时关闭新功能的开关,就是前后端代码都可以添加灰度key,就是有新功能的时候,申请一个灰度key,然后前端开发的时候,从后端获取可用的灰度key,如果后端获取的灰度key没有新功能对应的灰度key的话,就不走新功能的代码,其实就是判断新功能灰度key是否存在,如果存在,就做一些事情,如果不存在就什么都不做,跟以前一样
这个灰度key的好处是,如果线上新功能有bug,可以瞬间屏蔽新功能,但是不好的地方是,污染前端的代码,前端代码里会有很多条件判断,用于判断灰度key是否可用,是否有一种不污染前端代码,又能瞬间屏蔽新功能的做法吗?
埋点和性能监控,这个大公司一般都会做,用于进行数据分析,这个功能完全可以使用装饰器的方式做,语言选择ts,这样可以避免埋点和性能监控污染业务逻辑
|