瞎扯淡 我会说 Turbolink 的体验就是一坨屎吗

gs412 · 2013年08月23日 · 最后由 leanv 回复于 2017年05月22日 · 15485 次阅读
本帖已被设为精华帖!

所谓的节省那点带宽,根本就微不足道,带来的不便,太多了,卡到死

用户体验太烂了,给所有 body 内的元素自动添加事件,这个做法太耗资源了,有种胡子眉毛一把抓的感觉。不管用到用不到,把 body 内的所有元素过一遍,这得多大的计算量啊

请问用户体验跟 body 内元素自动添加事件的关系?

哪里把所有元素过一遍了?

https://github.com/rails/turbolinks/blob/557f9542ab5b45ec39d90b64f88a2dc1429ddf42/lib/assets/javascripts/turbolinks.js.coffee#L289

我建议是能看懂 turbolinks 源码的尝试用,不想看或者看不懂的不要用。

不要动不动就喷 shi

为什么我 chrome 用起来各种打不开的。。。就看到圈圈转啊转。。。

为什么我感觉很快,很好

现在用 firefox 卡死了,用 chrome 还好一点

卡是因为撸猪的小水管吧......

就不明白了,技术细节还没有搞懂呢吧就在这里喷屎……当年 AJAX 出世的时候岂不也是一堆屎?或许论及影响力和重要性尚不能相提并论,但毕竟是进步,是创造。人类追求进步的信念和动作,有成功也有失败,也从来没有百分之百的完美,但无论如何,尽享别人创造的人也没有丝毫立场可以大放厥词吧?

#9 楼 @nightire #3 楼 @Rei #2 楼 @lgn21st 借道问个,比如下个工程打算用 Rails4 A,按默认带 turbolink,然后一边开发一遍遇到相关问题去看 turbolink 学习定位处理;

B,不用 turbolink,先抓紧开发完基础功能,然后加上 turbolink 优化并调试

推荐选哪个?如果 Rails3.2 呢

备,turbolink 虽然挺短,但是 js 基础不够,源码没法深入理解。有讲解的也可以推荐给个链接。

这下有意思了

@hbin 你这货在这里幸灾乐祸。

#14 楼 @tumayun 我又没说某人摊上大事了,哪有幸灾乐祸之心。看各位 “激烈讨论” 也是学习啊。

虽然 Turbolinks 很好用(至少我是这么认为的),但 Turbolinks 的方向错了,未来都是前端 MVC 的天下了,连 Routing 都在前端实现,Js 和 CSS 都只加载一次,有 Asset Pipline 就够了。

#12 楼 @xhj6 无意在这里讨论什么技术细节,各种方面的评论网上到处都是。我说的是那种不断追求和进取的精神和态度(尽管也有可能是错的,谁能保证永远是对的?)哪一种技术没有被喷过?它们之中有死的,也有活的,但无论如何人们记住的是什么?是喷?还是……?

无论怎么喷,DHH 已经成就了自己,虽然不代表他永远不会犯错,但更不能证明只要喷他(以及他代表那种进取和追求的精神)就能让自己更高明。讨论技术细节怎么说不可以,一定要用某些词才能证明自己的分量不成?

据说艾迪生在确定灯丝的材料之前尝试了上千次?如果在当今这个信息发达的时代,那他岂不是也需要被喷一千次?

我们应该追求被别人 “喷”,而不是去 “喷” 别人,因为在旁人眼里,二者高下立见。

#10 楼 @as181920 其实这问题挺简单的,turbolink 是否干扰你开发了?你是否真的特别赶时间?这俩问题回答了,就知道用不用了。

在我看来,Turbolinks 是一个阶段性的折中方案,或许 DHH 的力推让人觉得他似乎是把 “未来的赌注” 全压在这上面了——也许——我个人不相信他会这么短视。

Turbolinks 想要在目前这个阶段利用 server-side 的能力来弥补 pjax 在应对跨浏览器兼容性问题上的困境——这不是 pjax 的错误,也并非是想要取 pjax 而代之。因为 pjax 是 client-side 技术,这两者之间原本就没有一较高下的必要。

鉴于使用 Rails 的开发者数量庞大,而他们之中能够轻松掌控前端的数量却又不多——要知道,Javascript 有大部分的工作都用在和浏览器斗争上了——所以 Turbolinks 对于大多数开发者来说是一个代价相对较低的过渡方案。

然而使用 Turbolinks 的确会有一些 gotcha 需要开发者去注意,这也是 Rails 历来的传统和理念:注意一些 “约定”。约定未必会成为标准,但却是向标准前进的一步努力,这种过程也是开发届的习俗。比如说 web 标准历经 “磨难” 的过程,最常见的像 vendor prefix,不也一样被开发者们一边用一边骂?但事实却是,不这么做就不能取得进展。很多东西你指望一步到位,那是一种理想,而不是现实。

如果 pjax 已经足够健壮了,DHH 吃饱了撑的非要给自己找不痛快?事实上,作为一个后端的开发框架,Rails 算是最关注前端,对前端最友好的一个了吧?也许它的一些决定并不能讨好所有的人,但是它让关注前端的后端工程师越来越多,帮助这些后端工程师更少障碍的了解和掌握前端技术的努力却远远要比” 讨好所有人 “更有价值的多!

世人的浅见啊,少一些浮躁,多一些探索,该多好?不禁想起前日看的小说了一句话:“众口悠悠之中,江郎或有才尽之时;不过在嘲笑于他之前,众生之中又有多少 ‘江郎’ 横空出世?”

Turbolinks 当然不算完美,但说它是 “屎” 也未免太自大了,就算它是 “屎” 那它也是培育技术和思想进步的 “肥料”,总要比随地乱喷的那种有价值的多。

最后,喜欢关注细节的,不妨看看 Yehuda 的一篇积极中肯的评论吧:https://plus.google.com/106300407679257154689/posts/A65agXRynUn

#18 楼 @nightire #19 楼 @xhj6

你们两个的这种讨论方式,我只能默默的按,都是素质极高的人啊!

#12 楼 @xhj6 我不想推荐别人用或不用 Turbolinks,不过我要指出你理解有误,Omakase Stack 中局部更新或者其他写操作用的是 UJS。

Turbolinks 就是个链接加速器,什么是链接?例如第一页到第二页,列表页到详细页。很多人都把它当作万能的,拿它和 jQuery 比,拿它和 Angularjs 比,然后说它怎么没有解决所有问题。那是当然的,Turbolinks 不会解决所有问题,它只是个加速器。第三方库的问题,说得好像前端 MVC 就没有 DOM Ready 问题一样,任何单页应用都有这个问题。

Assets Pipeline + Turbolinks + UJS 是 Omakase Stack 的一种方案,当然可以选择另一些前端方案,而只让 Rails 提供 API,或者干脆不用 Rails,这都是解决问题的不同方案,每个人有选择的权利。我依然不认同因为不喜欢一个方案就要喷,并且在那个字后面接着 @ 我的 id,我不知道你是不是故意让我不舒服的,我不想再展开。

讨论到这儿我想就没有必要继续了,我想给楼上的建议是,试着学会包容不愉快的东西能让你的心情更加愉快,另外,不要把任何东西神圣化。

绝大多数开发者,并不会把什么 Omakase 或 Prime 技术栈当成法律,也不可能认为哪个东西就是万能的,这样只会狭隘你的思维。我想讨论的是,这个东西所要解决的需求是什么?这个需求需不需要解决?它付出的代价是合理的吗?但一直没有得到正面回应。

另外,请不要以自己的思维方式来理解别人,尊重每一个人的不同。Rails 中,有好用的部分,也有不好用的部分,选不选择与喜不喜欢是两回事,喜不喜欢与评不评价也是两回事,选择、好恶、评价等等都是权利,都值得尊重,为什么要我三选一,二选一?

