本书将聚焦前端开发中的项目难点与创新亮点,通过真实案例、最佳实践和前沿探索,剖析技术背后的思考与解决方案。无论你是初入行业的新人,还是经验丰富的工程师,希望这些经验能为你提供启发,助你在瞬息万变的技术浪潮中把握方向,打造更高效、更可靠、更极致的用户体验。
—— **代码不止于运行,更在于创造价值。**有需要更多前端资料,看文末免费领取
2025年前端项目细节和疑难点
1、测试和调试
2、跨域请求问题
3、数据安全和隐私保护
4、移动端触摸事件处理
5、性能优化
6、响应式布局的挑战
7、浏览器兼容性问题
8、获取首页链接里面的参数问题。
9、更新文件缓存的坑。
10、解析后端返回的map格式数据的坑。
11、vue组件动态加载的坑。
12、页面缓存的坑。
13、路由传参的功能的坑。
14、axios请求中post请求的坑。
15、为什么需要二次封装组件库?
16、请结合一个组件库设计的过程,谈谈前端工程化的思想
17、如何对一个组件库进行测试?
18、在使用qiankun时,你如何处理多个子项目的调试问题?
19、你能解释一下 qiankun 如何实现 keep-alive 的需求吗?
20、在使用qiankun时,你如何处理js 沙箱不能解决的js 污染问题?
21、在项目中有没有单独封装组件
22、在项目中发送请求怎么携带token
23、工作中有用到git吗
24、git版本发生冲突你怎么解决的
25、如何快速让一个盒子水平垂直居中
26、首屏加载白屏怎么进行优化
27、路由传参 query与 params区别
28、项目基础优化
29、对 $nextTick异步渲染的理解
30、你是怎么对axios进行二次封装的,有什么作用
31、用户token失效你是怎么处理的
32、说一下项目的流程
33、商品和增删改查
34、Element-UI的form表单验证你是怎么使用的
35、项目中的商品详情页你是怎么实现的
36、什么是数组扁平化
37、你这个项目登陆是怎么实现的
38、项目中的权限管理怎么实现的
39、Vue的$nextTick0方法有用到过吗
............................................
1.测试和调试
H5页面需要在多种设备和环境下进?测试,确保其稳定性和兼容性。
解决方法:
使用模拟器或真实设备进行测试。
利用浏览器的开发者?具进?调试。
采用自动化测试框架,如 Selenium或Appium,进行持续集成和测试。
通过了解和解决这些常见的问题,开发者可以提高H5页面的质量和性能,为用户提供更好的体验。
而持续学习和适应新技术才是避免和解决这些问题的关键
2. 跨域请求问题
在进行Ajax请求或API调?时,可能会遇到跨域问题,导致请求失败。
解决方法:
使用JSONP来绕过同源策略限制。
在服务器端设置CORS(跨源资源共享)策略,允许特定的外部域访问资源。
3.数据安全和隐私保护
在处理用户数据时,开发者必须确保数据的安全性和用户的隐私权。
解决方法:
采用HTTPS协议来加密数据传输。
遵循数据最小化原则,只收集必要的用户信息。
提供清晰的隐私政策,告知用户数据的使用方式和目的
4.移动端触摸事件处理
在移动端,触摸事件的处理与桌面端的鼠标事件有所不同,需要特别注意。
解决方法:
使触摸事件(touchstart,touchmove,touchend)代替鼠标事件。
·考虑使用框架或库,如 jQuery
5. 性能优化
H5页面的性能直接影响用户体验。加载时间过长或运行缓慢的页面会导致用户流失。
解决方法:
·对图片和视频进行压缩,减少资源文件的大小。
·利用浏览器缓存和 CDN 服务来加速资源的加载。
·优化 CSS 和 JavaScript 代码,避免重绘和重排,提高页面渲染效率。
6.响应式布局的挑战
为了适应不同屏幕尺寸和分辨率,开发者需要创建响应式布局。这可能导致CSS和JavaScript 代码复杂,难以维护。
解决方法:
·使用媒体查询来适应不同的屏幕尺寸。
·利用CSS框架,如Bootstrap或Foundation,它们提供了一套响应式网格系统,简化了布局的开发。
7.浏览器兼容性问题
在开发H5 页面时,开发者需要考虑到不同浏览器和设备的兼容性。一些特性在某些浏览器上可能不被支持,或者在不同浏览器上表现不一致。
解决方法:
-使用特性检测库,如Modernizr,来检测浏览器是否支持特定的功能。
·采用渐进增强的策略,确保基础功能在所有浏览器上都能正常工作,高级功能则根据浏览器能力逐步增强
8.获取首页链接里面的参数问题。
获取是可以获取到,只要不跳转出这个项目的页面,都是可以的,但是该项目链接了许多外链,所以,有时候返回的时候,页面就会显示空白,因为获取的参数出了问题。解决办法:将参数设:置成了缓存,但是返回的速度快了,首页同样还是会出现拿不到参数,的问题。
解决方法:将获取连接的templateld写在Home页面
if (templateId) {
this.$store.commit('updateTemplatedId',templateId);
window.localStorage.setItem('templateId', templateId);
console.log('store===templateId',this.$store.state.templateId)
}else{
setTimeout(function() {
window.location.reload()
},1500);
}
9.更新文件缓存的坑。
每次打包好文件给后端更新的时候,用户手机上总会留下,上次版本的信息,而且每次都得清下缓存,才会显示最新版本的数据。后来,我师傅提了个建议,让后端返回一个更新版本的接口,前端每次更新版本的时候,都会给后端传入时间戳,然后后端接收后判断和库里的时间戳是否相同,相同的返回不需要更新,不相同的话,返回要更新,然后前端这边的处理方法是:需要更新的话,清除掉缓存,刷新页面即可。
虽然说给.js.css文件后缀加上时间戳也是可以的,但是页面的入口index.html每次都是一样的,所以。。。就不会更新,,百度一些说在nginx服务器上,写上强制更新,但是由于公司服务器上的文件很多,万一操作失误那就麻烦了
10.解析后端返回的map格式数据的坑。
之前解析数据的时候,直接就可以拿去,然后直接渲染页面使用即可。但是这次遇到后端返回的是map格式的数据,这就得解析下了。例如:body['1]。根据返回的格式,自己解析成自己需要的数据格式。
11.vue组件动态加载的坑。
由于首页的排版不确定,然后想着,让组件动态显示,根据后端传入的数据,传入那个组件的数据,就显示那个组件。解决办法:和后端商量好,做个标识。前端根据标识判断,动态显示组件。使用到了vue中的,刚开始想着是不是和原生js一样使用append直接可以插入进入呢,但是后来发现根本不可以,思路是可以的,但是实现起来是行不通的。因为append后面插入的必须是个节点,而不是组件。后来就去查阅vue文档。
12. 页面缓存的坑。
有个填写信息的页面,需要填写一部分信息,进入查新协议页面,返回的时候,页面上填写的!信息还需要留存。解决办法:使用vue提供的keep-alive,来完成页面的缓存的。
13.路由传参的功能的坑。
之前一直使用路由传参,但是当本页面刷新的时候,页面上是没有参数的,因为参数是从上个·页面传入进来的。解决办法:使用了缓存,和vuex状态管理。但是由于项目并不是很大型的项目,所以使用最多的是缓存。
14. axios请求中post请求的坑。
刚开始的坑是,使用axios的post方法请求数据,数据被拦截,数据一直传不到后端那边。后来查文档才得知axios对于post请求是有拦截功能的,需要自己判断,或者使用提请的qs方法,将传给后端的数据进行下处理。
15.为什么需要二次封装组件库?
实际工作中,我们在项目中需要自定义主题色,更改按钮样式,自定义图标,自定义table组件等等,这些都可以基于antd组件库进行二次封装,减少重复工作,提升开发效率。
所以我们在封装的时候按照下面这四个原则进行思考就行了,另外本身封装组件库对于项目来说也是没有任何风险,因为一开始我们把PropsType直接进行转发,内部再进行增加业务的功能,这样就是达到完全的解耦
·统一风格:在一个大的项目或者多个相关的项目中,保持一致的界面风格和交互方式是非常重要的。通过二次封装,我们可以定义统一的样式和行为,减少不一致性。
●降低维护成本:当底层的组件库更新时,我们可能需要在项目的多个地方进行修改。但是如果我们有了自己的封装,只需要在封装层面进行更新即可,这大大降低了维护成本。
·增加定制功能:有些时候,我们需要在原有组件库的基础上增加一些特定的功能,如特定的验证、错误处理等。二次封装提供了这样的可能。
·提高开发效率:在一些常用的功能(如表单验证、全局提示等)上,二次封装可以提供更方便的 API,提高开发效率。