spa 用 html 委托代理整个页面的点击事件是不是更加节约性能,是最佳实践吗?
比如一个spa应用,里面的链接都是绑定的click事件,通过 history.pushState 更新页面,那我直接在html代理点击事件,再给每个链接添加一个自定义属性(如path=“/home”),这样算是比较好的办法么
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不建议这样做。
原因有两点:
1.如果代理整个html的点击事件,那么点击页面任意位置都会触发这个事件监听,你需要在这个事件监听里做判断。当一个用户在不停地点击页面空白处或者其他位置的时候,始终都会走这个监听,并且会走一遍判断,实际上是完全没有必要的。
2.当你后期增加其他元素的点击事件,但又不是和之前的链接事件相同的话,你这个就牵一发而动全身了,如果事件还有冒泡影响的话,你是不是还要考虑冒泡之类的问题?不好维护。
这种优化带来的好处可以忽略不计,反而不利于代码维护,比较好的做法是封装成一个组件,接受一个path的入参,router.push的逻辑写到组件里就好了