Anyway, take it easy, thanks.

#22 楼 @xhj6

这个东西所要解决的需求是什么?这个需求需不需要解决?它付出的代价是合理的吗?

我还以为你自己能提炼出来。这里再总结一次,解决静态文件重复解析的问题;取决于项目需求;取决于自己判断,对于那些 js 写得乱七八糟的项目,付出的代价非常巨大。我已经用上了,觉得挺有意思,如果有人对这个东西有技术上的疑问,那么我会分享我的经验。接下来我会试试另一个思路,试着用前端框架,为什么会觉得我把东西神圣化?

我让你包容些,不要喷,你要我包容你喷。

呵呵。

#23 楼 @Rei

实际上我年龄比大很多,这么说吧,小孩子会顽皮,大人会呵斥,老人会呵呵——我叫你要包容我喷,充分说明我已经老了。

解决静态文件重复解析的问题,是的,我前文也是说的这个意思,只是用词更通俗一些,我也还很啰嗦的表达了我的疑问:静态文件需不需要被适当地多次解析?

如果适当的多次解析是必要的,Turbolinks 就是在解决一个虚假的问题。而正如 Turbolinks 名称暗示的,你所说的链接加速这个效果,Chrome 等浏览器的预加载功能已经在消灭这个需求了,从这点来看 Turbolinks 也似乎是在解决一个即将消失的问题。

我觉得你把技术神圣化的理解来源于你说 Omakase Stack 是如何做的,这让我觉得你有点死板,不管是 Turbolinks 或是 pjax,它们都离不开 UJS,UJS 有被讨论的必要吗?

最后总结陈词:我纯个人意见认为 Turbolinks 不值得深究,非要我选择,我宁愿选择 pjax。但是,更可能的是:屎味巧克力,和巧克力味的屎,我会吃哪一个呢?我两个都不吃不可以么,就像你说的,下一个项目,我也会就尝试纯前端方案,也许那才是未来正确的方向,对不对?

别吵了,Omakase 永远是对的

唉……扯到年龄就没意思了。

Assets Pipeline + Turbolinks + UJS 是 Omakase Stack 的一种方案,当然可以选择另一些前端方案,而只让 Rails 提供 API,或者干脆不用 Rails,这都是解决问题的不同方案,每个人有选择的权利。

我没说 Omakase 永远是对的,给人带高帽的讨论真是非常不愉快。我尝试理解 Omakase 的方案,理解它的好处和坏处,并且解释为什么有的人用法不对。自己看好的技术一定要大卖,自己不看好的技术一定要大暴死?我可没有这么偏激的看法,积累不同的经验,有助于我写出更好的程序。

如果有技术性问题可以再讨论,我要说的都差不多了。

不明觉厉!!👋

帖子不错,有意思

#19 楼 @xhj6 因为我一开始说的就是态度,是你在回避态度的问题。从头到尾看下来,我从未说过 Turbolinks 不能批评,我说的是什么有点文化的人都能明白。

你强调 Turbolinks 不能解决你的需求,付出的代价让你觉得不值得。那么我认为对你而言可能是合理的,然而你的需求能代表所有人的需求吗?Rails 每前进一步都只是为了解决你,或者以你为代表的一群人的需求吗?

看起来你也应该是比较了解前端的人了,推此及彼,请问 verdor prefix 这样的东西解决了怎样的问题?满足了怎样的需求?付出了怎样的代价?

如果把 pjax 看做是像 web 标准这样的一个目标,Turbolinks 就好比是 verdor prefix 这样的过渡方案,它完美吗?绝不!它能解决问题吗?可以!它有代价吗?不小!它能满足需求吗?It depends。

它是屎吗?

$ -> 这样的语法 Turbolinks 不让你用?你是认真的吗?你确定?

在现实中我也只会考虑给态度 ok 的人 “涨工资”,讨论技术细节也一定会在态度 ok 的前提和环境下进行,否则我宁可把人拽出去吃个饭谈谈心先。

