【问题标题】:laravel app.js very large file sizelaravel app.js 非常大的文件大小
【发布时间】:2017-04-29 12:29:12
【问题描述】:

我已经为 Heroku 部署了一个 Laravel 5.3 应用程序。但是,在加载 /login 时,我注意到页面加载时间非常慢。问题似乎是一个非常大的app.js 文件:/js/app.js。这是 DevTools 中网络资源面板的屏幕截图:screenshot- Network panel。从顶部算起的第三个资源是有问题的文件。

我不知道为什么这个文件变得这么大。这是存储库的链接:https://github.com/AshMenhennett/Salon-Pricing

我无法发布更多链接,所以如果您想要指向特定文件的直接链接,请告诉我。

我应该怎么做才能缓解这个问题?

【问题讨论】:

  • 链接到有问题的文件:beauty-salon-pricing.herokuapp.com/js/app.js
  • 您的文件将大量库捆绑到一个文件中,但我看到的主要问题是您在 .js 文件中包含源映射。尝试将一些库文件移动到它们自己的文件中,并删除源映射。

标签: javascript laravel webpack


【解决方案1】:

您可以做的最明显的事情是运行npm run prod。这将编译资产以供生产使用。但在大多数情况下,除了运行npm run prod 之外,您还必须寻找其他解决方案。如果您的生产文件太大,您必须检查您的依赖项。删除不必要的依赖项,并确保您不使用大量外部库。例如,如果您使用的是引导程序,则应该依靠引导程序的警报来显示警报,而不是使用 Vue 包来显示警报。我承认有时您需要使用外部库来使您的网站具有交互性,但要实现这一点,您将不得不牺牲性能。因此,为了减少 app.js 文件,最好的办法是在 package.json 中使用最少的外部依赖项。

您可以做的第二件事是在组件的模板中使用最少的 HTML。许多带有大量 HTML/CSS 的组件将导致更大的 app.js 文件。这是另一种方法,会产生更小的 app.js 文件。

最后,您应该考虑使用 Vue 的 component slots 将 HTML 内容传递给您的组件。这会将 HTML 保留在您的静态文件中,并且只有 javascript 数据(API 调用、道具等)将在 app.js 文件中编译。这是构建较小的 app.js 文件的有效方法。

编辑:您可以从 bootstrap.js 文件中删除 JQuery 和 Bootstrap 脚本,并且可以单独包含这些依赖项。拥有更多的脚本而不是拥有非常大的脚本总是一个好主意。即浏览器进行并行下载,因此分别使用 JQuery 和 Bootstrap 依赖项是一个好主意。

【讨论】:

  • 应该被标记为答案。这解决了构建问题以及进一步减少文件实际内容的实用方法。
【解决方案2】:

从您的链接的外观来看,您尚未创建资产的生产版本,目前所有源地图都在您的 app.js 文件中,这将增加很多文件大小、css 和 js输出也不会压缩/缩小。

假设你使用的是 laravel elixir,你只需要运行 gulp --production 这将删除源映射,压缩 js 和 css 输出等。

【讨论】:

  • @wader 我也有类似的问题,但在我的情况下,我已经运行了 'gulp --production' 但我的 app.js 文件仍然像 600kb 一样大......请问我该怎么办解决它?
【解决方案3】:

对于使用 Laravel Mix 的人,您只需要运行 npm run prod 即可从 app.js 本身压缩和删除源映射。

【讨论】:

    【解决方案4】:

    您需要异步加载组件

    Webpack 有一个很棒的功能来创建代码块。关键是使用异步组件。只要组件出现在您刚刚加载的页面上,这些组件就会完全异步加载。

    让我们开始吧。

    resources/js/app.js

    我变了

    Vue.component('jobs', require('./pages/employer/jobs/Index.vue').default);
    

    Vue.component('jobs', () => import('./pages/employer/jobs/Index.vue'));
    

    webpack.mix.js

    mix.webpackConfig({
        output:{
            chunkFilename:'js/vuejs_code_split/[name].js',
        }
    });
    

    现在通过运行npm run watch or prod 保存每个组件文件public/js/vuejs_code_split/[name].js 而主要的app.js 会在需要时自动调用这些组件。

    【讨论】:

    • 通过拆分我的代码,页面需要更长的时间来加载,因为所有组件都是依次获取的。您知道为某个页面预加载所有必需脚本的方法吗?
    • 我从加载这样的组件中节省了大约 2mb...但现在我是 8mb 大声笑...请记住我还没有运行 npm run production,所以我希望它变得更低了。
    猜你喜欢
    • 2020-03-07
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2019-11-30
    • 2013-05-07
    • 2019-01-01
    相关资源
    最近更新 更多