【问题标题】:Load jQuery Mobile script asynchronously?异步加载 jQuery Mobile 脚本?
【发布时间】:2012-03-14 18:34:03
【问题描述】:

有没有人尝试过借助 head.js 或使用其他方法异步实现 jQuery Mobile 与随附脚本的加载?我现在正在试验它,虽然它提供了巨大的性能提升,但它似乎破坏了导航(特别是 hashchanged 事件处理)。所以我想知道是否有人可以分享他/她的经验。

更新:hashchanged 事件的问题原来是由另一个组件引起的。因此,请务必实现 jQM 和其他 JavaScript 资产的异步加载,它是安全的,并且极大地提高了 JS 应用程序的加载时间和性能。我使用 head.js 来实现这一点,您可以使用最适合您的方式。

【问题讨论】:

  • 你尝试过类似that的东西吗?
  • 不,我没有。但是,最新版本的 jQM 确实支持 Require.Js。

标签: jquery asynchronous jquery-mobile


【解决方案1】:

这正是像 RequireJS 这样的包的用途。使用 RequireJS 之类的模块加载器允许您异步加载多个 JS 文件,并为文件加载时定义回调。

这是一个简单的例子......

除了加载您的 jQuery 和/或其他 JS 文件,唯一要加载的 <script> 是 RequireJS 脚本。

<script data-main="js/app" src="js/require.js"></script>

data-main 属性告诉 RequireJS 在/js/app.js 加载文件,其中包含您的 RequireJS 配置设置。以下是/js/app.js 的示例:

requirejs.config({
    "baseUrl": "js/lib",
    "paths": {
      "app": "../app",
      "jquery": "//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min",
      "jqueryMobile": "//ajax.googleapis.com/ajax/libs/jquerymobile/1.4.5/jquery.mobile.min"
    }
});

// Load the main app module to start the app
requirejs(["app/main"]);

在这种情况下,/js/app.js 主要用于配置路径。 app 属性告诉 RequireJS 在哪里查找您的特定应用程序 JS,jquery 属性告诉 RequireJS jQuery 的 Google CDN URL 的路径。最后,使用requirejs() 方法加载您的应用程序.js 文件。请注意,所有路径都离开了.js

此时 RequireJS 将在 app/main.js 寻找你的 app JS。在 /js/app/ 中创建一个名为 main.js 的文件 - 这样您现在就有了一个 /js/app/main.js 文件。

此文件将从 Google CDN 异步加载 jQuery 和 jQuery Mobile 文件,并包含应用程序的其余逻辑。以下是/js/app/main.js 的示例:

define(["jquery", "jqueryMobile"], function($) {
    //jQuery and jQuery Mobile have been loaded.
    $(function() {
        // Do stuff with jQuery and jQuery Mobile
    });
});

这有什么作用?让我们看一下网络瀑布,看看文件是如何加载的:​​

上图显示了 jQuery 和 jQuery Mobile 异步加载。

有关类似演示,请参阅RequireJS jQuery example

【讨论】:

    【解决方案2】:

    在将 java 脚本加载到页面时使用 Async 属性。但这将仅在现代浏览器(Html5)中支持详细信息请参阅此链接

    http://www.w3schools.com/tags/att_script_async.asp

    【讨论】:

    • 我需要按特定顺序加载几个脚本。 head.js 允许我控制加载顺序,而异步属性不允许。
    • 对不起,我无法抗拒。请更好地了解 w3schools 及其造成的损害:w3fools.com
    猜你喜欢
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2012-03-14
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多