Comments (8)
也就是说,需要在回复加载完毕后,从子组件向父组件传值,触发父组件重新加载?
from pkuholecommunity.
实现起来的确有点麻烦。。我觉得尽量不要先渲染,因为费时间
from pkuholecommunity.
我觉得尽量不要先渲染
指的是尽量不要先渲染关注列表?还是回复?
from pkuholecommunity.
等等,渲染的时间和网络 IO 时间相比应该还是网络时间长吧(上面好像讲错了)
还是感觉渲染的时间要长,不使用 LazyLoad,对 2500 条回复逆序重新渲染耗时约 10 秒,使用 LazyLoad 耗时约 2~3 秒。刷新回复耗时约 4 秒(刷新耗时里包括多少渲染时间还两说)。
主要还是时间问题。而且 cache 在获得回复之前就知道是否需要更新,有没有可能操作一波。。(比如 问题是知道要更新并不是知道排第几啊。。StaleWhileRevalidate
的感觉?先返回是否过期,再异步更新?)
from pkuholecommunity.
思考了一下这个功能的实现……
目前时间线相关组件的层次结构:
Flow - FlowChunk - Context.Consumer - LazyLoad - FlowItemRow - FlowItem / Reply
洞的数据在 Flow 中获取,向右一层层传 prop,一直传到 FlowItemRow,也就是包含洞和全部回复的组件,在这一层才获取回复数据,并且计算最后回复时间,存储在 FlowItemRow 的 state 中。
如果不改变上述流程:
要想让 Flow 层拿到最后回复时间,可能的解决方案:
- 一层层回调(太可怕了)
- 用一个外部的 store 做简单的状态管理
另外,各个洞最后回复时间的计算也不是同步的。还需要确认所有的最后回复时间都已经计算完毕,才能考虑重新排序的问题。
假设 Flow 层能拿到最后回复时间,由于是要按最后回复时间排序,因此需要对洞的数组重新排序,改变 Flow 的 state,组件重新渲染。回复数据如果重新再获取一次,浪费了性能,因此之前回传的数据也应当包括所有的回复。但这样两次渲染(获取回复的渲染和重排的渲染)数据源完全不一样,整个组件的逻辑就有些混乱了。
如果改变上述流程,把加载回复挪到 Flow 中进行(也就是从异步获取回复变成同步获取),如果是从缓存中读取速度尚可,如果需要从服务器更新回复(尤其是现在存在神洞级别的置顶洞,第一个洞常常需要从服务器中获取更新),那么渲染过程可能会慢到难以忍受……
from pkuholecommunity.
前端实现这一功能,感觉难度较大。
T大树洞提出的后端解决方案似乎更加简便易行:
[后端]增加一个column叫last_reply_timestamp即可
但根据官方鼓励树洞沉下去的原则,官方维护的后端可能不会增加这一功能。
from pkuholecommunity.
个人认为,关注列表分组更为可行,而且可能优于按最后回复时间排序的方式,参见 #35 。
from pkuholecommunity.
但根据官方鼓励树洞沉下去的原则,官方维护的后端可能不会增加这一功能。
虽然但是,这会耽误事啊
(虽然工作量,但是)我的想法是,数据放到 Flow 中,返回一个 load_replies_with_cache
的 Promise
(如果频率过高,可能还要依次加 setimeout)。每个 FlowItem 在 Promise resolve 之后更新状态,Flow 则在所有都 resolve 后顶部显示按钮重新排序 。
此外,改变 cache 清洗方案,不去除关注的树洞。
还可加个功能是否开启的设置,默认关闭。并说明该功能适用于关注神洞较少的同学。
我觉得分组虽然可行,但是用处有限。仍然有关注的树洞有了回复却没发现。
from pkuholecommunity.
Related Issues (20)
- bug: 在 sidebar 的 box 中出现了多余的文本元素 HOT 2
- 超过 36 小时就是 2 天了 HOT 3
- 路线规划(草稿) HOT 7
- 更换图标解决方案 HOT 7
- v0.2.5 Release (Plan) HOT 1
- 上方的“树洞”按钮会跳回原版树洞 HOT 2
- 解决 beta 版本和 stable 版本之间的冲突 HOT 6
- 关注列表分组 HOT 2
- 发布树洞后不能滚动
- 【Feature Request】兼容T大树洞,或者兼容双token登录 HOT 5
- 图标和背景图加载不出 HOT 3
- 关于个人隐私的保护问题 HOT 3
- 安卓手机版Firefox不能选择图片 HOT 7
- RCE 漏洞 HOT 4
- 想问一下北大是官方支持树洞的运营嘛 HOT 3
- 有没有考虑对删除洞进行自动备份+页面显示 HOT 3
- 登录后显示:TypeError: Cannot read property 'length' of undefined HOT 3
- 后端错误返回,无法显示帖子:Cannot read property of undefined HOT 11
- 树洞更新 HOT 10
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pkuholecommunity.