魔鱼搭投编辑器 ,一款优秀的前端界面可视化工具

简介: 魔鱼搭投编辑器 ,一款优秀的前端界面可视化工具

背景

魔鱼搭投编辑器是一个前端页面可视化搭建工具,运营借助编辑器可以调用搭投的底层能力,在无需开发介入的情况下,自主修改页面内容;简单举几个需求场景增强一下体感:
image.png

结合上回《闲鱼前端技术体系的背后——魔鱼》的介绍,我们回顾建设魔鱼平台的目标:

    1. 提升前端研发效率,收敛工程研发管理流程;
    1. 动态数据源可配置投放,从而在网关层优化页面首屏性能;
    1. 运营自主高效准确的干预投放数据;

这些目标在搭投编辑器中设计中都有涉及,本文结合需求来介绍背后的思考和技术细节,希望给对搭建感兴趣的同学一些启发。

架构

image.png

魔鱼页面编辑器链接了搭投系统的多个链路:研发编写页面提供配置表单,对接底层系统使运营能可视化搭建页面和修改投放数据,对接网关补全动态数据,对接渲染引擎渲染最终页面等,功能涉及面很广。另外,阿里前端作为电商领域研究多年的技术团队,内部自然对页面搭建技术有大量基础建设,从图上可以看到,魔鱼页面编辑器的建设依赖很多外部系统的支持,结合闲鱼需求场景和对已有技术的选型,魔鱼团队得以在2个月的时间完成一套搭建方案的上线。
实现

搭建领域模型

魔鱼的底层搭建能力基于集团(天马)搭建底层技术设计的PMT模型

  • P:即Page,指搭建系统中创建的页面;
  • M:指Module,指搭建系统所创建的页面中的模块;
  • T:TAG,指搭建系统中,页面中模块的每一个可用来投放数据的单位(资源位);
    在此之上,我们提供出排期策略模型Strategy,魔鱼设计一个模块只有一个TAG,因此每个模块都只有一个资源位,以魔鱼源码搭建为例图示一下模型间的关系:
    image.png

天马基于PMT设计规范提供了串联操作页面,模块,资源位之间关系的底层能力,魔鱼依赖于此开发可视化搭建的功能,并通过设计资源位和排期系统的交互,提供给运营动态投放数据,所见即所得实时验证页面效果的能力。
可视化搭建效果演示:

• 配置修改所见即所得(广告位顺序)

image.png

• 排期策略切换所见即所得(不同排期展示的界面不同)
image.png

Schema表单

上面展示的表单部分是运营填写投放数据的区域,原理就是通过schema.json规范来描述可配置的数据表单;

举个例子,开发要提供运营可配置banner图片(要求图片大小750*200,必填)和banner跳转链接(必填),需要编写如下schema来描述表单:

{
   
         "title": "腰通banner",      "type": "object",      "properties": {
   
           "picUrl": {
   
             "type": "image",          "title": "图片链接",          "x-format": "@image(750,220)",          "x-required": true        },        "url": {
   
             "type": "string",          "title": "跳转链接",          "x-format": "@url()",          "x-required": true        },      }  }

简单解释一下schema的含义,type表示字段类型是字符串,title是字段的名称,x-format和x-required则是我们拓展的字段来表示一些校验规则;
而经过魔鱼表单组件渲染后,运营配置时则会看到如下效果:
image.png

面临的痛点问题

这里展开介绍一下研发过程中思考面临的痛点问题:

1. 开发/运营的协作

schema是搭建系统和投放系统连接的桥梁,开发同学理解产品需求结合页面UI提供给运营可配置的能力,而运营填写表单得到一串json数据保存在投放系统,最终在用户访问的时渲染出页面,在这个步骤里,投放系统理解为数据库的作用,它并不理解运营填写json内容含义,因此字段校验效果验证需要发生在配置阶段,再往后的话效率上会很低,因此怎么保障填写的准确性是非常重要的;

2. 开发编写schema的效率问题

开发通过schema去描述表单如何呈现,但是表单除了字段的类型,名称信息之外,还有UI布局,校验规则,甚至联动关系相关的信息,例如想描述一个可供配置的图片列表,那么除了字段类型是数组外,在UI上还需要有增删改等功能才可让运营能完成配置需要, 描述一个这样的字段所需要写的描述信息往往超过几十行代码,显然效率是是不允许的;

针对以上的痛点,我们选用阿里开源的表单解决方案Formily,它拓展了JSON Schema制定了一套可以描述表单领域所有UI,交互的规范,按照这个规范我们可以渲染出需要的表单界面,而如何提升开发效率,我们则采用了约定大于配置的方法,定制出闲鱼schema规范提升研发效率,具体action有以下这几点:

3. 场景化标准组件,数据类型和表单组件一一映射

基于formily的拓展能力,约定schema的type字段类型和antd表单组件的映射关系,并拓展开发了如图片,链接,拓展插件等高频组件,帮助运营正确填写和预览投放数据;映射关系代码:

