Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

开启“网址AV号转换”后,切换视频分P时因刷新页面而存在性能问题 #1243

Closed
GalaxySnail opened this issue Nov 23, 2020 · 23 comments · Fixed by #1567
Closed
Labels
feature-request 功能请求 performance 性能问题

Comments

@GalaxySnail
Copy link

关于哪一项功能

网址AV号转换

问题描述

随便选择一个多P视频(例如av842759354),然后:

  • 关闭“网址AV号转换”(或不启用BE)的情况下,在右侧“视频选集”中点击分P进行切换,播放器会迅速切换到指定的视频,而不会刷新整个页面(例如评论区、右侧的相关推荐,都不会刷新)
  • 启用“网址AV号转换”的情况下,同样点击切换分P,由于切分P后地址会变成BV号,所以触发了自动AV号转换,引发了整个页面的刷新,包括评论区和右侧的相关推荐,因此导致切分P时明显比不开启“网址AV号转换”慢的现象

我的一个修复思路是,在开启“网址AV号转换”的时候,不知能否直接把右侧“视频选集”切换分P处指向的链接直接从BV号换成AV号,这样跳转后不会触发转换AV号的刷新页面,以避免这个严重的性能开销。

脚本版本

Stable v1.11.5, 内容包: df0a9d3

浏览器版本

Windows10 1909 64bit
Chromium 86.0.4240.198 64bit (从Wookyss下载的Installer版本)

错误信息

性能问题,无报错信息

附加截图

