代码之家  ›  专栏  ›  技术社区  ›  usr

删除全局命名空间以启用延迟脚本加载

  •  0
  • usr  · 技术社区  · 14 年前

    我使用的是jqueryui和其他一些JS库,它们总共占了JS的很大一部分(甚至是缩小和合并)。我的想法是不在页面中包含脚本标记,而是将我定义的所有函数以及jQuery的$sign都去掉,这样页面上的内联JS仍然可以调用它们,但会命中存根。然后存根将加载.js文件并实际调用函数。现在的问题是:

    如何将窗口对象/全局对象上的所有函数调用重定向到我的自定义函数?

    我不习惯动态语言,所以一点关于如何在JS中做到这一点的建议将不胜感激。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Joel Martinez    14 年前

    如前所述。。。这很可能是徒劳的。除非你是一个研究人员,并且得到报酬来做这件事(而且只做这件事),否则我会把时间花在我的实际产品和/或重构上,以便页面需要更少的不同JS lib(例如。仅使用jquery,而不是jquery+yui)

    编辑 不过,我想是为了回答这个问题。只需在javascript中设置函数,就可以轻松地替换任何函数。例如。。。

    $ = function(searchString) {
        // if this method is called
        // and jquery hasn't been loaded yet
        // load jquery (which will overwrite all of your local jquery functions with its own
    };
    


    http://ajaxpatterns.org/On-Demand_Javascript

        2
  •  1
  •   BBonifield    14 年前

    问题的根源是使用依赖于库的内嵌JS。我们有一个旧的遗留站点,在Smarty模板中有一堆内嵌的JS。最后我修改了Smarty,这样我就可以捕获JS调用,然后将它们全部输出到页脚中。看起来像这样

    <!-- mySubContent.inc.html -->
    <div id="theTabs">
      <ul><li><!--
        ...
      --></li></ul>
      <div id="tab1"><!--
        ...
      --></div>
    </div>
    {capture_js}
      $("#theTabs").tabs();
    {/capture_js}
    
    <!-- footer.inc.html -->
      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
      <script type="text/javascript">
        {render_captured_js}
      </script>
    </body>
    </html>
    

    http://developer.yahoo.net/blog/archives/2007/07/high_performanc_5.html