美文网首页
ele.me 是如何运行的

ele.me 是如何运行的

作者: Sophie12138 | 来源:发表于2016-12-07 12:58 被阅读42次

ele.me 是如何运行的

写这篇文章的时候,整个 APP 已经发生了不少变化,甚至已移除 Grunt 转用 Webpack。然而初衷未变,架构方式未变,半夜下笔。虽如此,本篇也不打算详述每个技术细节,更想做的是说清楚下面几点。

前端即业务

前后端分离:不要停留在「中途岛」

把每个页面都变成组件

当手工作坊进入工业自动化年代

难道你还没用 ES6 和 CSS Next?

编译加发布到所有机器只需 200 秒是一种什么样的体验?

机器与流量:APP 最大可承受多少并发?

题外:团队工作流

一、前端即业务

没毕业那会,鬼哥写了一篇文章说到「当有一份不错的工作只需要写 CSS」,就在腾讯。当年在《重构》的影响下,这个叫「重构」的职位应运而生,这是一个切图仔工作。直至今天,前端在携程仍是「重构」而 JS 工程师被称为「开发」。在很长一段时间内,甚至时至今日这个职位仍可能只负责把 PSD 转成 HTML,而数据输出是由后端工程师做的,市场上很多写「至少精通一门后端语言」也是从这点产生的。那时大家都在喊,前端是最接近用户的,最了解设计的,没错,可前端却不可能在一个公司中充当 CTO 的。

当 Ajax 成为日常,SPA 成为标配,甚至数据已都双向绑定,而 BaaS(Backend As A Service)慢慢被接受,后端 MVC 只保留了 M。iOS、Android、浏览器开发已经统称前端,Client-side MV* 驱动,前端即业务 —— 负责路由、响应用户操作和做数据通讯。如果今天你还在还原 PSD,我只能跟你说,辞职来我这。

二、前后端分离:不要停留在「中途岛」

大概 13 个月前,我加入饿了么,第一个项目是彻底改版 m.ele.me,说到前端后端要分离。有天 CTO 问「中途岛」研究过么?我当时说,那不叫前后端分离,不知道他心里有没有在问「你究竟懂不懂前端?」。要是我也写了一个 Node 层来负责与 PHP / Python 层对接,这样前端负责 Node + 浏览器端开发,可能会被升职加薪,因为最终变忙,把事情变复杂,而且有好多 bug 要修,像是劳苦而功高。可是我选择了 MV* 的 Angular.js 把用户业务接管到浏览器端,而后端作为 API 提供商,时间很快,熟悉业务加开发一个月把整个移动网站都开放出来给大家用,机智地避过了升职加薪的机会。

因为当时整个网站都运行在一个 PHP 框架上,Template 层使用了 Twig,既然已经想让浏览器接管一切,那么让 PHP 只需要处理 M 层就可以了。

无论是 Twig 还是 HTML,我们遇到一个问题:HTTP 请求太多了。解决这个问题其实可以使用script作为 Template,当然也可以直接把模板编译成 ng 的 Template Cache。前者写在 html 里太丑了,而且不能重用(你丫也可以写成单独一个文件啊),变成 js 文件吧,然后一起扔到 CDN 上去。情况就是这样:

Twig -> HTML -> Template Cache(js) -> (CDN)

结果整个网站变成了 Nginx + index.html + BaaS,呃,Node 给了很多机会,可是这会还有人想停留在「中途岛」吗?考虑一下下面的问题:

把 View 的渲染交给服务器,还是切分交给每个用户的浏览器?

是否需要重启 Nginx 、重启 PHP、重启 Node?

Cache API 后并发可以提高多少?

不需要复杂的 HTML 缓存机制/机器,CDN + 静态 html 可以搞多少并发?

我只想说一句,你选吧。

三、把每个页面都变成组件

把业务接管到浏览器同样会遇到一个问题:MV*。把目录分成lib/、model/、controller/、view/,太多这种做法了。比如 angular-seed 之前的分法就类似,把所有 controller、directive、filter、service 都放在不同文件。这样做是不是最佳实践呢?

相关文章

  • ele.me 是如何运行的

    ele.me 是如何运行的 写这篇文章的时候,整个 APP 已经发生了不少变化,甚至已移除 Grunt 转用 We...

  • ele.me's drones

    Food delivery platform ele.me said on Tuesday that it has...

  • JavaScript 是如何运行的?

    摘要: 理解JS执行原理。 原文:JavaScript 是如何运行的? 作者:hengg Fundebug经授权转...

  • 程序是如何运行的

    程序编译和程序解释 计算机是理解不了人类的语言、同样也理解不了高级编程语言的,CPU能直接解析并运行的不是源代码而...

  • 程序是如何运行的?

    在我们学习编程时,往往关注的是某种语言以及对应的使用环境,在此基础上完成我们的业务开发并部署运行。抛开这个最常见的...

  • 程序是如何运行的

    做任何事情,对整体有个宏观的把握是非常有必要的,把握住了整体,就有了宏观概念,相当于有个骨架,以后所有的东西无非是...

  • Goroutine 是如何运行的

    在 Go 语言中,没有线程,只有 goroutine,这也是 Go 语言原生支持高并发的关键。 goroutine...

  • 因果是如何运行的

    普通人对于因果的概念多数就是杀人偿命、欠债还钱,如果相信来世的则会认为这个结果可以到下一世才出现。大多数人都是这么...

  • JVM 虚拟机栈

    虚拟机栈 栈是运行时单位,堆是存储的单位; 栈解决程序运行问题,如何运行,如何处理数据; 堆解决数据如何存放,存放...

  • Teratimes | 理解现实,接受现实,应对现实

    世界上最重要的事情是理解现实如何运行,然后学习如何坦然接受现实,以及如何应对现实。 了解现实如何运行,是创造的基本...

网友评论

      本文标题:ele.me 是如何运行的

      本文链接:https://www.haomeiwen.com/subject/vwhdmttx.html