参加 D2 2015 技术论坛感想

上周末去杭州阿里巴巴西溪园区参加了 2015 年的 D2 论坛,正好是第十届。

我听了一天的主会场,并在知乎上实时直播: 参加第十届D2前端技术论坛,你有什么收获? – yuanyuanVivian 的答案 。在这里谈谈自己的心得感想吧!

NodeJs 开始绽放

主会场的几场分享都还算挺不错。其中 NodeJS 相关的两场分享,一个是 Tmall 的线上经验,一个是 QZone 的线上经验,都是耳熟能详的大网站。我认为这代表 NodeJs 的线上能力已经得到了足够的验证,可以加快推广了

这里好多人争论这两份技术方案都不是非 NodeJs 不可,推行 NodeJs 像是政治斗争的结果等等。我觉得抛弃性能之争(虽然我认为事件驱动的高并发的能力更强),NodeJs 在这两个高流量网站的线上成功,至少可以说明 NodeJs 已经是一个“足够好”的后端选择。不仅如此,还有很多不能忽略的好处:前后端同构、HTML5 开发效率、减少为了提高 UI 性能的沟通成本等等(QZone 的滑动不闪屏就是这样的例子)。把这些作为前提,NodeJs 已经没必要自诩做什么都更强了,正如死马所说

因为影响一个系统的性能的因素实在有太多太多,语言因素在其中的占比微乎其微,轻微的一个设计不当或者实现有问题就能造成非常大的性能损耗。我们只需要验证基于 node 的方案完全可以支撑这个业务场景面临双十一的流量就足矣。

这样的解释很让我赞同。因为前端之所以被需要,不是因为“界面能不能用”这样的是非问题,而是“界面流畅不流畅,界面好不好用,操作是否友好”这样的量化问题。如何量化?只要更便于开发,更便于效率,更便于调试查错,更便于监控,更便于流程等等——只要对产品交互提升有切实的好处,不管是降低成本还是提高效率都行。这个问题,完全不是非要有“只要用了 NodeJs,就一定是最快的”之类的论断来保证的。

更何况,当年的 PHP 和 Java 也不是最快的那一种选择,只是开发成本相对低而已。

不仅如此,《NodeJs 加速 QZone 开发》的讲师也这样解释:

NodeJs 在空间大规模应用,并且规模继续扩大中,这个并不是政治斗争的结果。而是结果导向——谁完成的好谁上。反而是后台和用户体验推动着前端开发不得不用。

搞定了标准化运维、监控以后,就没有人能再挑战这个解决方案了。

公司从来没有规定前端不能做服务器端解决方案。而是一视同仁,一样的质量、问题定位和运维标准。只是这些都要前端来搞定,才能被认可。

光喊口号又不解决这些问题,当然会被喷。但是解决了,心里就会有底。

很显然,QZone 的实例中,NodeJs 把这些问题解决得很好,并得到了认可。

NodeJS 在 QZone 解决了持续发布问题,相当于几乎每天都有发布。这是 Nginx 无法做到的。NodeJs 还做到了开发、运维、监控一体化,而且 NodeJs 内部的标准化远高于 Nginx,并且还在持续迭代,解决各种问题。

还有,NodeJS 在 QZone 也解决了一些业务相关的,不那么通用的,“别的纬度”的问题:

协议转换:比如 HTTP 协议转发为 JCE 协议

带逻辑转发:比如白名单用户转到测试环境

安全对抗:随时随地编码建立模型对抗攻击

内部服务打通:发邮件,发短信,发微信,非常规告警

这里有一篇腾讯 SNG 运维发展的文章 《大公司也一样,从QQ运维的历史遗留问题看运维的进化过程》,结论就是标准化程度高才是出路。NodeJS 作为织云的一个标准包,扩容、缩容、运维流程等都有织云的标准化完成。依附于上面的 NodeJs 省了好多事情。对于腾讯的运维同学来说——按这个标准化的就是可运维的,不管里面跑的是什么代码。

讲了那么多,不过,如果明年真的出现所谓的“NodeJs 最适合的场景”,还是拭目以待吧。

移动端性能问题盖棺定论

主会场上手机淘宝 Hybrid APP 的性能优化分享其实是一个高大全的分享。一开始让我觉得不知所云,是因为误以为“手机淘宝”指的是手机淘宝的 HTML5 网站。

第一次知道 BlendUI 是在 2014 年的 杭JS 大会(网上搜索到的 2014 杭JS 参会总结)。那时候所有移动前端相关的会议还在纠结无法解决的性能问题: HTML5 开发快但是能力被浏览器限制死了,只能做做玩具。因此,各种各样试图混合 Native 的功能和性能和 HTML5 开发效率的方案层出不穷。在 Native 提供原生 API ,并配合 WebView 的 Hybrid 就是其中广泛采用的一种方案。然而 WebView 也是浏览器,HTML5 在浏览器中受的限制依然存在。

似乎一提到移动端,回荡在耳边的都是:内存不足、内存不足……存不足……不足……

BlendUI 算是当时真正让人眼前一亮的技术方案之一。从当时的 PPT 上来看,内存不再不足,DOM 个数不再因为内存问题而被限死,本来会很卡的手势交互效果如行云流水。Native 的效果、HTML5 的开发效率,满足了所有人的一切幻想。

BlendUI 真正用起来据说是有坑的。但是它的思想,至少从现在来看,被证明是正确的:

在 WebView 上面再套一层 layer,从而解决每个 WebView DOM 个数成为内存和性能瓶颈的问题。

更宽泛的说,就是

用强大的 Native 功能拓展 HTML5 的功能,并提供更便于 HTML5 运行环境。

手机淘宝不仅采用了 WebView 上面再套一层 layer 的优化方案,更从原生的角度对 WebView 的功能进行了扩展,使 WebView 成为一个“更加强大的浏览器”。从分享来看,至少体现在:

  • 不兼容时将 WebP 转换回 jpeg 的能力
  • 支持 HTTP DNS : 通过 HTTP 协议提前获得域名和 DNS 的映射表
  • 预加载 : 能根据网络情况响应推送从而达到超高的缓存覆盖率 \ 全量增量更新支持 \ 个性化 \ 断点续传 \ 安全校验 \ …

最后,手机淘宝团队实名表达了对 React Native 的鄙视。React Native 作为另一种将 Native 的强大能力和 HTML5 的快速开发能力相结合的技术,由于手机淘宝的历史成(包)果(袱)的存在,并不是最优秀的解决方案。

但是,对于从零开始的小团队,React Native 将会表现如何呢?期待更多的分享吧!

(其它话题继续待续)

发布者

袁 源

我是袁源,职业是前端开发 关注我的新浪微博

《参加 D2 2015 技术论坛感想》有8个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注