有这样四种人:

  1. 有德有才——绝对加钱涨工资,不用你开口要;
  2. 有德无才——留下没有坏处,涨不涨工资看进步;
  3. 无德无才——淘汰,没说的;
  4. 无德有才——这是最可怕的,有多远离多远;

还好,这是网络。

#29 楼 @nightire 你把我问糊涂了,加了 turbolinks 之后,究竟可不可以用 $ -> 呢?

我升级 Rails 4 的第一坑就是这个了,当时简单的搜索了一下,发现有三个选择:

  • 删除 turbolinks
  • $(document).on 'page:load' ->
  • gem 'jquery-turbolinks'

当时花了两个小时试了试后两个选择,都是坑坑不止,唯有 dd 一下最爽,半秒钟解决所有问题,世界一下就清静了……

当然,我两个小时的理解肯定是非常肤浅的,你问我确不确定,我真的不确定,你知道什么说出来嘛,我希望从你的帖子中获得营养,真的。

至于说态度,你太认真了,我再说一遍,不要以自己的思维方式来理解别人。对于技术问题而言,态度是最扯淡的东西,我说它不好有我的理解和理由,理解不一定正确,理由不一定站得住脚,你如果心情好,出来指点一下我理解上的偏差,我会非常感谢你;如果你心情不好,淡定,当个笑话得了。

总之,有个东西有人喷,然后又有人不准喷,在喷的人和不准喷的人有什么区别呢?我认为理想的方式是,各自谈各自的感受和理解,言之有物,言之有据,思想有冲突才有进步,一味和谐有什么意思呢?

还有,不要对 太敏感了,好吧,如果你一定不许我用屎来形容 Turbolinks,我还有一词能非常贴切的形容我当时的感受:fuck me!

#16 楼 @fenprace 前端 MVC 如何解决搜索引擎不友好的问题呢?如果是偏内容的应用前端 MVC 并不太适合

#31 楼 @xieyu33333 sitemap、根据 User-agent 前后分治,针对 Spider 提供一套纯 html。

去年就在生产上用 turbolink 的人表示这东西很好。对于既有大型代码库来说提升前端体验最快的解决方案了。如果原来 JS 编码就规范的话(用 Coffee 就几乎完全没有成本),就几乎不会带来任何问题。

另外说道卡顿,你们知道元素变化的时候不加动画再快看起来都会卡顿吗?

说简单点: 就算是「屎」,那看你怎么用呢。

大家说的我怎么看不懂呢

38楼 已删除

应该叫 turbolinks,而不是 turbolink 吧-_-!!! 我没用这东西,主要是我对 js 不是太懂,不过当时@rei 推荐了的一些资料,我都很认真读过,也很有兴趣,虽然短时期都不会用上这个东西。 不管怎么样,我从这个贴子学到了不少。

40楼 已删除

这,难道是一坨 Shi, 引发的战争吗?

确实,从来楼上几位的讨论中,学到很多。原来 turbolinks 有这么多故事。。

楼主,不好意思,请问下能让你的头像不动吗。。。。。

最后发现,楼主消失了,在一边呵呵呵

Turbolinks 没做好,yes。因为这样喷翔?NO

@Rei @xhj6 @nightire 你们看下主贴嘛,其实楼主的问题是 “Turbolinks 在 Firefox 下卡死了”,而不是:“Turbolinks 对前端开发的利弊” 我觉得你们把楼主晾在一边,自己开了一贴,大家感受一下……

#45 楼 @kgen 我本来就想说一句:喷脏话不好。你们看看是谁跳出来大喊 “别不让人说话”,不就明白了吗?

读过并使用 pjax 的飘过, 组合使用 jquey.histroy 可以让 pjax 在 ie 的使用哦~

rails-api+ 纯前端的 MVC 框架不好么?google, baidu 很多产品就是这样的思路(api+ 前端 mvc)...我觉得还是挺不错的。这个组合应该是一个构建复杂,用户体验较好的 web 应用的很好的基础。

