簡體   English   中英

這種有條件的javascript加載方法是否有任何價值?

[英]Is this method of conditional javascript loading of any value?

我正在為Web應用程序構建多頁前端。 UI的JavaScript最少,但是我知道會有很多JavaScript可以處理后端,因此我正在竭盡所能,以使其盡可能稀疏和有限。

我只想使用一個縮小的js文件有條件地同步執行javascript。 我有一些全局函數,但是大多數代碼是特定於頁面的。 每個頁面在body元素中都有頁面的ID。 例如,about.html具有以下代碼<html>...<body id="about">...</body></html>

我知道加載JavaScript的各種異步方法,例如require.js甚至$.getScript ,但是由於種種原因,我試圖避免這種路由。 因為我正在預處理HTML,所以我也不想將每個頁面的腳本分解(盡管可以),因為它是一個小文件,並且我不想創建一堆不同的<script>標簽。 我當前的解決方案是有條件地執行每頁所需的javascript,而我的操作類似於以下示例:

    $(document).ready(function(){
         //global.js code
        if(document.body.id==='about'){
           // about.js code
        } 
       if(document.body.id==='home'){
           //home.js code
       } 
        // etc.

  });

在構建過程中,所有js都存儲在單獨的文件中,因此它在外觀上不像在這里看起來那樣精巧,因為條件體內只有一個include filename.js

條件防止不必要的代碼在每個頁面上執行。 但是,當我這樣做時,突然意識到,以這種方式進行操作實際上可能沒有任何好處。 我讀到$(window).load$('body').load事件可能會導致與$(document).ready發生沖突,而且它們的速度肯定都較慢window.onload (我測試過)。 我想那將是我首選的解決方法。 我讀的是真的嗎? 和/或,無論如何,我正在做的事情有用嗎?

對於特定於頁面的事件,為什么不只在元素引用中添加正文ID?

$( '#about .do-something' ).on()...

而且,如果您實際上是逐頁執行基於非事件的代碼

if( $( '#about' ).length ) { // trigger your code here }

它與您的解決方案並不太相似,只是它不需要您保留有關在哪里執行什么代碼的清單。 無論哪種方式,兩種解決方案都會被緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM