• Turbolinks 还有返回的页面过大,渲染过多消耗服务器 CPU 和传输带宽的问题。

    一些 render partial 可以用 custom element 代替,那样返回的内容就接近 json ajax 了,只是你用 HTML 格式化而已。

    不过 custom element 也有难用的地方……

  • 不过 Stimulus 还是有些比较难搞的问题,controller 其实并没有很好的 scope 控制。

    重交互的页面或者树形的节点,得把 controller 放在比较高的节点里,并且最好只出现一次。

  • 我甚至搞了个 stimulus-bind 去做绑定,然后就能类似 vue / react 的写 class,不用手动 add / remove class 了

    不过由于实现过于简陋,要触发更新得更新 root object。或许现在有更好的办法

  • 下面说一下 turbolinks 5 和 ujs 的一些坑,我们知道使用 turbolinks 之后,内部链接之间切换不会刷新页面,体验要比每次重新刷新页面好很多,但对于服务器端来说,整个页面还是要渲染一遍,相关的查询也要执行一遍,想有更好的体验也需要一些专门的 ajax 的请求,返回局部内容,比如分页和过滤场景。

    其实可以用 service worker 来处理一些 URL,然后就不会访问到服务器啦。具体例子在:

    https://github.com/turbolinks/turbolinks/issues/468

  • 地毯的正确维护方式,是整个换掉拿去专门的厂里清洗。低成本的维护方式是拿吸尘器吸,那就会变成细菌乐园。

  • text.gsub!(/\[quote\].*?\[uid.*?\](.*?)\[\/uid\].*?\[\/b\](.*?)\[\/quote\]/m){
      author = $1
      mid = $2.gsub("\n", "\n>")
      ">#{author} 说:\n>#{mid}\n"
    }
    
  • 我很久之前也尝试了下做一个 Windows 下的 Ruby GUI 框架,基本就是在 C-ext 里包装 Win32API ,然后展示一个比较简洁友好的(类似 Shoes / REBOL view)的编程环境。

    代码在 https://github.com/luikore/cici2 可以参考下,只是现在 Ruby / Windows API 已不同跑不起来了。

    有些坑分享一下:

    • Windows API 有 A 系列和 W 系列,和 UTF-8 编码的 Ruby 程序一起工作要经常转码比较麻烦。
    • 在 C 里调用 Ruby 代码,如果出现异常不捕获会 Segfault,需要了解清楚 C extension 的机制。
    • 得找机会给 Ruby GC,或者用独立线程跑 Ruby。
    • 两个世界文化很不妥贴,用 Visual Studio 编译 Ruby 可以 debug 进去。

    如果让我再来一遍的话,我会选择改造成两个进程:一个 Ruby 进程负责处理事件和返回 DOM tree,一个原生 GUI 进程负责转发事件给后面的 Ruby 进程。这样就可以避掉上面的一些坑并且可以统一处理好转码。GUI 进程用纯 C 的 Win32 API 搞,或者现在流行的什么 WPF 搞都可以了。

    参考书就是特别古老的 Programming Windows。

  • 有道理…… 那我也支持

    就差实现性能超过数组 sort 然后 bsearch 了

  • Ruby 标准库缺的数据结构多了去了,例如 list,double array,burst tree,radix tree,merkle-patricia tree,HAMT,HAT-tree …… 为何厚此薄彼?

    我明白红黑树是入门数据结构书讲的,但就一定比别的数据结构有用咩?

  • 事实上,当我们需要一棵特别大的平衡树的时候,我们就用数据库,例如 redis 的 zset

    显然也能做管理 timer 等用途……

    我觉得平衡树的应用场景被好多基础软件做了,以至于在 Ruby 中并没有什么发挥的空间了