网页网站您现在的位置是:首页 > 博客日志 > 网页网站

简书自动保存功能的实现原理分析

<a href='mailto:'>微wx笑</a>的头像微wx笑 2022-06-14网页网站 2 0关键字: 简书  自动保存  

简书自动保存功能的实现原理分析写文章的页面,打开开发者工具,编辑文章,会看到每次修改文章内容时,基本上不到一秒不操作,如果文章内容发生了修改,就会执行一次put请求Request URL

简书自动保存功能的实现原理分析d6C无知


d6C无知

写文章的页面,打开开发者工具,编辑文章,会看到每次修改文章内容时,基本上不到一秒不操作,如果文章内容发生了修改,就会执行一次put请求
d6C无知

  1. Request URL:

    d6C无知

    https://www.jianshu.com/author/notes/93806368
  2. Request Method:

    d6C无知

    PUT
  3. Status Code:

    d6C无知

    200 OK
  4. Remote Address:

    d6C无知

    47.92.108.93:443
  5. Referrer Policy:

    d6C无知

    strict-origin-when-cross-origin


d6C无知

请求发送的数据包括:
d6C无知

  1. autosave_control30 猜测是版本号,这个版本号是每次修改后在客户端加1提交到服务器的d6C无知

  2. content"文章内容"d6C无知

  3. id"93806368" 编号d6C无知

  4. title"文章标题"d6C无知


d6C无知

虽然是有版本,但是每次修改并不是差异性提交,而是把所有文章内容都提交到了服务器。d6C无知

那他们的服务器上是怎么存储数据的呢?d6C无知

每个版本都是保存的完整的数据吗?如果是这样的话,那要多占用多少数据库存储空间啊!d6C无知

如果不是,那是怎么实现的呢?内容提交到服务器之后再做对比,再进行处理吗?d6C无知


d6C无知

每次修改都提交完整的内容,这对带宽也是很大的浪费啊。d6C无知


d6C无知

创建文章时一共有四个请求d6C无知

image.pngd6C无知

  1. 请求发送的数据d6C无知

  2. at_bottomfalsed6C无知

  3. notebook_id"28176372" 文集编号d6C无知

  4. title"2022-06-14" 文章标题d6C无知

  响应内容
d6C无知

  1. autosave_control0d6C无知

  2. content_updated_at1655185786d6C无知

  3. id102808414d6C无知

  4. last_compiled_at0d6C无知

  5. note_type1d6C无知

  6. notebook_id28176372d6C无知

  7. seq_in_nb-1d6C无知

  8. sharedfalsed6C无知

  9. slug"dea537969394"d6C无知

  10. title"2022-06-14"d6C无知


d6C无知

很奇怪为什么新建的文章内容肯定是空的,却要执行一次获取文章内容的请求d6C无知

  1. Request URL:

    d6C无知

    https://www.jianshu.com/author/notes/102808414/content
  2. Request Method:

    d6C无知

    GET


d6C无知

2022-06-28更新d6C无知

2369f6e280cccc7c0bac9449f60ffd8.pngd6C无知

发现每次修改排序的时候,都是提交整个ID列表,后台是怎么实现的呢?d6C无知

猜测可能是把ID都存储在一个字段里了,d6C无知

大公司,应该会做这方面的架构,有可能ID顺序给每个人建个缓存d6C无知

每次取数据,先从缓存取出ID,然后按ID从库中取d6C无知

按主键ID从库中取,是性能最佳的d6C无知

select * from table where id in (idstr)d6C无知

select in() 的方式会不会影响效率呢?d6C无知

in传递的值有索引的话效率应该是很高的,还有什么方式比直接通过索引查询快呢?d6C无知

当然,传递的值比较大,其内部实现也是要循环的。d6C无知

这可以通过分页来控制。d6C无知

另外,参考“探讨select in 在postgresql的效率问题”,只有在in内数据到了10,000个的时候执行时间会有比较大的变化,但也不过是在300多ms内完成。d6C无知


d6C无知


d6C无知

本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/web/2022-06-14/1239.html

很赞哦! () 有话说 ()