关于 yahoo首页优化 的新启示:
1.脚本动态加载
以往将脚本一股脑放在底部的做法已经 out 了,在页面不载入 javascript 可用的情况下,等待页面 dom 树解析完成后(甚至直接可在body底部开始加载),异步载入功能脚本,可防止浏览器因为fetch,parse,execute脚本而带来的硬直(类似act....),用户可以尽快使用页面。
旧:
?
<body> .... <script src='yy'></script> <script src='xx'></script> </body>
?
改进:
?
<body> .... <script > dynamicGetScript('xx','yy',function(){ //your action }); </script> </body>
?
?
随之带来了页面编写的新模式,所有复杂应用以及基础类库后期异步载入激活(页面只静态添加 实现异步加载功能的种子脚本),页面前期尽可能少的 引 入js功能,并脱离类库使用原生js实现,当然前提是保证页面在javascript禁用下的基本可用性,参见 yahoo首页 。
?
//种子文件,实现异步加载 <script type="text/javascript" src="http://l.yimg.com/a/combo?arc/yui/yui_0.2.4.js"></script> <script type="text/javascript"> YUI.namespace("presentation"); //基础库以及应用脚本,动态载入列表 YUI.presentation.lazyScriptList = ["http://l.yimg.com/a/combo?arc/yui/substitute_0.1.9.js&arc/yui/oop_0.1.10.js&arc/yui/event-custom_0.1.5.js&arc/yui/io-base_0.1.10.js&arc....."]; </script>?
?
?
2.尽早 flush
将页面分成并列的区域块状:
?
<div id="section1"></div> <div id="section2"></div> <div id="section3"></div>?
?
区域间进行服务器端flush,如 java 端在前一个区域块中进行
?
out.flush()
?
?再进行对应下一区域块的数据读取操作。
原理:flush 可将已产生内容推送到浏览器端,如果区域块经解析判断已闭合,浏览器可
先
对区块html内包含的资源文件(css,script,img,flash...)进行下载渲染。
?
?
?
?