#49 楼 @mobiwolf Rails API + 纯前端 MVC 框架的问题可能在学习曲线。对于多数搞后端的开发者来说,JS 没有那么精通。

#50 楼 @kgen 恩,确实是这样。不同的团队情况不同,百度这边有 FE,RD 的区分,FE 负责做前端的工作,RD 负责做后端的工作。大家是基于 api 接口来分别各自推进。如果 FR+RD 都是一波人的话,肯定会加大学习曲线的。但是这个方向,我觉得是今后的一个主流的方向。node 的流行也是在逐渐的弥补这个问题。

#51 楼 @mobiwolf 对大公司来说,适合规模化的技术都是好技术,因为有的是人力资源。但是目前 Rails 多数还是小公司在用,即使国外也以小公司为主。

Node 如果发展好了,的确能让 JS 通吃前后端了。不过短期内,生态环境的成熟度还是不如 Rails 的。

#19 楼 @xhj6

再次谢谢 @nightire ,请你明确回应一下我要涨工资的要求,谢谢。

哈哈哈

反正我的立场是,一切用了很多 JS,目的却总是想让后端程序员不写 JS 的东西,都不是好东西。

假如我是 JS 大神,为毛我不用纯前端的解决方案?多干净!前后分离,界限分明。 假如我不是。。。我才不去找死呢!不作死就不会死。

Turbolinks 的主要优势就是不需要重新解析 JS 和 CSS。。。按@Rei博客上的向导,我的理解就是这样的。 如果上了 Turbolinks 网站就能立即 SPA,我觉得这纯属忽悠。以为 AJAX 加载页面就是 SPA 了?这搞错了。SPA 的目的不是为了看不到浏览器刷新,这个很早的 AJAX 就能实现了,也不是为了不需要重新解析 JS 和 CSS,这个 IFRAME 都能实现。SPA 其实强调的虽然是 Single Page,但基础是 A,Application。只需要看一下基于 MVVM,DOM Data Binding 的 JS 实现的应用,就会发现这种局部刷新远要比 Turbolinks 高效。Turbolinks 这样的也太原始了。

我这样下个定论:Turbolinks 只适合前端 JS 逻辑不复杂的应用,如果是很复杂的,干嘛不用 Angular.js 这样的?

但问题是,不复杂的应用,有那么大的必要为了 JS 和 CSS 无需再解释上 Turbolinks 么?我觉得这个功能应该留给未来的浏览器去优化吧,浏览器应该可以对网站内的 JS 和 CSS 编译缓存的。 喏: Chrome Compilation Cache https://code.google.com/p/v8/source/browse/branches/bleeding_edge/src/compilation-cache.h

http://stackoverflow.com/questions/1096907/do-browsers-parse-javascript-on-every-page-load

所以说,Turbolinks 是面向旧时代的工具,它不是面向未来的。 鸡肋鸡肋啊

PS: 帖子编辑时右下角的按钮竟然是删除!!!????要不是因为红色,我肯定习惯性以为这里是保存。不是一般按钮都在右下角的么?怎么跑到左下角去了?虽然我是左撇子,但我用鼠标还是右手啊!!

一个人的吐嘈, 三个人的战争

#54 楼 @jamchange "右下角的按钮竟然是删除" +1 相当相当不习惯。呼唤勤劳的小蜜蜂 @huacnlee

另外取消和保存挨太近了,如果 @huacnlee 装个按键统计,我保证 “取消” 几乎没有人按过。

另外多说两句,很多说表单设计者都会加个 “Reset” 按钮,当我填了好久最后按到这个按键的时候,心里很不是滋味,这些人心里怎么想的,用户要这个 Reset 做什么?

这个网站的 C 按钮就是个例子,不过还好,只是一个单词而已。 http://www.dict.cc/

#56 楼 @Peter 取消是用于返回的,我就经常点那个按钮

