前言

前端近年来一直在尝试如何提高开发人员的效率,从最初的脚手架工具、组件库、持续集成体系、自动化测试、多端适配到现在的全面的低代码平台、前端智能化、在线 IDE,大家都在为未来的新的且高效率的方式做着努力。

前端行业即将要进入到下一个阶段,因为对于如何搭建组件库、脚手架已经有大量的文章/教程,已经快到了人人可以手撕一个组件库的阶段了,并且随着前端开发人员的技术的普遍提高,枯燥机械式地写代码(样式/布局)已经无法满足开发人员日益增长的追逐技术的心了,因此需要智能化布局来解放这些枯燥的工作。

落后就要挨打,我就打算趁着周末打算探索一下前端智能化。(本人也是新手,纯是感兴趣~,因此不用担心看不懂)

发展历程

其实要说从设计稿转化为 html 的项目,最早可以溯源为 PS(Photoshop) 的导出 html 功能,PS(Photoshop) 可谓是一个老牌的设计产品,从1988年首次发布新版本,到现在仍然在更新。

我们来体验一下这个功能。

首先打开 PS, 导入一张网上随便下载的图片,将 图片 拖进 PS。然后按照以下步骤进行操作。

1.按 command/ctrl + R 打开标尺

2.拖出辅助线,拖出分割块

3.选择切片工具(裁剪工具那一个图标按右键)

4.选择顶部的基于参考线切片

5.文件 - 导出 - 储存为 web 所用格式

就能看到导出了以下几个文件。(我这里切的比较粗糙如果是精细地将一张图片进行切片,应该是非常符合web 的所用格式的,毕竟很久以前,设计师就是这么给我们切片的)

然后我们打开 html 查看里面的元素。

发现它主要以 table 的方式来布局,但是这样的形式,在日益繁多的设备上是无法使用的(可能在当时的PC上还能有不错的应用场景。)

前端当时正处于萌芽阶段,前端智能化的概念还没有被提出,没有 Vue、React,没有工程化,也没有低代码,一切都是刚刚起步,前端智能化也没有被提及。

直到2017年,一篇 pix2code: Generating Code from a Graphical User Interface Screenshot 的论文引起了业界的关注,该论文实现了从一张 UI 截图识别生成了 UI 结构,并且将 UI 结构描述转化成了 HTML 代码。

随后,基于 pix2code 开发的 Screenshot2Code 项目速度进入到 Github 排行榜第一,该工具能够将 UI 截图转成 HTML 代码,该项目作者号称 3 年后人工智能会彻底改变前端开发。

2018 年,微软 AI Lab 开源了草图转代码工具 Sketch2Code,一些人认为生成代码效果不理想不适用于生产环境,但也有人认为代码自动生成还处于初级阶段,未来发展值得想象。

工作流:

效果实现:

一直到2019年, D2 前端论坛(Designer & Developer Frontend Technology Forum, 简称D2)发布了 imgcook ,前端智能化这个词正式确立了。

随后58集团、CodeFun等 都相继发布了智能化的产品,但是这个行业是年轻的,也是具有挑战的,这些产品的都还在初期,虽然没办法全方面的得到开发者的青睐,但是都已经有一些不错的落地场景了。

项目体验

设计稿:demo.sketch

代码与sketch下载地址: https://github.com/nan980914/ui2code-demo

这次将分别体验58的 Picasso、imgcook、CodeFun 3款工具的「sketch设计稿转代码」。

我们将以平常写代码中比较重视的几个部分来对这三款软件进行分析:

  1. 是否可以还原设计稿
  2. 布局识别的准确性
  3. 代码(css)可维护性(代码量,定宽定高,flex)
  4. List自动识别,分组
  5. 列表循环识别

其中第一点是最基本的,因为如果一个D2C(Design To Code)工具,抛开一些布局之外,连基本的设计稿都无法1:1 还原的话,对我们开发的工作量来说太巨大了,这就好比某个同事已经写了一个半成品项目了,这个时候他突然有事请假了,需要我们去帮忙结尾,这个时候我们需要去看别人的代码,再去修改。每每这个时候心里都会念叨,还不如自己重新写一个项目。

对于第二点来说,布局的准确性,明明是一个左右布局,你给我识别成了上下布局,那基本上那一块的代码都都重新进行修改。相比第一点来说,稍微还好一些,至少不是去收拾一个半成品,只是去改别人写好的项目中bug一样,至少还是能用的。

第三点的话,我认为还是很重要的,CSS 代码的可维护性,我们都知道设计图上对于模块的大小都是width 和 height 的标注的,但是我们真正在写代码的时候,都是不会去定宽和定高的,都是由内部元素去将模块给撑开高度,这样的话,对于移动端的短适配性会比较好。

对于第四点和第五点,算是写代码的复用小能手,对于一个 list 我们一般不会去在 html 写死成多个 块,而是会用循环舒服,减少重复代码,也是为了能够和后端进行适配。

