近期有同学反应在学生之家网站上会经常出现问题,包括但不限于
涂鸦板无法保存、无法使用道具、无法进行打招呼、无法回帖、发短消息、出现下载cp.php等问题。
经过学生之家技术部成员谨慎分析,问题原因为javascript本身默认情况是
同步载入,即需要所有js文件全部载入(下载到缓存)完成之后,操作才可进行。因程序原因,有些js文件必须存储在学校网外部非学生之家服务器上,近期校园网络访问外网缓慢,导致载入这些站外js文件需要很长时间(浏览器进度条一直显示载入中)。同步javascript在没有全部载入完成的情况下是不能执行任何javascript操作,所以出现本文开始提到的错误问题。
经过学生之家技术部成员研究,借鉴Google Analytics中的js载入方法,使用“javascript自身异步载入”方式加载js文件。
如其中之一的原js同步载入代码为
<script type="text/javascript" src="http://a.alimama.cn/inf.js"></script>
现使用js自身异步载入代码为
<script type="text/javascript">
document.write(unescape("%3Cscript src='http://a.alimama.cn/inf.js' type='text/javascript'%3E%3C/script%3E"));
</script>
通过javascript去载入javascript的方法实现异步载入。异步载入方式,可以不必等待所有js加载完成才能操作,在js载入的同时即可同时操作同时加载。
备注:“javascript自身异步载入”与“AJAX”技术不同,“javascript自身异步载入”是用javascript异步载入javascript,而“AJAX”是利用javascript异步载入XML或者JSON的序列化数组数据。
异步载入技术在网络状况不佳时是很好的解决方案,但根本问题仍然需要流畅的网络。
若访问时仍存在相关问题,请回帖讨论。谢谢您的支持与理解。