lowcode-engine icon indicating copy to clipboard operation
lowcode-engine copied to clipboard

乾坤微服务的方式接入渲染器,无法保证物料的执行顺序,可以推动下乾坤支持吗?

Open lucy091 opened this issue 3 years ago • 16 comments

Describe the bug (required) / 详细描述 bug(必填)

目前渲染器加载物料是通过head中动态插入scriptb标签的方式加载, image 但是在乾坤的微服务子应用中,因为乾坤的沙箱机制,动态脚本被劫持, image 不能保证多个物料的执行顺序,相当于script标签的async属性在乾坤沙箱中的行为和浏览器默认行为不一致,谁先下载完谁先执行从而互相依赖的物料报错,目前关闭乾坤沙箱可以保证物料执行顺序,但是关闭沙箱会出现其他问题

以下是乾坤中相关的issue, https://github.com/umijs/qiankun/issues/1207 https://github.com/umijs/qiankun/issues/1234 https://github.com/umijs/qiankun/issues/470

可以推动下乾坤支持script标签的async与浏览器默认行为一致吗? 或者适配下物料的加载方式,增加个属性控制某些互相依赖的的物料按顺序加载执行?

lucy091 avatar Jan 06 '23 08:01 lucy091

普通后台系统有没有接入过低代码引擎编辑器和设计器?貌似只能以iframe方式、微应用方式、多页面的方式接入它?

mixtan avatar Jan 06 '23 12:01 mixtan

普通后台系统有没有接入过低代码引擎编辑器和设计器?貌似只能以iframe方式、微应用方式、多页面的方式接入它?

编辑器设计器我是多页面接入的,业务项目是单页应用渲染器接入,独立的项目没问题,以乾坤微服务方式加载业务项目无法保证 物料库的执行顺序,关闭乾坤沙箱模式可以保证物料执行顺序,但是会有其他问题(如样式隔离,js隔离),目前看是乾坤沙箱模式与浏览器script async行为不一致导致的

lucy091 avatar Jan 10 '23 02:01 lucy091

普通后台系统有没有接入过低代码引擎编辑器和设计器?貌似只能以iframe方式、微应用方式、多页面的方式接入它?

编辑器设计器我是多页面接入的,业务项目是单页应用渲染器接入,独立的项目没问题,以乾坤微服务方式加载业务项目无法保证 物料库的执行顺序,关闭乾坤沙箱模式可以保证物料执行顺序,但是会有其他问题(如样式隔离,js隔离),目前看是乾坤沙箱模式与浏览器script async行为不一致导致的

编辑器设计器是多页面,业务项目渲染器怎么和设计器进行通信,是直接通过后端接口获取吗,还是说以微应用形式通信?我们的微应用不是用乾坤是single-spa自己开发的,应该没有你说的执行顺序问题

mixtan avatar Jan 10 '23 04:01 mixtan

普通后台系统有没有接入过低代码引擎编辑器和设计器?貌似只能以iframe方式、微应用方式、多页面的方式接入它?

编辑器设计器我是多页面接入的,业务项目是单页应用渲染器接入,独立的项目没问题,以乾坤微服务方式加载业务项目无法保证 物料库的执行顺序,关闭乾坤沙箱模式可以保证物料执行顺序,但是会有其他问题(如样式隔离,js隔离),目前看是乾坤沙箱模式与浏览器script async行为不一致导致的

编辑器设计器是多页面,业务项目渲染器怎么和设计器进行通信,是直接通过后端接口获取吗,还是说以微应用形式通信?我们的微应用不是用乾坤是single-spa自己开发的,应该没有你说的执行顺序问题

自己node搭建后台服务,编辑器按项目维度保存页面schema, 微应用按项目获取本项目所有页面动态注册路由,然后获取页面schema渲染 single-spa 不是没有沙箱,没有样式隔离和js隔离,自己实现样式隔离和js隔离么 可以加微信交流下吗?1285435712

lucy091 avatar Jan 10 '23 09:01 lucy091

普通后台系统有没有接入过低代码引擎编辑器和设计器?貌似只能以iframe方式、微应用方式、多页面的方式接入它?

编辑器设计器我是多页面接入的,业务项目是单页应用渲染器接入,独立的项目没问题,以乾坤微服务方式加载业务项目无法保证 物料库的执行顺序,关闭乾坤沙箱模式可以保证物料执行顺序,但是会有其他问题(如样式隔离,js隔离),目前看是乾坤沙箱模式与浏览器script async行为不一致导致的

编辑器设计器是多页面,业务项目渲染器怎么和设计器进行通信,是直接通过后端接口获取吗,还是说以微应用形式通信?我们的微应用不是用乾坤是single-spa自己开发的,应该没有你说的执行顺序问题

自己node搭建后台服务,编辑器按项目维度保存页面schema, 微应用按项目获取本项目所有页面动态注册路由,然后获取页面schema渲染 single-spa 不是没有沙箱,没有样式隔离和js隔离,自己实现样式隔离和js隔离么 可以加微信交流下吗?1285435712

好吧,我们也是node eggjs后端服务开发。 single-spa的沙箱隔离是自己实现隔离js css的,对于定制性比较自由,所以没有用乾坤。

mixtan avatar Jan 10 '23 10:01 mixtan

我们这边是判断渲染页面是否在微前端环境里,如果是的话,另外自己写了一套加载逻辑。

501981732 avatar Jan 11 '23 06:01 501981732

你好,请问方便留个联系方式,想问问具体是怎解决的

Bob-huang-gdut avatar Jan 12 '23 03:01 Bob-huang-gdut

@501981732 你好,请问方便留个联系方式,想问问具体是怎解决的

Bob-huang-gdut avatar Jan 12 '23 03:01 Bob-huang-gdut

我们这边是判断渲染页面是否在微前端环境里,如果是的话,另外自己写了一套加载逻辑。

我这也差不多,但是没重写加载逻辑,渲染在乾坤环境里做两次资源加载,第二次因为有第一次的缓存,所以能正常执行

lucy091 avatar Jan 13 '23 05:01 lucy091

微前端接入,还有一种方式就是配合cicd出码

hjgeek avatar Jan 15 '23 13:01 hjgeek

我目前使用wujie(我也试过qiankun,但还是觉得wujie集成简单灵活自主)完成了微前端方式的接入,wujie也是不保证动态插入脚本的执行顺序(它的顺序执行队列本身方案不完善,是shift()并执行,这样无法得到队列里最后一个执行任务什么时候执行结束)。 我也修改了wujie的代码,简单在原有队列基础上加入顺序执行的能力。 可以引入我fork的wujie版本[email protected] (代码可以查看https://github.com/AndyJinSS/wujie.git )

AndyJinSS avatar Feb 10 '23 07:02 AndyJinSS

我们这边是判断渲染页面是否在微前端环境里,如果是的话,另外自己写了一套加载逻辑。

我这也差不多,但是没重写加载逻辑,渲染在乾坤环境里做两次资源加载,第二次因为有第一次的缓存,所以能正常执行

没太理解你怎么做两次资源加载,能提供一下代码示例吗?

Bob-huang-gdut avatar Feb 13 '23 01:02 Bob-huang-gdut

我目前使用wujie(我也试过qiankun,但还是觉得wujie集成简单灵活自主)完成了微前端方式的接入,wujie也是不保证动态插入脚本的执行顺序(它的顺序执行队列本身方案不完善,是shift()并执行,这样无法得到队列里最后一个执行任务什么时候执行结束)。 我也修改了wujie的代码,简单在原有队列基础上加入顺序执行的能力。 可以引入我fork的wujie版本[email protected] (代码可以查看https://github.com/AndyJinSS/wujie.git )

大致开了下,你只能保证syncScriptResultList,asyncScriptResultList的顺序,但是无法保障contentPromise异步的执行顺序

lucy091 avatar Feb 13 '23 02:02 lucy091

我目前使用wujie(我也试过qiankun,但还是觉得wujie集成简单灵活自主)完成了微前端方式的接入,wujie也是不保证动态插入脚本的执行顺序(它的顺序执行队列本身方案不完善,是shift()并执行,这样无法得到队列里最后一个执行任务什么时候执行结束)。 我也修改了wujie的代码,简单在原有队列基础上加入顺序执行的能力。 可以引入我fork的wujie版本[email protected] (代码可以查看https://github.com/AndyJinSS/wujie.git )

大致开了下,你只能保证syncScriptResultList,asyncScriptResultList的顺序,但是无法保障contentPromise异步的执行顺序

建议你仔细看下,我修改的目的就是为了保障contentPromise的执行,你可以看下wujie原本是如何保存初始化的script按顺序执行的。

AndyJinSS avatar Feb 13 '23 07:02 AndyJinSS

你好,请问方便留个联系方式,想问问具体是怎解决的

还可以试一下直接把加载的物料库资源吐到html模板上

501981732 avatar Mar 21 '23 08:03 501981732

可以去看下这个库的解决方案哦 https://github.com/WHSnhcZDYRZC/umi4-lowcode-engine-solutions

WHSnhcZDYRZC avatar Jul 13 '24 12:07 WHSnhcZDYRZC