58 Picasso(https://github.com/wuba/Picasso)

操作流程:

Picasso的Github仓库上下载其sketch插件毕加索,在sketch中选中我们的画板后生成Web代码。

然后就导出了这样一个文件,让我们打开index.html来看看效果。

1.是否还原设计稿:

怎么说呢,可以看到58Picasso这个还原效果其实除了订单的实付价格那里不知道怎么被挤下去了,和底部footer的样式错乱以外看起来还可以,那我们来看看代码到底怎么样。

2.布局识别的准确性:

我们期待的是两个左右结构的块,却被识别成了这个样子…

虽然以上采用了 flex 布局,但是并没有等分布局,并且也被定宽了,我们希望的是:

3. 代码可维护性:

index.css生成1289行。

分析了一下它会生成如此多代码的原因。

1.累赘的类名

它给每一个div元素都设置了一个英文单词,并且与当前的模块的语义化严重不符。

2.定宽定高

由于它给每个div都是定宽定高的,因此也产生了许多不必要的代码。

3.同类型无法合并

由于没有办法归类相同的元素,因此代码也变得更多了。

4. List自动识别,分组

分析这个设计稿我们可以看出来,下面三个订单的块其实是非常相似的结构,我们希望生成的代码能把相似的结构识别出来并分在同一个组内而不是平铺。

连 list 都没有识别好,那就没有第五步了,总结起来这样的代码,仿佛就是同事甩的锅一样,难以维护,有这时间看代码和修复代码,自己已经写好一个完美版本了。

5.总结

所以 Picasso 距离工业化代码还是有一定差距的,不过 Picasso 的代码是开源的,里面的布局方案是通过图层解析出DSL,然后再通过一定的算法生成的代码。

imgcook(https://www.imgcook.com/)

流程:

imgcook的官网上下载其sketch插件,在 sketch 中打开插件的面板选择导出代码导出到我们的项目,然后就可以去官网我们的项目里查看。

1.是否还原设计稿:

由图可以看到,imgcook 貌似都没有把设计稿还原。

订单管理那块的层级好像被上面给挡住了,另外Button都被描边了,显得特别粗。

2.布局识别的准确性:

仔细看其布局,其实识别的比上面 58 Picasso 的准确很多,比较符合我们日常写代码的习惯,但是依旧被定了宽度。

3. 代码可维护性:

CSS 生成1870行…冗余代码非常多。

其实这部分还是和 58 Picasso 一样的问题的。累赘的类名,定宽定高,并且同类型没有合并(暂时没有找到如何合并),还有些是通过 absolute 来布局的。

4. List自动识别,分组

这里也和58 Picasso 有点类似,貌似效果还是不太理想。也是没有很好地将 list 进行识别。

imgcook 也算是一个做了比较久的产品了,可见D2C的难度还是非常大的,对于算法的要求很高。

5.总结

Imgcook 比 58 Picasso 改进了许多,加入了 AI 来训练模型,准确度和可用性都比Picasso 好很多。并且模型训练框架 pipcook 也开源在 github 上面。

CodeFun(https://code.fun/)

流程:

CodeFun的官网上下载其sketch插件,在sketch中打开插件的面板选择上传此设计稿,然后就可以去官网我们的项目里查看。

1.是否还原设计稿:

很惊喜,CodeFun 这个还原的比上面两者都要好,和设计稿看起来几乎100%。

2. 布局识别的准确性:

完美的识别出了我们期待的布局,但是这里要提一下的是,CodeFun 不仅识别除了均分的 flex 布局,而且相比 imgcook 没有定宽,而是使用了flex-grow:1

效果如图:

看代码可以看到,部分公共部份的样式都被翻译到了equal-division-item这个class里面,几个box都共享上了,唯独flex-grow:1被单独弄成了group_16 17 18,造成了一些冗余的css代码,这么复杂的识别都做到了,这里是不是个bug呢?

3. 代码可维护性

css 代码生成 597 + 81 = 678 行(主代码+公共代码),比Picasso1289行和imgcook1870行分别减少了47%和64%

虽然类名还是有些不语义化,但是已经是去除了写死的宽高,同类型进行了合并抽取出了公共代码。

4. List自动识别,分组

CodeFun 能自动识别出下面三个结构相似的订单模块,并进行分组,将三个块外面包了一个wrapper,符合我们开发人员日常写代码的习惯。

5. 列表循环识别

因为已经识别出了下面三个结构相似的模块,于是vue代码会自动以v-for列表循环的方式展现。

如果想要抽离数据,可以通过上方的数据绑定自定义字段名(一般我们会绑定为后端传过来的字段名)。

绑定后的效果如下,其实到这一步,生成出的代码已经完全可用了。撒花

前端智能化D2C效率提升50%,带你一睹为快相关推荐

  1. 阿里云面向制造业推出防疫复工数字化方案 复工效率提升50%以上

    [TechWeb]2月14日,阿里云联合钉钉面向制造企业推出了防疫复工数字化方案,可帮助企业在疫情阶段进行数字化管理,如检测返岗人员健康情况.管理生产设备.在线生产报工等,帮助企业复工效率提升50%以 ...

  2. IDEA 神级插件!效率提升 50 倍!

    点击关注公众号,利用碎片时间学习 安装好Intellij idea之后,进行如下的初始化操作,工作效率提升50倍. 一. 安装插件 1. Codota 代码智能提示插件 图片 只要打出首字母就能联想出 ...

  3. 开发效率提升50%以上,爱奇艺官网主站的Nuxt实践

    01 背景 让每一个用户获取到稳定.及时的页面体验,是前端工程师们一直以来努力的方向. 作为一个拥有丰富内容资源的视频网站,爱奇艺官网主站需要频繁进行节目上线或者下线.各种活动配置等操作调整,对于页面 ...

  4. 选对论文,效率提升50% | 本周值得读

    在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考. 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果. 点击本文底部的「阅读原文」即刻加入社区 ...

  5. keychron:一款能让我工作效率提升50%的设备。

    keychron之K8RGB款 1.引言 2.keychron 2.1 keychron介绍 2.2 K系列简介 2.3 K8介绍及使用 2.3.1 外观 2.3.2 配置 2.3.3 K8 使用体验 ...

  6. 巧用这些可视化分析工具,让你的工作效率提升50%!

    如果企业白领们穿越到过去,要做的大概就是码码字.打打电话.做做执行,然后葛优躺.非常"幸运"的是,现在互联网鹅们必须是全能超人:码字.做图.排版.搞活动.数据分析.做汇报总结-- ...

  7. K8s 集群节点在线率达到 99.9% 以上,扩容效率提升 50%,我们做了这 3 个深度改造

    作者 | 张振(守辰)阿里云云原生应用平台高级技术专家 导读:2019 年阿里巴巴核心系统 100% 以云原生方式上云,完美地支撑了 双11 大促.这次上云的姿势很不一般,不仅是拥抱了 Kuberne ...

  8. K8s 集群节点在线率达到 99.9% 以上,扩容效率提升 50%,我们做了这 3 个深度改造...

    2019 年阿里巴巴核心系统 100% 以云原生方式上云,完美地支撑了 双11 大促.这次上云的姿势很不一般,不仅是拥抱了 Kubernetes,而且还以拥抱 Kubernetes 为契机进行了一系列 ...

  9. 让数据分析效率再提升50%,帆软FineBI V6.0版本最新剧透

    转载/亿欧 1881年,英国出版的<机械与成绩>一书中曾写道:现在一千人当中,没有一个人不穿袜子.工业革命的伟大之处,就在于机器大生产解放了劳动力,让成千上万的英国女工穿上了女王同款丝袜. ...

最新文章

  1. P4396 [AHOI2013]作业 cdq分治
  2. ie6/7 position relative overflow
  3. amba simple class驱动_UML - 建模基础 - 用例驱动
  4. 获取系统分辨率_一文弄懂高分辨率高速快门CMOS成像传感器技术应用现状
  5. ubuntu下卸载cuda8.0,和安装cuda9.0,cudnn7.0,tensorflow-gpu=1.8
  6. Qualcomm 推出下一代物联网专用蜂窝技术芯片组!
  7. 刷题记录 kuangbin带你飞专题五:并查集
  8. 基于onvif协议的嵌入式设备(摄像头)开发(客户端)
  9. MySQL中怎么对varchar类型排序问题(数字字符串和汉字拼音的顺序)
  10. poc测试环境准备_POC测试经验总结
  11. 5-2 uniapp 打包 app 自定义开屏页
  12. Banner在线制作网站介绍以及如何Springboot中使用
  13. API接口使用方法(封装好的电商平台)
  14. 每一次严重事故都是可以预测的
  15. 中创|又临双11淘宝崩了,中心化存储难以支撑
  16. 活性DNA羟化酶 Tet1 活性测定
  17. paramiko-简介
  18. 爱立信(中国)有限公司
  19. spring boot 打包部署发布
  20. (附源码)python电影院购票系统 毕业设计221133

热门文章

  1. 关于关闭QQ对话框的快捷方式
  2. SQL 先进先出的库龄计算
  3. 微信7.0.10内测更新!除了适配暗黑模式,还有这些实用功能!
  4. 计算机环境艺术设计专业,计算机基础课程在环境艺术设计专业中的运用
  5. linux grep 排除_如何在Linux中排除Grep?
  6. 伯努利模型之买彩票问题
  7. ubuntu 20.04死机卡死情况解决办法
  8. java filewriter_Java IO: FileReader和FileWriter
  9. Sfm方法过程及原理
  10. 如何在Libgdx中使用ValueAnimator