export const SchemaField = createSchemaField({
   
   
  components: {
   
   
    image: Image,
    string: Input,
    Input,
    Password,
    boolean: Switch,
    array: ArrayTable,
    Space,
    color: Color,
    time: TimePicker,
    cards: ArrayCards,
    text: Input,
    date: DateTime,
    daterange: DatePicker.RangePicker,
    textarea: Input.TextArea,
    number: NumberPicker,
    radio: Radio.Group,
    plugin: Plugin,
    select: Select,
    Editable,
    copy: CopyItem,
    // UI组件
    FormCollapse,
    FormGrid,
    FormLayout,
    FormItem,
  },
})

通过这个能力,开发按对业务的理解描述字段类型即可渲染出对应表单组件;另外我们约定了x-format关键字,针对常用的数据格式校验,提供了快捷得声明方法,例如上文提及的校验banner图片大小,开发按如下规范添加x-fromat代码:

@image('WidthxHeight', format, minSize, maxSize)

在递归阶段,分析出参数后添加校验逻辑,通过checkImage方法校验图片的尺寸,格式,大小等信息是否符合页面要求。(另外,通过收敛上传图片接口也可以有效约束图片素材的压缩要求)

const handler = {
   
   
  ...
  image: (
      dimension: string,
      format: string,
      minSize: number,
      maxSize: number,
      uploaderOptions: any,
      action?: string,
    ): IMoyuSchema => {
   
   
      return {
   
   
        'x-component': 'image',
        'x-component-props': {
   
   
          dimension,
          format,
          minSize,
          maxSize,
          uploaderOptions, 
          action,
        },
        'x-validator': async (value: any) => {
   
   
          return checkImage({
   
    dimension, format, src: value });
        },
      };
   }
   ...
}

效果如下:
image.png

4. 制定闲鱼schema规范,约定大于配置

参考上面的痛点描述,我们知道在UI,数组,联动关系等需要下让开发编写schema依然挺复杂,动茬可能要100+行schema代码显然难以接受,因此我们制定了闲鱼schema规范,在魔鱼编辑器的表单模块里会先递归完整的schema结构,将约定的特征schema进行特殊处理,这里以数组类型数据为例:
我们的需求是描述一个商品列表的配置表单,根据魔鱼的schema规范只需要写如下schema:

listDemo:{
   
   
    type:'array', //指定该数据的类型为type
    title:'商品列表',
    items:{
   
   
      type: 'object',
      properties: {
   
   
           ...    // 数组项 每一个商品的字段
        },
      },
    }
   }

魔鱼平台呈现给运营具备增删修改复制排序能力的数组表单:
image.png

这个过程中,我们根据数组和数组项类型指定schema的表单组件,增加数组操作控件,添加每一个表单的UI描述代码,最后通过formily渲染出上面的表单;
基于这个思路,我们约定了动态数据,其他系统的插件iframe接入的规范,避免了schema文件编写维护困难的问题;

5. 本地研发工程插件提升研发体验

我们把表单渲染模块抽象出来,提供了tnpm包,结合vscode插件,让开发在书写schema.json的时候就可以实时预览最终表单的UI样式,并提供了基于闲鱼schema规范的vscode snippets工具,帮助开发依据规范书写schema;
image.png

排期策略能力

回到本文开始提的第三个需求,运营填写的表单字段会存储在一个排期的模型里,表单里除了页面的信息之外还会提供填写排期策略的相关信息,例如生效时间,展示权重,人群类型等,依据这些信息,才能根据不同用户访问页面的时间点,返回符合规则的页面数据;
为此,闲鱼策略中台为我们定制了策略排期能力,可以将模块的资源位和排期模型进行绑定,在此基础上我们设计实现了如下能力:

    1. 提供时间穿梭能力,可以设定未来时刻来预览不同时间点页面的投放效果,达到验证页面的目的;
    1. 排期接入圈人平台,配置不同人群下发不同排期,配合部署页面语法环境验证的功能,预览人群配置效果;

总结

目前闲鱼APP内多个页面已经迁移/接入了魔鱼研发体系,相对于使用集团内搭投编辑器方案,定制设计的页面交互方案去除了复杂冗余的不相干功能提升运营理解操作成本,而通过闲鱼schema规范的设计使更多内容运营可自主修改从而减少了研发介入的发布耗时,另外通过支持动态数据源的配置能力,配合网关减少了页面首屏耗时;

搭建技术本质上也是一种低代码的技术方案,使用搭投编辑器,闲鱼前端团队可以沉淀团队日常开发中的物料组件变为通用模块来提升代码复用率从而提升研发效率;支持更多商品内容的动态配置来提升运营页面的效率。未来搭投编辑器一方面会继续支持前端研发整体方案的迭代升级,另一方面会和平台使用者积极沟通带来更好的交互体验!