因为这个现象应该很容易复现,截图感觉也没啥用,就不截图了(

@the1812
Copy link
Owner

the1812 commented Nov 23, 2020

那推荐视频啥的是不是也是这个样子...
转换只有当前页面的av号能迅速转, 其他视频要靠API查询肯定不能提前改好链接

@the1812
Copy link
Owner

the1812 commented Nov 23, 2020

或许可以把av号链接放在附加功能那里供复制, 这样不改动网址就可以避开这个性能问题

@GalaxySnail
Copy link
Author

那推荐视频啥的是不是也是这个样子...
转换只有当前页面的av号能迅速转, 其他视频要靠API查询肯定不能提前改好链接

是的,而且因为推荐视频有额外参数,如果开启了“网址参数清理”也会造成刷新。不过毕竟推荐视频是切视频,有些内容本来就是需要刷新的,所以也不存在明显的额外开销,只是切分P会非常明显。

或许可以把av号链接放在附加功能那里供复制, 这样不改动网址就可以避开这个性能问题

嗯,我觉得确实是个办法。加一个一键复制av号链接的按钮就行了。

@the1812 the1812 added the feature-request 功能请求 label Nov 23, 2020
@GalaxySnail
Copy link
Author

我对js和ts没什么了解,想问一下关于“网址AV号转换”的代码是在 src/video/bvid-convert/bvid-convert.ts 是吗?

当时刚出bv号的时候知乎就有大佬破解了av号与bv号双向转换的算法:知乎 - mcfx的回答,可以无需网络请求根据bv号直接计算出av号。看上去上面的ts代码没有用到这个算法,我觉得可以考虑试试,直接计算不仅能计算任意视频的av号(包括已投稿但未通过审核的视频,此时视频已经分配了bv号但不能用api查询),而且也能免除网络请求本身造成的等待。

当时刚推出bv号的时候,我就在哔哩哔哩专栏找到了有人扒出来的api,我拿来写了个命令行转换脚本,但是就是略慢;在看到这个算法以后,我马上就把脚本改成直接计算了,方便快捷。

@the1812
Copy link
Owner

the1812 commented Nov 23, 2020

我对js和ts没什么了解,想问一下关于“网址AV号转换”的代码是在 src/video/bvid-convert/bvid-convert.ts 是吗?

这个是的

当时刚出bv号的时候知乎就有大佬破解了av号与bv号双向转换的算法

这个我当时也看过, 不过他说只保证av号一定范围内正确我就没拿来用

@GalaxySnail
Copy link
Author

那我觉得可以用它试试。这么大半年了我好像还没听说这个算法失效的例子。另外,我记得应该是只要打开了视频页面,avid和bvid都是已知的对吧,那可以在打开视频以后计算一遍,看计算结果和实际结果是否符合,如果真遇到不符合的情况可以弹个窗什么的提醒用户

@the1812
Copy link
Owner

the1812 commented Nov 23, 2020

我觉得需要的时候能复制到就行了, 没必要去检测计算页面上所有BV号(也挺耗性能), 所以还是移到附加功能里了

@the1812 the1812 added the performance 性能问题 label Nov 26, 2020
@the1812
Copy link
Owner

the1812 commented Nov 26, 2020

这么说来脚本提供的各种链接也该换成BV了

@GalaxySnail
Copy link
Author

你指的是哪些脚本呢?

@the1812
Copy link
Owner

the1812 commented Nov 26, 2020

本脚本啊 比如说自定义顶栏里点开的链接就都是av号的, 切P也会导致你说的性能问题

@the1812
Copy link
Owner

the1812 commented Nov 26, 2020

链接复制以后就移到这里了

@GalaxySnail
Copy link
Author

本脚本啊 比如说自定义顶栏里点开的链接就都是av号的, 切P也会导致你说的性能问题

我不是那个意思,像这种本身就打开一个新页面的,基本上不存在性能问题,因为页面上的东西本身是要花时间加载的。而只有视频切分P的时候,这个比较特殊,它本身是不需要刷新评论区和右侧推荐视频的,所以在这里刷新页面的延迟就不可忽略的。性能问题毕竟也是相对的,随便举个例子,1秒 + 0.5秒可能不太要紧,但是0.2秒 + 0.5秒就很致命了。

所以我的想法是,不知道能不能在第一次加载页面的时候把右侧切分P的那些链接直接改成av号,这样点击就不会触发刷新页面了。

链接复制以后就移到这里了

嗯,看上去挺好的

@Geeyun-JY3
Copy link

Geeyun-JY3 commented Nov 26, 2020

这么说来脚本提供的各种链接也该换成BV了

要是用户开了 网址 AV 号转换,这转不转换好像区别不大啊

@GalaxySnail
Copy link
Author

我的想法是大多数情况因为“网址转换”而刷新页面是不太要紧的,只有切分P的情况比较特殊,所以需要区别对待

@the1812
Copy link
Owner

the1812 commented Nov 26, 2020

我不是那个意思,像这种本身就打开一个新页面的,基本上不存在性能问题,因为页面上的东西本身是要花时间加载的。而只有视频切分P的时候,这个比较特殊,它本身是不需要刷新评论区和右侧推荐视频的,所以在这里刷新页面的延迟就不可忽略的。性能问题毕竟也是相对的,随便举个例子,1秒 + 0.5秒可能不太要紧,但是0.2秒 + 0.5秒就很致命了。

所以我的想法是,不知道能不能在第一次加载页面的时候把右侧切分P的那些链接直接改成av号,这样点击就不会触发刷新页面了。

就是说切P啊, 顶栏点过来是av号, 下一P是BV号, 只要把av号都换成BV号就能一劳永逸, BV换av不知道以后还会不会出问题

@GalaxySnail
Copy link
Author

就是说切P啊, 顶栏点过来是av号, 下一P是BV号, 只要把av号都换成BV号就能一劳永逸, BV换av不知道以后还会不会出问题

好吧,我基本不用顶栏功能所以不太清楚……不过我觉得bv换av的话逻辑上是足以保证不会出问题的

@Geeyun-JY3
Copy link

Geeyun-JY3 commented Dec 4, 2020

链接复制以后就移到这里了

这复制出来的链接最后会多了个 ?

@MC-dusk
Copy link

MC-dusk commented Dec 17, 2020

考虑关闭此功能并同时使用这个脚本?:https://greasyfork.org/zh-CN/scripts/398535-bv2av
(我以为“网址AV号转换”就是简单地正则匹配av串换成BV串)

@Geeyun-JY3
Copy link

Geeyun-JY3 commented Dec 17, 2020

考虑关闭此功能并同时使用这个脚本?:https://greasyfork.org/zh-CN/scripts/398535-bv2av

没用啊切 P 还是会刷新整个页面。

@MC-dusk
Copy link

MC-dusk commented Dec 17, 2020

考虑关闭此功能并同时使用这个脚本?:https://greasyfork.org/zh-CN/scripts/398535-bv2av

没用啊切 P 还是会刷新整个页面。

确实,单个稿件切p确实仍会重新加载页面,如果只是正则替换BV到av号应该不需要刷新页面?可能可以考虑优化“av号替换”的实现方式。

@Geeyun-JY3
Copy link

Geeyun-JY3 commented Dec 17, 2020

确实,单个稿件切p确实仍会重新加载页面,如果只是正则替换BV到av号应该不需要刷新页面?可能可以考虑优化“av号替换”的实现方式。

上面其实回应过你这个建议了:#1243 (comment)
#1243 (comment)

@MC-dusk
Copy link

MC-dusk commented Dec 19, 2020

考虑关闭此功能并同时使用这个脚本?:https://greasyfork.org/zh-CN/scripts/398535-bv2av

没用啊切 P 还是会刷新整个页面。

刚刚又试验,发现一些奇怪的问题:

  • 脚本“ https://greasyfork.org/zh-CN/scripts/398535-bv2av ”是依靠本地计算,所以可以把页面里的所有BV号替换为av号(包括分p和推荐视频),但点击之后还是会先进入BV再切换成av号(不知道为什么),这样页面仍会重新加载,没有提高性能。

  • 而本脚本是依靠b站api转换BV号,所以分p和推荐视频仍然是BV号,这样无论打开什么都会经历“本页面av号->目标BV号->目标av号”的过程。

  • https://github.com/MotooriKashin/Bilibili-Old ”这个可以在不重载页面的情况下切p,但是脚本似乎差别很大,不知道能不能在这里实现。

说到底,页面在什么情况下会重载我也没搞明白。

@Geeyun-JY3
Copy link

这个脚本 那问了问:https://greasyfork.org/scripts/398535/discussions/71301#comment-175962

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature-request 功能请求 performance 性能问题
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants