iframe框架_性能优化去除iframe脚手架升级方案

《去Iframe后领域本地调试指南》

92e8cff657ae3c32d91e70653dfe904f.png

首先理解去Iframe之后的前端模型

去Iframe之前,每个领域有独立的Node端和静态资源。通过 iframe 的方式内嵌在工作台中,与工作台、其它领域互不干扰。前端框架作为领域静态资源的一部分存在,每个领域中都有一份前端框架。

去Iframe之后,所有去Iframe的领域共用同一份前端框架。工作台中首先加载一份公共的前端框架(来自于统一Node),然后在打开领域节点的时候,再加载领域的扩展,此时的领域扩展只包含自定义组件、自定义配置、扩展脚本等。

原有调试方法与新模型的冲突

去Iframe之前,本地调试时需要在本地启动 Node 端与静态资源(一般是 npm run debug:server 和 npm run debug:client),基本上能复原90%以上的前端场景。

此时,调试领域前端的时候,直接修改前端工程即可,调试领域后端的时候,使本地启动的Node端连接到本地的业务后端即可。虽然需要同时启动 debug:client、debug:server,占用内存较多,但是逻辑还算是比较清晰的。

在去Iframe之后,原来的方式已经不能复现实际场景了。要完整复现的话,需要使用如下的方式:

  1. 启动工作台的前端、启动前端框架、启动领域前端扩展、启动Node服务

  2. 修改工作台中的配置,或添加新菜单,使其能指向本地的前端框架、本地的前端扩展

  3. 开始调试

这种方式需要启动的项目过多,步骤繁琐且内存消耗大,影响开发调试的效率。

新的调试思路

新的调试是使用网络代理的方式,将线上环境(daily/test/pre/prod/sandbox/iter等均可)中的一部分资源调用转向本地。

这中间的关键点,就是将线上的资源重定向到本地。主要有两种方式:

  1. 浏览器级别的转发,需要浏览器插件(如Resource Override),仅主流浏览器(Chrome、Firefox及新版Edge、Opera、QQ、搜狗等基于Chrome内核的浏览器)支持。

  2. 系统级别的转发,需要配置系统级网络抓包调试工具(如Charles、Fiddler等,部分收费)

另外因为浏览器的安全限制,部分转发需要使用HTTPS证书,涉及到在本地颁发、安装和使用HTTPS证书。调试前端扩展的时候,如果使用的Chrome等浏览器,还可使用 http://127.0.0.1 的方式绕过,如果是调试后端,需要cookie,那就需要设置好HTTPS证书了。

关于新调试思路中提到的工具及其详细的解释,参见我之前提供的另一篇文档:

此处为语雀文档,点击链接查看:

https://www.yuque.com/docs/share/eb9c716f-6de7-4b2a-ab3e-8d7d0991e5e0?# 《“偷天换日”调试方法》

领域调试

上面的文章中主要解决的前端框架调试的问题。部分思路可参考,不过它没有明确指出领域的调试流程。

下面我详细解释下领域的前端和后端调试的流程。

下面所有的流程都假定开发者使用了Chrome浏览器,安装了Resource Override插件。

如果需要调试IE等不支持插件的浏览器,需要自己配置Charles等工具,此处不展开。

领域前端扩展调试

按照新的调试思路,领域前端调试时主要是完成一件事:转发领域的前端扩展到本地。

举例来说,在daily环境中,采购的前端扩展资源是类似这样的地址:

https://u8cupu-daily.yyuap.com/upu/javascripts/extend.min.js?_=a9cc97f7-29fa-4b70-90e4-eaa3a1175c93

领域使用 npm run debug:extend 启动本地扩展时,一般会提供这样的地址:

http://127.0.0.1:3005/static/javascripts/extend.js

我们可以在Resource Override插件中配置上如下的转发:

From

To

https://u8cupu-daily.yyuap.com/upu/javascripts/extend.min.js*

http://127.0.0.1:3005/static/javascripts/extend.js

e004a20af494cc745ab965dca81106f9.png

CSS同理,不再赘述。

领域后端调试

Resource Override不仅能转发前端资源,也能转发后端接口。

一个正常的后端接口请求,一般是如下的流程:

fbac1b1a-7533-eb11-8da9-e4434bdf6706.svg

转发有两个方式:

  1. 拦截“浏览器 -> 统一Node”的过程,转向本地Node服务或领域后台

  2. 拦截“统一Node -> 领域后台”的过程,转向本地领域后台

因为统一Node在远程服务器上,除非本地调试的后端能用端口映射的方式在远程暴露出端口,否则网络上是不通的。所以这里没有选择这种方式,而是用了在浏览器 -> 统一Node 的过程进行拦截的方式。

统一Node中业务比较简单,除了 POST /meta 等为数不多的接口是对后端接口进行了再加工,其它的大多是 /uniform/ 开头的纯转发接口。

一般来说,调试的时候只需要配置 uniform 接口的转发即可。

这个转发也有两种方式:

  1. 本地启动一份统一Node的代码,并将 /uniform/* 的接口转发到本地。

  2. 本地不启动Node,直接把 /uniform/* 接口转到本地后端服务。

假设本地Node使用3007端口,本地领域后端使用8080端口,并假设我们要转发daily环境的接口:

那么方案一需要配置如下的转发:

From

To

https://u8c-daily.yyuap.com/mdf-node/uniform/*

http://127.0.0.1:3007/uniform/*

方案二需要配置如下的转发:

From

To

https://u8c-daily.yyuap.com/mdf-node/uniform/*

http://127.0.0.1:8080/*

注意因为后端接口一般需要用到Cookie,而线上环境使用的域名是 .yyuap.com或.dowork.com等域名,所以转发目标不能配置 http://127.0.0.1,而应该相应地使用 .yyuap.com 或 .diwork.com 的域名。

但是这会带来新的问题,在 daily / pre / prod 等环境中,工作台通过 HTTPS 的方式加载,HTTPS 的页面里面不允许请求 HTTP 的资源(除非是 http://127.0.0.1),所以需要配置成HTTPS的域名,这会涉及到本地的HTTPS证书的问题。

更新后的配置为:

From

To

https://u8c-daily.yyuap.com/mdf-node/uniform/*

https://local.yyuap.com:3007/uniform/*

From

To

https://u8c-daily.yyuap.com/mdf-node/uniform/*

https://local.yyuap.com:8080/*

关于HTTPS的证书相关的设置,可以参考框架调试那篇文档中的内容:https://www.yuque.com/docs/share/eb9c716f-6de7-4b2a-ab3e-8d7d0991e5e0?# 《“偷天换日”调试方法》。

后面可能会再提供一个标准的用于后端调试的Node端,即使用方案一。到时候会将相关证书等内置在工程中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值