无招胜有招:为何我们没有及早悟到这个办法?

使用原生JavaScript编写正式的应用,在所难免会陷入复杂的境地,然而编译器可以鼎力相助。

注意:原文发表于 2016-11-26,随着框架不断演进,部分内容可能已不适用。

慢着!这个新框架也有运行时?呃……就此谢别,江湖再见。

—— 2018年前端开发者

我们向用户滥发了过多的代码。

—— 但我和前端开发者们一样,对此矢口否认。

毕竟,让页面加载一份 100KB 的 JS 实在轻而易举,不过是少用一张 jpg 罢了。

—— 当应用已经具备交互性时,更为重要的是性能。

然而,我错了。

100 KB 的 JS,并不等同于 100KB 的 jpg。

不仅网络开销会降低程序的启动性能,还有解析和评估脚本所耗费的时间,在此期间浏览器会完全失去响应。在移动设备上,这种时间损耗的境况尤甚。

若你对此心存质疑,不妨在 Twitter 上关注 Alex Russell,Alex 虽然在框架圈里朋友寥寥无几,但他确实是言之有理。

Polymer 是类似 Angular、React 或 Ember 的替代方案,但仍未在前端界获得关注,自然也不是因为缺少市场营销。

总而言之,或许我们需要反思一下框架这个事情。


框架真正解决了什么问题?


一般而言,可以认为框架更为容易管理代码的复杂性。

框架使用 Virtual DOM 差异比较等技术,从更高层次对繁琐的实现细节进行抽象。

然而……事实并非如此。

最优的情况下,框架能将复杂性的代码从以前的必写转化为不写

相反地,React 之类的思想之所以如此流行并获得成功,全因它们创造的新概念使得管理复杂性更为容易。

框架是构筑思想的工具,并非代码。

有鉴及此,我们假设浏览器上如果不再加载和运行框架的情况呢?

与前述的 React 背道而行,倘若用一种办法直接把您的代码转为原生的 JavaScript 呢?就如 Babel 将 ES6+ 的代码转为 ES5 一样,会输出什么样的结果呢?

—— 这样您的代码在前期将不需再背负大量的框架运行时,程序会变得飞快!

因为您的程序和浏览器之间,不再有所谓的抽象层。


Svelte 登场


Svelte 就是为此而生的新框架。

您使用 HTML、CSS 和 JavaScript 编写组件(还有一些您可以在5分钟内学会的额外内容),在构建过程中,Svelte 将其编译为微小且独立的 JavaScript 模块。

通过静态分析组件模板,我们能确保浏览器所做的工作尽可能少。

Svelte 实现的 TodoMVC 压缩后体积仅 3.6KB。

相较于没有任何业务代码的 React + ReactDOM,其压缩后体积约为 45KB。

在浏览器中,评估 React 使用交互式 TodoMVC 启动和运行所需的时间,React 花费的时间大约是 Svelte 的 10 倍。

根据 js-framework-benchmark 所示,一旦启动并运行你的 Svelte 程序,它的速度超级快

它比 Reack 快,比 Vue 快,比 Angular 快,比 Ember 快,比 Reactive、Preact、Mithril 统统都快,一个能打的都没有。

除了 Inferno,这是一个有力的竞争对手,它可能是目前世界上最快的 UI 框架,因为 Dominic Gannaway 是一个向导程序。(Svelte 移除元素的速度较慢,我们正为此努力

它基本上和原生 JS 一样快,这是有其因由的,因为它就是原生 JS,只不过你不用真的去写原生 JS 而已。


但,这不是最重要的


性能当然很重要。

不过用这种新的方法真正令人兴奋的点就在于,我们终于有办法解决 Web 开发中最棘手的问题。

试考虑一下这个场景:

假设您要 npm install cool-calendar-widget 安装一个小组件,然后在程序中使用它。

在以往您得先确认这个小组件所基于的框架(以及正确的版本号)是什么,之后才能 npm 安装和使用它。

如果 cool-calendar-widget 是一个 React 内置的组件,而您正在使用 Angular 的话,那么……好吧,这情况就使人觉得如鲠在喉,难以下咽了。

但是,如果小组件的作者使用的是 Svelte(生成不依赖框架的代码),则您可以使用任何现有的技术来使用这个小组件(在代办列表中,会提供一种方法将 Svelte 组件转为 Web Component 的方法)。

同时代码分割也是一个很好的想法,只需加载用户所需的初始的 UI 视图,然后其他视图后续再取)。

但是存在一个问题。

即使您最初只是提供一个 React 组件而不是100个,您最终程序在运行时仍然需要 React 这个库本身。

使用 Svelte,代码分割会更加有用,因为框架是嵌入到组件中去的,并且组件体积也小。

最后谈一下,我作为一个开源维护作者,一直致力要解决的问题:用户总是希望优先考虑他们提的 features,而忽略了不需要这些 features 的用户的使用成本。

框架作者需要始终平衡项目长期的健康状况,以及满足用户需求的愿望。

这里头的困难大得令人难以置信。

因为项目是难以预测(更别提)急速增量的后果,它需要一些委婉的软技能来告诉人们(这些人可能一直在热情地帮您宣传),他们提的功能并不足够重要。

但如果用的是 Svelte,许多功能特性就可以方便地被添加了,那么那些不需要这些特性的人,也不必付出任何代价,因为实现这些特性的代码,非必要的情况下是不会被编译器拿去生成最终产物的。


我们只是初显身手


Svelte 还很新。

百事待举:创建 build 工具集成、添加服务端渲染 SSR、热加载、transition 等等。

还有文档、示例和入门教程等等。

不过您已经可以使用它来编写组件了,这是为什么我们直接就发布 v1.0 的原因,您可以阅读入门教程,然后在 REPL 中小试身手,也可以前往 Github 帮助我们开启下一个前端开发新时代!


<The End>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容