文章来源:www.toutiao.com/article/711…

目录
相关文章
|
18天前
|
编解码 前端开发 JavaScript
构建高效响应式Web界面:现代前端框架的比较
【4月更文挑战第9天】在移动设备和多样屏幕尺寸盛行的时代,构建能够适应不同视口的响应式Web界面变得至关重要。本文深入探讨了几种流行的前端框架——Bootstrap、Foundation和Tailwind CSS,分析它们在创建响应式设计中的优势与局限。通过对比这些框架的栅格系统、组件库和定制化能力,开发者可以更好地理解如何选择合适的工具来优化前端开发流程,并最终实现高性能、跨平台兼容的用户界面。
|
1月前
|
Web App开发 前端开发 JavaScript
构建响应式Web界面:现代前端开发的最佳实践
【2月更文挑战第15天】 在多设备浏览时代,响应式Web设计成为前端开发者的必备技能。本文将深入探讨实现响应式界面的核心概念、技术栈以及工具,帮助读者掌握从布局到交互的全方位解决方案。通过灵活运用CSS框架、媒体查询及JavaScript,开发者可以创建出适应不同屏幕尺寸和分辨率的网站。文章不仅涵盖理论分析,还包含实际案例,确保读者能够将知识应用于实际项目中。
|
23小时前
|
前端开发 JavaScript API
【热门话题】PostCSS:现代前端开发中的CSS增强工具
**PostCSS** 是一个JavaScript库,用于转换CSS,通过插件系统解析、优化代码,确保兼容性和效率。它提供插件化架构、向后/向前兼容性、代码质量提升和与其他工具链集成。PostCSS工作原理包括解析CSS成抽象语法树,插件遍历并转换AST,最后生成增强版CSS。主要功能包括Autoprefixer(自动添加浏览器前缀)、CSS变量、CSS Modules、Linting、预处理器支持等。在实际项目中,PostCSS可通过配置文件集成到Webpack等构建工具中,持续优化工作流,助力现代前端开发。
8 3
|
2天前
|
前端开发 JavaScript 开发者
深入了解Webpack:前端模块打包工具
深入了解Webpack:前端模块打包工具
8 1
|
16天前
|
前端开发 JavaScript 搜索推荐
CSS框架是前端开发中不可或缺的工具
【4月更文挑战第12天】CSS框架是前端开发中不可或缺的工具
18 2
|
1月前
|
编解码 前端开发 JavaScript
构建响应式Web界面:现代前端开发的最佳实践
【2月更文挑战第26天】在多设备浏览时代,响应式网页设计已成为前端开发的核心。本文将深入探讨如何通过灵活布局、媒体查询和现代框架,实现跨平台的用户界面一致性。我们将剖析响应式设计的原则,并展示如何结合最新技术栈,包括CSS Grid和Flexbox,以及JavaScript框架如React和Vue,来优化前端性能和用户体验。
|
1月前
|
开发框架 Dart 前端开发
构建响应式Web界面:Flutter的跨界前端技术
【2月更文挑战第23天】随着移动互联网的飞速发展,响应式Web设计成为现代前端开发的重要趋势。在众多框架中,Google推出的Flutter以其高效的渲染性能、跨平台能力及丰富的组件生态,为前端开发者带来了新的选择。本文将深入探讨如何利用Flutter进行高效、美观的响应式界面构建,同时剖析其与传统前端技术的差异和优势。
|
1月前
|
Web App开发 SQL 前端开发
性能工具之前端分析工Chrome Developer Tools性能标签
【2月更文挑战第22天】性能工具之前端分析工Chrome Developer Tools性能标签
36 1
性能工具之前端分析工Chrome Developer Tools性能标签
|
1月前
|
Web App开发 编解码 前端开发
构建响应式Web界面:现代前端开发的实用指南
【2月更文挑战第22天】 随着移动互联网的兴起,响应式网页设计已成为前端开发者必须掌握的核心技能之一。本文将深入探讨如何通过灵活运用HTML5、CSS3和JavaScript等技术,构建出能够适应不同屏幕尺寸和设备的Web界面。文章不仅涉及理论概念,还包含具体实践案例,旨在帮助读者理解并应用响应式设计的核心原则,从而提升网站的用户体验和访问效率。
|
1月前
|
缓存 前端开发 开发者
构建响应式Web界面:现代前端开发的实用指南
【2月更文挑战第19天】 在多设备浏览的时代,为不同屏幕尺寸和分辨率优化网站变得至关重要。本文将深入探讨响应式Web设计的核心概念、关键技术和实现策略,旨在引导前端开发者通过灵活布局、媒体查询和现代化工具,打造出能够适应各种终端的界面。我们将从基础理论出发,逐步过渡到实战技巧,最后讨论当前趋势与未来展望,以帮助读者构建出高效、美观且用户友好的响应式Web界面。