Re: [问题] 把CSS或JS的import放在html最后端?

楼主: cyclone350 (老子我最神)   2014-12-29 00:35:05
:
作者: GoalBased (Artificail Intelligence)   2014-12-29 08:40:00
我没有研究过这个,不过就推理(XD)的角度而言html和css应该要都载完才有办法render不然你先render html 在画面上,之后加上css属性那不就会看到两种画面吗,一开始的一闪而过接下来是有css的,以上纯属个人推测,所以我上一篇有说听过js放底端没听过css,不过asp.net mvc的范例似乎也有把css放尾端的状况出现 whatever..
作者: Peruheru (还在想)   2014-12-29 08:49:00
其实我看好色龙的网志,的确是会先闪过无CSS排版的画面
作者: GoalBased (Artificail Intelligence)   2014-12-29 09:11:00
的确有一些网页会这样..看了一下GOOGLE首页,也是有些css放前面有些放后详细的就需要再研究了以APPLE来讲则是放在前面
作者: mmis1000 (秋月恋枫)   2014-12-29 12:01:00
Google的建议就是把画面外的css塞尾端啊,这样就算闪动也没差,反正你又看不到,而且能更早产生第一个画面,不会转圈圈转很久目前大部分浏览器都是 连线需要的时间 > 加载需要的时间> 重建render tree所需要的时间,多花一点时间重跑画面很划算啊?就像你用jquryui做dialog,等他加载完再产生画面根本没意义,因为第一个画面又没dialog
作者: GoalBased (Artificail Intelligence)   2014-12-29 12:22:00
所以重点在于 "画面外"
作者: mmis1000 (秋月恋枫)   2014-12-29 20:46:00
怎么可能没关系...jquery ui的css九成以上在第一个画面都不会用到的...但提前加载却会bloack住整个画面像是datapicker之类的,一开始都不会用到google的意思是 把虽然会用到,但不再第一个画面里的css放后面,或用headjs之类的塞进onload里延后读取
楼主: cyclone350 (老子我最神)   2014-12-29 21:11:00
mmis 我懂你要表达的意思,但是教学的理论是必须整个CSS 及 DOM 读完才可以 render, 而你却的意思是读到后就马上可以做render了
作者: mmis1000 (秋月恋枫)   2014-12-29 21:14:00
实作问题,至少ff是可以在全部资源读完前部分输出的
楼主: cyclone350 (老子我最神)   2014-12-29 21:14:00
而我的实验是不论在前面或在后面都会 block 住...恩,我测测看 FF
作者: mmis1000 (秋月恋枫)   2014-12-29 21:15:00
fb也用了类似的trick来部分输出,在第一个画面只加载最少量资源,后面其他的再用js读取好像是叫 bigpipe 的方法
楼主: cyclone350 (老子我最神)   2014-12-29 21:19:00
我对 js 动态加载是没有疑问的无法... 我的实验是无法部分输出的,还是有任何方式可以佐证浏览器可以部份输出或是CSS放最后面会影响效能的文章? 或是哪一个有名的网站会把CSS放最后面?
作者: mmis1000 (秋月恋枫)   2014-12-29 22:08:00
开台南市公共汽车动态的网页看看就知道了http://goo.gl/Ny5tLc 开chrome,trolttoe选最慢的你会发现render没有被jqueryui放最下面的css挡住照你的讲法,就算放最下面也会挡住画面输出,但并不是
作者: alog (A肉哥)   2014-12-30 00:58:00
不管怎么样..以chrome做法是,不论dom有没有loading完上面的渲染样式 Chrome会按照CSS+Dom的状况才会做渲染然后再怎么快都没用,大部份卡在你的file 跟 domain name跟你那台server的位置决定大部份的速度为了特定浏览器做了太多优化没啥用,忘记真正的问题才可怕然后,你可以利用css backgroundimage 或 js的new Image来做 image buffer,让其它页面会需要的影像事先加载使用者在换一下个页面时,他就不用再等待下载图片了适用于一些会有换图转场、大型图片档案顺便一提,CSS background image 做 buffer 蛮简单的你可以把一个看不到的元素或超级迷你的div加入一组class这组class有你设定好的背景图片最好那块是在网页上看不到然后把那组class摆在最后,而tag的部分也是摆在最后当系统加载差不多的时候,那块部分就会被加载因为排版引擎从dom+css的样式规则发现这个class有被使用于是他就开始加载/设定你那组元素的样式,有档案也会下载若只有单纯在css里面定义,排版引擎不会去碰那里面的样式最后我想说的是,不管放在上面还是下面,或者是外部加载或者是直接放在里面,都有他的用意跟适合的情况各有优点及缺点,没有特别王道
作者: mmis1000 (秋月恋枫)   2014-12-30 01:15:00
在我看来,他对 ie,ff,chrome 都有效就有使用价值了
作者: alog (A肉哥)   2014-12-30 01:16:00
要调校请以你那个网站的主使用者用的浏览器下去调
作者: mmis1000 (秋月恋枫)   2014-12-30 01:16:00
而且就算没效你也没损失阿
作者: mmis1000 (秋月恋枫)   2014-12-30 01:20:00
都有效欧...而且刚刚的回答就是追timeline的结果是throttle成 5kb/s 的速度测的
作者: ufenyaw (玑天玉)   2014-12-30 07:26:00
推a大background image举例 很棒很实用
作者: mmis1000 (秋月恋枫)   2014-12-31 01:49:00
来个小测试吧,这是一个简单的网页,含有一个延迟很大的css档案,只是一个放头,一个放尾https://test-mmis1000.c9.io/normal.htmlhttps://test-mmis1000.c9.io/normal.htmlhttps://test-mmis1000.c9.io/normal1.html假设说这个css没内容还是会挡住吗?https://test-mmis1000.c9.io/emptycss.htmlhttps://test-mmis1000.c9.io/emptycss1.html
作者: superpai (超级白)   2014-12-31 15:52:00
实测结果如果FX会让HTML先出来再上CSS但是Chrome 会等CSS抓完再让整个画面一起出来
作者: mmis1000 (秋月恋枫)   2014-12-31 16:56:00
https://test-mmis1000.c9.io/normal1-chunk.html事实上chrome也会,但限transfer-encoding:chunked的网页

Links booklink

Contact Us: admin [ a t ] ucptt.com