我很好奇人們對這種情況的看法和想法。我想懶惰加載JavaScript的原因是因爲性能。在主體的末尾加載JavaScript減少了瀏覽器阻塞,並以更快的頁面加載速度結束。「懶惰JavaScript」加載隱藏的div?可能的安全/其他問題?
但有一些自動化我正在使用生成的HTML(Django具體)。這種自動化方式允許使用輸出呈現整個小部件所需內容的「小部件」(額外的javascript,css,...)來構建表單。問題是小部件想要立即將javascript輸出到文檔的中間,但我想確保所有JavaScript負載在主體的末尾。
當以下小部件添加到一個表單,你可以看到它呈現一些<script>...</script>
標籤:
class AutoCompleteTagInput(forms.TextInput):
class Media:
css = {
'all': ('css/jquery.autocomplete.css',)
}
js = (
'js/jquery.bgiframe.js',
'js/jquery.ajaxQueue.js',
'js/jquery.autocomplete.js',
)
def render(self, name, value, attrs=None):
output = super(AutoCompleteTagInput, self).render(name, value, attrs)
page_tags = Tag.objects.usage_for_model(DataSet)
tag_list = simplejson.dumps([tag.name for tag in page_tags],
ensure_ascii=False)
return mark_safe(u'''<script type="text/javascript">
jQuery("#id_%s").autocomplete(%s, {
width: 150,
max: 10,
highlight: false,
scroll: true,
scrollHeight: 100,
matchContains: true,
autoFill: true
});
</script>''' % (name, tag_list,)) + output
什麼我建議是,如果有人使用<div class=".lazy-js">...</div>
有一些CSS(.lazy-js { display: none; }
)和一些JavaScript的(jQuery('.lazy-js').each(function(index) { eval(jQuery(this).text()); }
),可以有效地迫使所有的JavaScript在頁面加載結束時加載:
class AutoCompleteTagInput(forms.TextInput):
class Media:
css = {
'all': ('css/jquery.autocomplete.css',)
}
js = (
'js/jquery.bgiframe.js',
'js/jquery.ajaxQueue.js',
'js/jquery.autocomplete.js',
)
def render(self, name, value, attrs=None):
output = super(AutoCompleteTagInput, self).render(name, value, attrs)
page_tags = Tag.objects.usage_for_model(DataSet)
tag_list = simplejson.dumps([tag.name for tag in page_tags],
ensure_ascii=False)
return mark_safe(u'''<div class="lazy-js">
jQuery("#id_%s").autocomplete(%s, {
width: 150,
max: 10,
highlight: false,
scroll: true,
scrollHeight: 100,
matchContains: true,
autoFill: true
});
</div>''' % (name, tag_list,)) + output
沒關係我具體實施的所有細節(特定媒體參與),我M尋找共識是否通過隱藏隱藏標籤使用懶惰加載的JavaScript的方法可以提出問題是否安全或其他相關?
關於這一點最方便的部分之一是它遵循DRY原則而非IMO良好,因爲您不需要爲頁面中的每個實例破解特定的延遲加載。它只是「有效」。
更新:我不知道,如果Django的有排隊的東西是隻輸出</body>
結束前的能力(通過花哨的模板繼承什麼?)?
什麼是延遲加載? – 2010-05-04 16:15:01
'
儘管我對此沒有任何意見,但如果您的問題已演變爲Django問題,您可能需要提出一個新問題。 @austin cheney,延遲加載就像我指向你的一個鏈接,當你需要它的時候點擊,而不是在這裏寫出答案,就像這樣:http://en.wikipedia.org/wiki/Lazy_loading – 2010-05-04 17:58:29