Tencent / VasSonic

VasSonic is a lightweight and high-performance Hybrid framework developed by tencent VAS team, which is intended to speed up the first screen of websites working on Android and iOS platform.
Other
11.81k stars 1.61k forks source link

把android demo中的地址改为别的地址,加载速度没有变快 #239

Closed whytry-GAR closed 6 years ago

whytry-GAR commented 6 years ago

What steps will reproduce the problem? 该问题的重现步骤是什么? 前置条件:修改demo打开local server模式

  1. 下载android demo并运行,尝试分别加载demo中的url:http://mc.vip.qq.com/demo/indexv3,速度区别很大。加载时间分别1300ms左右(普通)和500ms左右(snoic二次打开或者预加载后
  2. 通过demo中的按钮添加自己的url并分别尝试两种方式加载(操作同上,且先清清除了缓存,二次加载或者预加载),基本速度没有区别(400~500ms左右)
  3. 通过拦截demo中的url加载自己的页面(加载内容为demo中页面修改部分文字和添加一张图片,按照页面原本的格式添加 diff data2 的内容)速度区别不大,均在(400~500ms左右)

What is the expected output? What do you see instead? 你期待的结果是什么?实际看到的又是什么? 期望是打开自己的url页面速度有明显改善,但结果并没较大差异

What version of the product are you using? On what operating system? 你正在使用产品的哪个版本?在什么操作系统上? 使用vassnoic 3.0,手机是小米6 。miui8.2 。android 7.1.1

Please provide any additional information below. 如果有的话,请在下面提供更多信息。 image image

Vassnoic在2.0中添加了local server模式,是代表动态缓存和增量更新依赖于可以不依赖后台,而是客户端和web前端配合实现对吗?

为什么这边参照设置了local server模式,在加载非demo中的网页,速度上仍然没有显著提升呢?

Vassnoic加载android demo中的url和普通加载速度上有很大区别。但自己的项目中url则表现与普通加载速度一般

另外这边参照demo修改了部分图片和文字的代码(加载js资源和方法部分不改),二次加载时snoic和普通加载速度也没有明显区别。但demo中url即便是二次加载,速度区别也很大,请问为什么呢?

期待您的回答,谢谢

marlonlu commented 6 years ago

1 demo打开我们url前后两次速度差异主要在于本地是否有缓存,如果有缓存,先加载本地,然后局部刷新 2 使用自己url,这里要分几种情况, 2.1如果你的url没有直出(css 、js等资源没有打入页面内),本地只是缓存了基本框架,还要网络时间去拉取子资源,所以速度没法体现 2.2 如果你的页面很简单,没有css js等外链资源,那么这里跟wifi下速度没有明显差异,但是如果在弱网络下,sonic体验会更优,速度曲线更平稳 3 你拦截url替换里面内容,本地已经有缓存,这时候都是局部刷新,所以会很快

所以,你的问题 为什么这边参照设置了local server模式,在加载非demo中的网页,速度上仍然没有显著提升呢? 参考上面第二个回答

二次加载时snoic和普通加载速度也没有明显区别。但demo中url即便是二次加载,速度区别也很大,请问为什么呢? 参考上述第二个跟第三个回答

whytry-GAR commented 6 years ago

抱歉,还是有点疑问:

加载原本demo中的url,调用snoic加载时,按您上面的说法,demo url应该是有缓存的且有直出的(css 、js等资源打入页面内),所以速度上能体现明显差异。snoic明显很快。 而普通加载时,虽然有直出(因为是同一个页面,也是有直出的对吗),但是没有缓存,且不具备局部刷新的逻辑,所以明显慢于snoic。 image 这里有个问题:为什么普通加载时没有缓存?是哪里做了限制吗?除了snoic的缓存,web内核应该也有缓存吧?后续实验貌似表明应该有web缓存?

实验测试: (1)这边拦截demo 的url,返回内容不做修改(返回的仍是原本url页面的内容,按文档理解,拦截虽然会少传部分服务端要传的header,但会由local server 补上,不影响局部刷新的功能),加载多次,速度上一直有明显差异。(普通稳定 1000+ms snoic 稳定100ms左右) (2)拦截test url(www.test.com),内容的返回是demo url中页面中的内容,加载多次速度上均没有明显差异(普通和 snoic都 稳定100ms左右) (3)在url内容中添加别的内容(这里主要是加图片和文字) image 拦截demo中url(http://mc.vip.qq.com/demo/indexv3)返回,速度差异明显(普通稳定 1000+ms snoic 稳定100ms左右) 拦截test url返回该内容,速度无明显差异(普通和 snoic都 稳定100ms左右)

对比测试(1)和测试(2): (2)因为都有缓存所以普通加载和snoic加载都很快吗(100ms左右)? 为什么(1)中普通加载没有缓存,(2)中普通加载却有呢?

对比(1)(2)(3): 这里是是表示只对demo中的url (http://mc.vip.qq.com/demo/indexv3)不设缓存吗 修改内容后(只改了图片和文字,css js文件没改),这里已经没有直出了吗?

请解答疑问,万分感谢,期待Vassnoic更好

marlonlu commented 6 years ago

有个关键点你没有留意到: 1 普通加载时每次加载整个页面,而sonic demo是服务器计算返回局部数据块,这里局部刷新跟整个页面刷新速度就不一致 2 针对内核缓存,我们是主资源,是设置no-cache,所以排除了缓存

whytry-GAR commented 6 years ago

@marlonlu 但是这边都是拦截demo url来进行试验的。没有由服务端结算返回数据块(内容是直接返回整个页面),这边也开了local server模式。应该会由客户端计算并执行局部刷新吧? 这边拦截后 ,无论是demo url 还是自己的 test url(返回的内容相同)
都是Cache-Control: max-age=0

但是测试的结果(上一个回复)对比很奇怪,能解答下疑问吗?

image