您所描述的假设在模式dijit.Dialog
与加载消息一起出现时,dojo 本身已经被加载。
现在,通常,一旦您的页面完全加载,dojo 就会开始执行,并且您通常会将您的 dojo 代码放在作为参数传递的匿名函数中dojo.addOnLoad()
。
这意味着您的页面的其余部分(您称之为“链接”)必须通过 ajax 加载(例如,使用dijit.layout.ContentPane
)。这样,dojo 可以在内容下载之前执行,并且您的“等待”消息可以更早出现。
它可能看起来像这样:
<html>
<head>
<link rel="stylesheet" href="/dojo/dijit/themes/tundra/tundra.css" type="text/css" media="screen" />
<script type="text/javascript" src="/dojo/dojo.js" djConfig="parseOnLoad:true"></script>
/* make sure that you shrinksafe together your libraries and dojo's for faster loading... */
<script type="text/javascript" src="/dojo/yourOwnDojoCompressedScripts.js"></script>
<script type="text/javascript">
var dialog;
dojo.addOnLoad(function(){
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.Dialog");
dialog = new dijit.Dialog();
dialog.setContent("<p>This page will be available in a tick!</p>");
dialog.show();
});
</script>
</head>
<body class="tundra">
<div id="delayedContent"
dojoType="dijit.layout.ContentPane"
href="/myContentUrl"
onLoad="dialog.hide()">
</div>
</body>
</html>
该计划中唯一的缺陷是 dojo 本身:预计您的收缩安全库的重量会超过 90K(可能高达 300K,具体取决于您放了多少东西)。在慢速连接上,下载仍然需要相当长的时间。也就是说,我们说的是静态90K --- 同一用户在每个会话中只会下载一次,如果您在提供这些静态文件时花时间设置适当的缓存/过期标头,则甚至更少。