位置: 编程技术 - 正文

浅谈webpack下的AOP式无侵入注入(webpack-loader)

编辑:rootadmin

推荐整理分享浅谈webpack下的AOP式无侵入注入(webpack-loader),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:webpack 常用loader,webpack软件,webpack 常用loader,webpack-loader,webpack analyzer,webpack 常用loader,webpack api,webpack analyzer,内容如对您有帮助,希望把文章链接给更多的朋友!

说起来, 面向切面编程(AOP)自从诞生之日起,一直都是计算机科学领域十分热门的话题,但是很奇怪的是,在前端圈子里,探讨AOP的文章似乎并不是多,而且多数拘泥在给出理论,然后实现个片段的定式)难免陷入了形而上学的尴尬境地,本文列举了两个生产环境的实际例子论述webpack和AOP预编译处理的结合,意在抛砖引玉。当然,笔者能力有限,如果有觉得不妥之处,还请大家积极的反馈出来, 共同进步哈。

重要的概念

AOP: 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

Joint point:表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。

Advice:Advice 定义了在 pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。

通过前面的定义,我们可以提炼出一句更简单的定义,利用静/动态的方式使代码块在何时/何地运行。

性能统计

项目的背景是一个利用vue+webpack打造的多页面应用 (多入口点),她的结构大概是这个样子的

然后以index入口点举例,大概代码为src/index/index.js

期望引入一个vue插件,能够自动的监控当前页面的性能,于是,代码看起来像是这个样子

由于这种方式意味着每个入口点均需要进行修改,(实际上这个项目的入口点超过个,而且随时可能继续增加下去)简直就是一个体力活。所以,让我们用AOP的思想来考虑一下如何处理这个问题

首先观察入口点逻辑

原:引入vue -> 引入app组件 -> 实例化vue组件

浅谈webpack下的AOP式无侵入注入(webpack-loader)

新:引入vue -> 应用性能统计组件 -> 引入app组件 -> 实例化vue组件

套用到我们的定义上,可以轻松的得到

Joint point(何处) 引入vue

advice(何时) 之后

这样理论上的东西似乎闭着眼睛都可以推论出来,但是如何将这样的步骤替换到每一个入口点就是一个大问题了orz。幸运的是这是一个import,而翻阅webpack的文档恰好有着这样一个神奇的属性--alias

src/vueHook.js

这样,我们就完成了一个vue的全局钩子模块,我们按照步骤归纳,并且找到注入的位置 ,最后利用替换的方式成功的完成了无侵入式的组件应用

code spliting

可能上面的例子有点小打小闹的感觉,那么我们换一个案例,再来体验一下这种静态替换式的注入的威力,我们采用官方支持较差的react作为参考(vue在code spliting方面做得真心是超级棒~)

一段中规中矩的代码,对吧?相信大家已经发现了,在上述的代码里面似乎并不是每个组件都是必须的,那么,基于以上的思考,可以对上面组件进行按需加载处理。 Bundle.jsx

以及相应的alias hook

思考,当组件多的时候每一个模块都需要一个人口点吗,可以从webpack.context角度简化这个问题吗?

以上两个例子均是模块引用作为join point来进行注入操作的,而且完成了无侵入式的功能增强,这得益于webpack将js模块作为一等公民。我们拥有着超多的权利完成静态式的注入工作。 本文并没有在技术上涉及太多,还是那句话,抛砖引玉哈~~~

以上这篇浅谈webpack下的AOP式无侵入注入就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持积木网。

基于js中style.width与offsetWidth的区别(详解) 作为一个初学者,经常会遇到在获取某一元素的宽度(高度、top值...)时,到底是用style.width还是offsetWidth的疑惑。1.当样式写在行内的时候,如divid="box"

js设置随机切换背景图片的简单实例 实例如下:scriptvarimgs=["

React通过父组件传递类名给子组件的实现方法 React教程React是一个用于构建用户界面的JAVASCRIPT库。React主要用于构建UI,很多人认为React是MVC中的V(视图)。React起源于Facebook的内部项目,用来架设Inst

标签: webpack-loader

本文链接地址:https://www.jiuchutong.com/biancheng/369778.html 转载请保留说明!

上一篇:JS实现小球的弹性碰撞效果(js小球与边框碰撞反弹)

下一篇:基于js中style.width与offsetWidth的区别(详解)(style js)

  • 所得税调增调减项目有哪些
  • 吨位是啥意思
  • 电子税务局没有发票开具
  • 公司购买了地板可以退吗
  • 购置新建商品房,自房屋交付使用
  • 融资租入的办公楼属于固定资产吗
  • 分公司如何缴纳企业所得税
  • 购入工程物资计入
  • 缴纳城建税会计分录怎么做账
  • 商业承兑背书后退回怎么办
  • 供应链公司的组织架构图
  • 存货暂估入账会引起存货账面价值发生增减变动吗
  • 购买商品用于抵债的会计分录要怎么做?
  • 当期应税销售收入是含税还是不含税
  • 发票认证但未抵扣需要在报表里填吗
  • 3%增值税率包括哪些
  • 小规模纳税人累计开票多少转一般纳税人
  • 发票作废税金怎么算
  • 免税发票可以入账吗
  • 税控盘全额抵扣分录
  • 货运发票与运输发票的区别
  • 应收账款的产生之一是由于销售
  • 外购软件可以加计扣除吗
  • 暂估收入的凭证怎么做
  • 维修费属于印花税
  • 递延所得税资产对应的会计科目
  • 综合资金成本是
  • 投入的生产线应该怎么做
  • 租赁公司车转个人有报废年限吗?
  • 招待客户住宿费用计入什么科目
  • php数组有哪几种类型
  • PHP:pg_result_status()的用法_PostgreSQL函数
  • 财政应返还额度是什么意思?
  • 完工产品成本的直接材料怎么算
  • 职工福利费会计账务处理
  • win7系统修改
  • 担保费可以计入什么科目
  • 购进原材料款项怎么入账
  • 深度学习&故障诊断初学者 - 学习路线
  • 哪些项目容易漏缴个人所得税?
  • 企业租赁发票税率是多少2023年
  • 企业向个人提供咨询服务
  • EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
  • 结转销售成本的分录怎么写
  • vscode怎么写前端代码
  • vue实现动态菜单权限配置
  • nvm 安装node
  • 净化器 ccm
  • 托收的收款人是谁
  • 二氧化剂的使用方法
  • 织梦cms不更新了吗
  • 帝国cms工作流
  • 帝国cms使用手册
  • 什么是三证合一纳税人
  • mysql如何分类
  • mysql和sqlserver的sql语句一样吗
  • mysql数据库命名 可以用-吗
  • 定期定额纳税申报表计税依据怎么填
  • 租单位的房子怎么办营业执照
  • 哪些发票不能用
  • 加油票和过桥过路费怎么做账
  • 补开以前年度发票
  • 车辆购置税完税证明图片
  • 员工出国境有关说法
  • 会计建账的基本程序的六个步骤
  • 海尔电脑优盘启动键
  • fix it club
  • Ubuntu系统安装软件
  • Mac系统中使用QuickTime Player实现屏幕录像图文教程
  • linux gc
  • win7不允许我更改系统设置
  • hyper安装win7
  • 列举linux常用的几个命令
  • js 编辑框
  • cocos2djs
  • glColor3f影响纹理贴图 的思考
  • opengl基础知识
  • 雷爵电动车官网
  • 出口退税的汇率按什么时候的汇率
  • 黑龙江省国家税务局通用定额发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设