#57 楼 @huacnlee 谢谢你的回答,我自己做的网站上很多功能也是我自己觉得合理的,我也常用,但用户不买帐,呵呵。

不过还是建议把 “保存” 放在右边,因为鼠标位于电脑右半屏的机会比较多,“取消” 和 “删除” 放左边吧,比较不容易按到。

插句题外话,做点击广告的通常放在页面右边会比较多收入,因为用户鼠标经常在右边。

#57 楼 @huacnlee #58 楼 @Peter

如果是 github 风格,提交按钮在右边;如果是 gmail 风格,提交按钮在左边。我觉得两种都行,不过现在 ruby china 的提交回复和发布新帖的位置不统一,要统一一个。

取消和保存分在一组是不妥,应该跟删除一组。

另外发布新帖侧栏那个绿色发布新帖按钮可以去掉。

#59 楼 @Rei 回帖的框在左边在于那个框不高,放右边能适当减少页面高度。 发帖那个地方放右边那就很奇怪了。如果大家都介意的话,回帖那个放下面问题也不大。

取消放哪里都会奇怪了,或者干脆去掉吧,删除一定要和常用按钮分开,以免误点

Github 上面也并不是完全统一的,比如创建 Repo 页创建按钮实在左边,而创建 Gist 的创建按钮是在右边,而 Issue 发布评论的按钮是在右边

Redesign

发布按钮,新建的时候是 “发布”,修改的时候是 “保存”,新建的时候没有删除按钮。

忘了 @huacnlee

#62 楼 @Rei 发布按钮还可改得更宽一些,话说我也正在修改,其实提交回复放在右边确实会方便许多的

#63 楼 @huacnlee 我只在浏览器里面改个样子,以你那代码为准。

#63 楼 @huacnlee 提交回复放在右边确实会方便许多的 +1 按钮放右边是操作系统的习惯,所有的 “确认” 都是在右下角,包括 Linux。 另,编辑帖子好像不能用 Ctrl + Enter.

@Rei 虽然 Gmail 把按钮放左边,但不是很好的体验。用关键字 get old look of gmail back 搜一下就知道很多人抱怨现在这个新的设计。建议编辑帖子的 “保存” 和 新建帖子的 “发布” 按钮放在右边。本来我忍忍就过去了,我是发现 @jamchange 说到这个问题才在这 at 你们管理员的。

其实开个帖子让大家讨论一下就更能知道民意了。

不好用的東西算不算是屎?

算是吧。

#21 楼 @Rei 最近 2 周在用 Rails4 做公司内部的一个新项目。打算试试 Turbolinks 这些新特性。所以又翻了一遍论坛的老帖。还有你博客上面的那两篇文章。帮助真的很大。

我觉得你该把,自己写过的这段话,放在文章的开头

Turbolinks 就是个链接加速器,什么是链接?例如第一页到第二页,列表页到详细页。很多人都把它当作万能的,拿它和 jQuery 比,拿它和 Angularjs 比,然后说它怎么没有解决所有问题。那是当然的,Turbolinks 不会解决所有问题,它只是个加速器。

当我疑惑为啥我 post form 或者做 patch 动作时,整个页面被刷新了?而点链接的时候 turbolinks 就工作的很完美的时候。看看你这段,又想想这个单词 Turbolinks。我好像懂得了什么。。。

超级连接,它真的只是想解决链接的问题而已。上面喷它的人都在埋怨它不能解决超出它能力范围之外的问题。

我现在是迫不及待想使用 turbolink3 啊,看到之前的老贴觉得有些问题时间已经给了答案了

过了这么多年我看到了这个帖子,总结一下,喷的,喷的是使用麻烦没有解决什么实质问题,他也说不出来啥,反正删了就好使了,不删就不好使。反对喷的,说了一大堆好处,我觉得你们很没意思,人家说的是人家不会使,你们说那些也没什么用。对牛弹琴而已。

huacnlee 精华贴功能上线 中提及了此贴 04月03日 10:57
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册