我是李焱, 来自成都漫极客科技有限公司。 我于 2010 年从北京大学毕业,获得信息管理系学士学位以及计算机软件学士学位。毕业之后,我在酷我音乐商务组从事 web 开发,主要负责公司广告系统、VIP 会员等级体系、音乐盒内弹窗等业务。
两年之后,我觉得前端开发技术难度比较小,而且浏览器兼容性问题很大,大部分时间都是纠结于一些莫名其妙的 bug,不值得继续做下去,选择在后端深入下去。然后,我跳槽去了人人游戏,加入钢铁元帅项目组,做游戏后端开发,用到的技术主要包括网络协议、服务器缓存、并发、数据库优化等。北京天气很差,我常年犯鼻炎,于是一年之后选择南下回成都。当时觉得成都的互联网环境还不太好,所以我在 2014 年去了深圳腾讯,在 MIG 无线合作开发部门,做应用宝相关开发工作,对大厂的产品设计、需求评审、开发、提测、部署上线等整个研发流程以及敏捷开发有了深入认识。
2015 年,成都创业公司的朋友联系我,希望由我带领大前端技术团队,我就回成都了。在公司,我主要推进公司前后端分离,逐渐用 React、Redux、React Native 等技术架构统一 Web 前端、Android、iOS 三端,以及微信平台开发。一年之后,公司的原 CTO 离职,工作交接给我, 我继续带领后端团队做微服务,推动 CI / CD 相关工作,把服务迁移到阿里云等。
2017 年 5 月底,我离职创业,成立漫极客科技有限公司。公司口号是“用科技优化生活”,致力于用技术提高人们工作效率、改善人们生活质量。公司英文名是 MagicFun.AI,其中 fun 既是有趣的意思,又是编程里面 function (函数)的缩写。我们希望自己扮演的角色是“由 AI 技术等赋能的神奇有趣的函数”,帮助用户快速成长发展。公司目前业务主要包括在线IT教育、IT咨询,以及企业定制开发包括 Web 、APP、微信公众号、小程序、数据分析和可视化等。此外,我们目前在准备开发一个深度增强学习和游戏相结合的项目。
刚毕业的时候,其实不太懂什么叫前端。有师兄建议从前端做起,理由很实在:做后端的全是男生,前端有女生,还有 UI 设计师基本都是女生。
同时,现在的前端已经远非用用 jQuery 和写个页面,然后解决一堆坑爹的浏览器兼容性问题了——而这些是我当时刚接触的时候的常态。前端技术越来越复杂,有不低的技术门槛。同时,前端越来越重要,能做的事情越来越多,比如微信开发、APP、Desktop、AR / VR 等。
更重要的是,我认为,前端更接近产品本身,能直接跟用户、产品经理、UI 设计师、市场等沟通,有利于自己全方面发展。后端发展会越来越“云化”,我的判断是,以后后端程序员会分两大类,一类是做云的, 一类是用云的。尤其是随着 Serverless 等技术的发展,在产品规模比较小的情况下,可能都不需要专门的后端程序员——或者依赖很小。
说到前端,一般大家还都是指的 Web 开发。其实现在 Web 能做的事情已经非常多了。
WebRTC 其实是一个开放标准,在浏览器里面可以直接做视频聊天或语音聊天。目前的浏览器支持情况也是十分好的,包括较新的 iOS 11,下图是 WebRTC 的浏览器支持情况。
(点击放大图像)
图片来自 https://caniuse.com/#search=webrtc
WebRTC 能够做端到端的通信,也就能实现P2P技术。 目前已经有人基于这个实现了 P2P CDN,这可以节省很大的成本,比如 Serverless CDN 。
浏览器里也是可以实现AR/VR 效果的。WebGL 支持3D ,在此基础上有ar.js 的开发库, 可以比较高效的写出 3D 程序。刚刚说过,WebRTC 可以调取摄像头,摄像头结合3D就能做出AR和VR效果。 https://aframe.io 是火狐开发的专门做 AR/ VR 的框架。
这里有一些其他的 AR / VR 方面的参考资源:
浏览器一直有个很重要的问题,就是性能问题。现在,Web 技术已经可以在浏览器里面做大型 3D 游戏,下面是一些链接 demo,大家可以查看一下。
它主要用的技术,
关于 asm.js 和 webassembly 的更多细节, 可以参考我最近撰写的一篇博客, https://magicly.me/fe-hpc/asmjs-and-webassembly/
webassembly的浏览器支持程度也是非常高的了,新版的火狐、Chrome、iOS、IE、Opera等都支持,如下图。
(点击放大图像)
前端也可以做机器学习方面的内容,这里我提供两个参考链接给大家。先进个是李飞飞的高徒 Andrej Karpathy 开发的 ConvNetJS 。第二个是谷歌刚刚开源不久的 deeplearn.js 库。两个库都可以直接在浏览器里训练深度神经网络。
前面提到的Web技术都是运行在标准的浏览器里面的,现在还有很多Web技术是运行在封装之后的浏览器内核里比如 Electron 和 NW.js ,比如桌面端的微信开发工具、Slack的桌面版本、桌面版Github等,还有一些已经不完全是运行在浏览器里的了,比如微信小程序、React Native、阿里去年开源的Weex等。
我认为的大前端应当包括以下内容:
Web 是现在最流行的真正做到跨平台运行的技术平台:PC、Web、手机、手表、TV、Kindle、电冰箱……
Any application that can be written in JavaScript, will eventually be written in JavaScript. -- Atwood’s Law
下面介绍一下我们用 Web 技术统一三端的技术。
我从 2011 年开始关注 HTML5,HTML5 的功能越来越强大,新特性一直在涌现,包括原生支持 video、audio、WebRTC、WebGL, push notification、离线存储、service worker、webworkers、webassembly、PWA以及 Chrome、FF 等 addon 技术,增强 Web 能力。
我认为 Web 的繁荣起源于 V8 引擎的出现,大大提高了 JS 的运行效率,然后 Node.js 的出现,使 JS 摆脱了只能写写页面动画的局面,然后各种构建工具、脚手架、开发框架等纷纷出现。比如现在的Ng、React、Vue等框架。
RN 出现的时候,我们跟进了很长一段时间,觉得可以用在生产环境,我们先让 iOS 团队试用。当时的问题是,iOS 开发人员觉得这种技术性能有问题,同时跟平时开发习惯完全不一样,包括一开始写标签写 JS 很痛苦,之前都是在 Xcode 直接拖拽就能快速生成界面,用 CSS 和 JS 效率还太低。强行推下去一个月左右,大家就熟悉了,觉得用起来很方便,动态更新能让改动之后立马看到效果也很方便,大家就都接受了。三个月后,iOS 做得差不多了,也踩过坑了,我们就让安卓同学用 RN 重构代码。最后我们实现的效果是,安卓跟 iOS 基本上 50% 代码是公用的。
要用web技术做app开发,除了RN还有几个其他的选择,比如 PhoneGap/Cordova、Ionic、Weex。
然后出现了微信小程序。我们是先进批拿到微信小程序体验码的,看了之后发现它跟 RN 的思想很像。我们在原生的小程序接口上面做一层封装,得接口更接近于React,然后把之前的 HTML5 页面以很低的成本迁移到微信小程序。
我之前没怎么做过PC端,最近刚好有个项目需要做 PC 软件,我先进想到的还是用 Web 技术去做。我做了调研,了解到一个是 NW.js ,一个是 Electron 。分析之后,我觉得 Electron 比较新,并且在它基础上已经有几个比较重量级的项目成功了,比如 Atom 编辑器、微软的 VSCode、Slack 桌面端、GitHub 桌面端等。
所以我们选择用 Electron 实现。
后端管理系统,包括统计报表、指标曲线等等,我们用的是百度开源的可视化框架 Echarts 。
另外我们也用过 D3 ,它是一个更灵活功能更强大的开源框架,专门做数据可视化。
去年VR特别火,我们也做过 360 度全景视频等,主要用到了 WebGL。 WebGL 是比较复杂的,我们是基于别人封装的库 Three.js 做的,一句话,很好很强大。
前面所说的,基本覆盖了我用Web技术开发过的东西,包括HTML5、APP、微信开发、PC 端开发、数据可视化、AR / VR等。
很多人会怀疑 JS 的性能问题,比如它是单线程的、它是动态语言。怎么解决这些问题呢?
首先,JS 的性能已经很好了,大部分情况下,如果是简单的 Web 开发,已经没有什么瓶颈了。
另外一方面,像 webwokers 并发技术、WebAssembly 将原生代码编译成 JS 执行的技术以及利用 WebGL 做 GPU 加速技术的出现,基本上已经解决了 JS 的性能问题。
最后说一下我们的部署架构。
如果是 SPA 这种单页面,基本就是把 index.html 部署到 nginx 后,其他打包部署到 CDN,包括JSS、CSS、图片、字体等。打包内容会用 WebPack 自动加上文件内容哈希码,然后把Cache-Control的max-age设置成很大,这样能够充分利用浏览器和 HTTP 协议的缓存,又能保证及时更新。
为什么 index.html 不放到 CDN ?因为如果CDN 缓存清除不好的话,入口文件没有更新就会导致所有的资源都更新不了,这是个很严重的问题。
如果觉得上面的方式首页白屏时间比较长的话,我们会选择 nginx 后端部署 Node.js 做服务端渲染,解决首页白屏时间过长的问题。或者也可以用 Gatsby 、 next.js 之类静态生成工具提前生成静态页面,等待首页加载完成之后,再去动态加载其他页面。
最近我看到几个项目,是把所有的项目全部部署到 CDN 的,他们提出了一个叫 JamStack 的架构,感兴趣的可以了解一下。
最后就是前后端分离。前端只负责页面和前端效果的实现,开发之前先制定好API接口,接口我们用 RAP 来管理,前端自己用 JSONServer 模拟数据,所有发布都是打包传到 CDN 上去。这样的话就会有跨域问题,我们用 CORS 解决。CORS 的浏览器兼容也做得挺好了。
2019-03-21 17:28:12 2668
2019-03-21 17:27:07 2949
2019-03-21 17:25:57 3047
2019-03-21 17:24:53 2953
2019-03-21 17:23:46 3021
公司正在筹划上市,为扩大市场占有率,将在近3个月内每日赠送6个免费服务名额。
今日仅剩下2个免费名额
关于微信小程序web-view组件内嵌h5的具体配置流程
目前, 微信 小程序 开发 呈现出 持续火热 的状态 ,越来越多的商家开始关注并开发自己的小程序, 但是,我们也看到,还有一部分的 商家 持观望的态度,不知道是...
微信小程序 对于许多企业的发展是有助力作用的,因此,现在 许多公司在小程序出现已经开始申请自己的账号,一些提前开始运营 微信小程序 的公司已经取得了不错的成绩,...
了解大连的微信公众号代运营价格,花最少钱干最多事
现在, 微信小程序 成为了企业在进行微信营销时又一个有效的方式,许多企业通过 微信小程序 开发的方式建立起微信上的营销覆盖网络,但是,有些企业在开发小程序之后,...
关于微信小程序web-view组件内嵌h5的具体配置流程
目前, 微信 小程序 开发 呈现出 持续火热 的状态 ,越来越多的商家开始关注并开发自己的小程序, 但是,我们也看到,还有一部分的 商家 持观望的态度,不知道是...
微信小程序 对于许多企业的发展是有助力作用的,因此,现在 许多公司在小程序出现已经开始申请自己的账号,一些提前开始运营 微信小程序 的公司已经取得了不错的成绩,...
了解大连的微信公众号代运营价格,花最少钱干最多事
现在, 微信小程序 成为了企业在进行微信营销时又一个有效的方式,许多企业通过 微信小程序 开发的方式建立起微信上的营销覆盖网络,但是,有些企业在开发小程序之后,...
1漫极客 CTO 李焱:大前端之路 - 如何用Web技术一统三端(Web、D
漫极客 CTO 李焱:大前端之路 - 如何用Web技术一统三端(Web、Desktop、Mobile)开发