获得徽章 5
- gorse: 一个使用 Go 语言实现的、基于协同过滤算法的推荐系统后端
- 网站:gorse.io
- GitHub:github.com
- 简介: 厚脸皮地推广一下自己做的玩具,实现了一些经典的协同过滤推荐模型,为每个用户离线生成一些个性化推荐物品列表,可以用它构建一个提供RESTful API的推荐系统微服务。项目也提供了模型测试工具、数据导入工具,能够快速创建一个简陋的推荐系统。性能和同类库比较还行,但是显然它只适用于小数据场景。
展开评论41 - resilience:是一个广告拦截起,用 Golang 编写,支持 Windows、Linux 、macOS评论7
- 用 Python 写爬虫写腻了?那就看看这个 Golang 写的爬虫框架 —— Pholcus。纯 Go 语言编写的高并发、分布式、重量级爬虫软件,支持单机、服务端、客户端三种运行模式,拥有 Web、GUI、命令行三种操作界面(一口气说完很考验肺活量
)。项目地址:
github.com
「更多开源项目推荐,可以关注 HelloGitHub 」-hellogithub.com
展开评论52 - 之前发布了一条沸点,想跟社区一起翻译一下这本书,转眼几个月过去啦,这本书翻译了95%,翻译进行的差不多了
,还有些比较难翻译的点比如 Golang 垃圾回收,还没人翻译(之前有人翻译过,但是翻的不好),还望大家多多阅读,翻译不当的地方可开 issue 讨论,有对垃圾回收这块知识熟悉的,可参与帮忙翻译,感恩!
地址:github.com
作者:hantmac
链接:hacpai.com
来源:黑客派
协议:CC BY-SA 4.0creativecommons.org
展开1243 - 在群里看到有人提到React fiber,写一点个人的看法。
Fiber这个东西很有意思,我觉得它不是一蹴而就的,引出它的可能是性能问题,然后在这个思路上走下去发现了更多有意思的东西。
组件树是一个可能会很大很深的树,一次性的渲染通常需要递归地遍历整个树,这样在树很深的时候可能会导致栈溢出错误,而且整个渲染过程可能很长,导致掉帧。
解决的办法很简单,如果递归过程中可以随时退出并保存上下文,就像多线程切换时会保留栈那样,那么就可以分多次的遍历完整个树。
实现方式就是把在遍历过程中原本在栈上的数据保存成数据结构,比如当前遍历节点,它的children列表,上一级节点等,这个数据结构就是fiber。于是原本的遍历渲染变成了,遍历建立fiber树,然后分多次的遍历fiber树进行渲染。不过fiber实际上组成的不是一个树而是图,react把子节点实现成了链表,通过fiber的sibling连接起来,这样会有更好的遍历性能。
于是就会发现,原本的线性的栈现在变成了一个结构化的图,后者除了不会有栈溢出和可以部分遍历之外,还有一些有意思的区别。首先,栈是对计算机友好的线性结构,但是不容易调试,它随遍历过程递进又随之回退,我们几乎只能借助调试器来观察现场。而fiber是一个持久的结构,任何时候我们可以直接观察它整个的状态。其次,它使react的代码更加简明了,它将遍历和逻辑解偶了,不管是渲染还是什么只要对待一个fiber节点处理就好了。
这些区别产生的结果就是解放了想象力,一旦走到这里这个框架就形成了,react可以在fiber上加入更多功能而不必局限于最初对栈的模拟的初衷。比如用alternate(也是个fiber节点)保存最新的渲染结果,这样就可以异步地渐进式地更新整个UI,于是有了Time Slicing和Suspence。更进一步的,在fiber上保存和读取副作用,于是就有了hooks,函数组件一跃成为更好用的存在,函数线性的语法结构不仅让代码变短了,也更容易重构了。
这些想象力的产物又增加了生产力,比如有了React.lazy实现loading效果变得非常简单,那么设计师就可以设计更加用户友好的UI。Web之所以在用户界面上超越了native应用就是因为这方面生产效率高,所以越来越多的electron应用出现。我认为React的不断创新可能也会悄悄的改变UI的形态,而fiber的出现是一个重要的拐点。展开评论28