好(0) 差(0) 阅读(1327) 评论(0)
做猪窝2时遇到一个问题:首页需要显示“热门帖子”和“新发帖子”,这两项的sql语句都非常复杂,对于几万张帖子的猪窝数据库,查询需要秒的数量级,而两项都放在同一个页面,就更慢了。由于用php做猪窝2时使用了模版类作页面、代码分离并实现换肤功能,所以页面显示前要求所有数据都填充好页面模版,于是首页的显示变得非常慢,代码执行时间要数秒。
想起博客网中打开一个blog时,边上的小栏目起初会显示“数据读取中...”,片刻后才显示出来,使慢速数据不至于拖慢整个页面。遂研究此网页的代码。不过只能研究输出后的静态代码,动态部分虽然猜想是用ASP.NET做,但也看不到程序代码,于是也研究不出结果。次日欲在科大bbs的网页版上发帖求助,却无意看到一不相干的帖子,受到启发,想通了处理方法。
首先,在原模版欲延迟输出处写:
<div id="data">正在读取数据...</div>在</html>标签后写:
<div id="data_load" style="display:none;"><script language="javascript" src="data.php"></script></div>
<script language="javascript">if (document.getElementById("data") != null) document.all("data").innerHTML = document.all("data_load").innerHTML;</script>要注意的是,如果上段代码写在了</html>标签之前,则整个页面仍在数据完全读取后才显示,达不到目的。
如果模版是大小嵌套的(或曰子母模版),则可在大模版(母模版)的</html>标签后加一数据域{loaddata},在此动态php网页中用上段代码填充{loaddata}域。
此时可以把原动态页中的慢速查询移到data.php中,而模版中对应的内容则移到新建的模版data.tpl中,或嵌入data.php中,且每句均要改成javascript写文本格式document.write('原句')。
注意过滤原句中的引号。
其它动态网页语言可类推使用。
最后修改:Wen 于 2007-07-16 23:55:15
用户登录





