@qgy18 贵站怎么做的优化啊,速度快到哭

2016-01-30 00:33:24 +08:00
 xiaodaigou

https://imququ.com/
求贵站优化方案,快到哭!!!
@qgy18
@qgy18
@qgy18

5692 次点击
所在节点    前端开发
30 条回复
qgy18
2016-01-30 11:40:51 +08:00
@Troevil 不需要,第一次服务端输出:
<style id="all_css">...</style><script>L.h2l("all_css","all_css")</script>

第二次服务端输出:
<script>L.l2h("all_css:2")</script>

也就是第一次就是正常的资源内联,顺带存到 localStorage 里;第二次才是走本地读取。
aivier
2016-01-30 12:07:46 +08:00
@qgy18 我的站放在国外,最大的问题是容易遇到 TTFB 突然增加到几秒的问题,因为服务器不是我的,我也不知道为什么,目前只能靠一些障眼法让访客看起来加载的很快了,下一个主题打算试试预加载
loading
2016-01-30 12:15:44 +08:00
方法很赞。

等我学好 golang 再考虑吧, python 的效率如果用这种做法,估计只会变慢…
Troevil
2016-01-30 12:18:21 +08:00
@qgy18 那如果我第一次刷新了 手动清掉 localstorage 的缓存,那再刷新下,
但服务器判断出不是第一次会返回
<script>L.l2h("all_css:2")</script>
不就不会从输出
<style id="all_css">...</style><script>L.h2l("all_css","all_css")</script>
吗?
然后就进行 reload,我看到 你现在是这么处理的吧 这不就 reload 了一次吗

流程是这样吧
第一次: 读取完整页面 , 存 localStorage--> 操作: 手动清理 localStorage
第二次: 读无 js,css 的页面,从 localStorage 拿数据 --> 发现没有然后 reload
第三次: 读取完整页面,存 localStorage
qgy18
2016-01-30 12:32:43 +08:00
@Troevil 非常正确!
如果 cookie 标记被清了,服务端无法知道本地 localStorage 里还有缓存,就会输出全量。

但是!如果 cookie 标记还在,但是 localStorage 被清除了,服务端就不知道该输出全量了,只能依靠 JS ,在读不到本地 localStorage 时清掉本地 cookie 标记再刷新。

针对这个问题我们之前做过一些策略,例如发现出现这种情况,就额外存一个 Cookie 标记,针对有这个标记的用户一段时间内只输出全量。后面做了一个统计,发现几乎没有这种情况发生。
qgy18
2016-01-30 12:41:08 +08:00
@Troevil 另外,如果这个 cookie 标记被无意设置为 HTTP Only ,那么 JS 就清不掉它了。然后刷新后服务端还是会认为本地有 localStorage 缓存,就会无限刷新。这个问题正常使用中肯定不会出现,但是我们评估 localStorage 方案时考虑过。

我刚录了一个 gif 演示如何玩坏百度的 localStorage 方案(纯属无聊,这种问题各家都不会处理):

qgy18
2016-01-30 12:42:13 +08:00
@qgy18 貌似图片地址多打了一个 v ,更新下:

Troevil
2016-01-30 12:44:06 +08:00
@qgy18 😂 玩坏了.. 我就是理解一下,才手动设置下 一些变量看看的,正常用户不会无聊到取清理这个的.
chemzqm
2016-01-30 22:06:50 +08:00
@qgy18
1. 我的说法不太准确,不过清了 localstorage 以后可以看到页面刷新了两次
2. 几年前在移动端试过 localstroage 缓存文件,只是发现某些设备 localstroage 无法保证正确读取就放弃了
3. 为了省流量,你们也是蛮拼的
qgy18
2016-01-31 01:44:06 +08:00
@chemzqm
1 、对! localStorage 丢失但 cookie 健在时,确实要刷两次。极端情况下还会无限刷新,前面拿百度家的页面玩了下。但是正常情况下 localStorage 基本都是跟 cookie 一起被清除,实际统计结果也确实如此;
2 、移动端确实很多奇葩情况,很多 Android APP 内置 Webview 甚至都不会开启 localStorage 功能,没有 setDomStorageEnabled(true)。我们现在的缓存率大概在 70% 左右,收益还是不错的;
3 、其实真不是为了省流量,如果要省流量用外链就好了,后续访问有协商缓存 / 强缓存也不费流量。内联 + localStorage 主要还是为了省连接数,顺带节省流量。移动网络现在带宽上来了,但是时延还是很大,多一个新的外链光 DNS / TCP 就得好几百毫秒;

另外,目前在移动端 HTTP/2 的研究中我遇到以下问题:
1 、支持度不高。不过这不是什么大问题,移动端更新换代很快;
2 、浏览器中, HTTP/2 必须基于 HTTPS 部署,而移动端 HTTPS 的连通性更差。前不久做的实验,在一个 HTTP 页面加载同域 HTTPS 图片,对比加载 HTTP 图片,不可用率高了 3%;
3 、 HTTP/2 的单一连接数多路复用,要求同域,或者不同域但同 IP 、同证书。这一点实际部署起来很麻烦,尤其是在有 CDN 的情况下;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/254371

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX