2016-12-12 6 views
0

Мне сложно определить способ оптимизации моего текущего стека. Мое текущее время загрузки на дроссельной заслонке (обычные инструменты Chrome Dev 3g) составляет 42-43 с.Lazy load js/оптимизировать время загрузки

Я пытался лениться загрузить CSS, но кажется, что файл main.js (2.9MB) самый тяжелый и мне как-то нужно его обрезать. Как я могу добиться реструктуризации, которая может масштабироваться и не просто соответствует истине для кода ниже, но для всех угловых стеков?

Хотелось бы, чтобы мне не пришлось его полностью переделать. Но просто создайте что-то сверху, чтобы оптимизировать его. У меня есть код, структурированный, как показано ниже.

/* app.js */

require('angular'); 
require('angular-aria'); 
require('angular-animate'); 
require('angular-material'); 
require('angular-ui-router'); 
global.jQuery = require('jquery'); 
// global.$ = jQuery; 
require('html5shiv'); 
require('bootstrap'); 
// require('angular-mocks'); 
// require('../node_modules/bootstrap/dist/js/bootstrap.js'); 
var AuthTokenFactory = require('./services/AuthTokenFactory'), 
    UserFactory = require('./services/UserFactory'), 
    AuthInterceptor = require('./services/AuthInterceptor'), 
    AppFactory = require('./services/AppFactory'), 
    DateFilter = require('./filters/DateFilter'), 
    OnlyNumeric = require('./directives/OnlyNumeric.directive'), 
    HomeController = require('./controllers/HomeController'), 
    BranchListingCtrl = require('./controllers/branchListingCtrl'); 

angular.module('bankApp', ['ui.router', 'ngMaterial']) 

.run(['UserFactory', '$location', '$rootScope', function(UserFactory, $location, $rootScope) { 
    //State change function here 

}]) 

.config(function($stateProvider, $urlRouterProvider, $mdThemingProvider, $httpProvider, $locationProvider) { 

    //States here 


}) 
.factory('UserFactory', ['$http', '$q', 'AuthTokenFactory', 'API', '$httpParamSerializerJQLike', UserFactory]) 
.factory('AuthTokenFactory', ['$window', AuthTokenFactory]) 
.factory('AuthInterceptor', ['AuthTokenFactory', AuthInterceptor]) 
.factory('AppFactory', ['$http', 'API', '$httpParamSerializerJQLike','$timeout', '$rootScope', '$window', AppFactory]) 
.filter('dateFilter', DateFilter) 
.directive('onlyNumeric', OnlyNumeric) 

/* Index.html */

<!DOCTYPE html> 
<html lang="en" ng-app="bankApp"> 
<head> 
    <meta charset="UTF-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=Edge"> 
    <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"> 
    <title>My App</title> 
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" 
     rel="stylesheet"> 
    <link href="https://fonts.googleapis.com/css?family=Abel" rel="stylesheet"> 
    <!--<link rel="stylesheet" href="css/bootstrap.min.css">--> 
    <!--<link rel="stylesheet" href="css/angular-material.css">--> 
    <!--<link rel="stylesheet" href="css/style.css">--> 
    <!-- <base href="/" /> --> 

    <script> 
     function loadCss(filename) { 
      var l = document.createElement('link'); 
      l.rel = 'stylesheet'; 
      l.href = filename 
      var h = document.getElementsByTagName('head')[0]; 
      h.parentNode.insertBefore(l, h); 
     } 

     function cb() { 
      loadCss('css/bootstrap.min.css'); 
      loadCss('css/angular-material.css'); 
      loadCss('css/style.css'); 
     } 
     var raf = requestAnimationFrame || mozRequestAnimationFrame || 
      webkitRequestAnimationFrame || msRequestAnimationFrame; 
     if (raf) raf(cb); 
     else window.addEventListener('load', cb); 
    </script> 
</head> 
<body> 
    <div class="toast" ng-show="toast.show" ng-class="{'success': toast.type == 'success', 'error': toast.type == 'error'}" ng-cloak> 
     {{toast.message}} 
    </div> 

    <div> 
     <div ui-view></div> 
    </div> 
    <script src="js/main.js"></script> 
    <script async defer 
      src="https://maps.googleapis.com/maps/api/js?key=random"> 
    </script> 
    <!-- <script src="http://maps.google.com/maps/api/js"></script> --> 

    <!-- Google Analytics --> 
    <script> 
     //Analytics function here 
    </script> 
    <!-- End Google Analytics --> 

</body> 
</html> 

/* Gulpfile.js */

var gulp = require('gulp'); 
var sass = require('gulp-ruby-sass'); 
var connect = require('gulp-connect'); 
var browserify = require('browserify'); 
var source = require('vinyl-source-stream'); 
var cache = require('gulp-cache'); 

gulp.task('connect', function(){ 
    connect.server({ 
     // root: '', 
     port: 4000 
    }) 
}) 

gulp.task('browserify', function(){ 

    return browserify('./app/app.js') 
    .bundle() 
    .pipe(source('main.js')) 
    //save it to public/js/ directory 
    .pipe(gulp.dest('./js/')) 
}) 
gulp.task('sass', function(){ 
    return sass('sass/style.scss') 
     .pipe(gulp.dest('./css')) 
}) 
gulp.task('clearCache', function() { 
    // Still pass the files to clear cache for 
    gulp.src('./*.js') 
    .pipe(cache.clear()) 

    // Or, just call this for everything 
    cache.clearAll(); 

}) 

gulp.task('watch', function(){ 
    gulp.watch('app/**/*.js', ['browserify']) 
    gulp.watch('sass/style.scss', ['sass']) 
    // gulp.watch('index.html', [ 'build-html']) 
}) 

gulp.task('default', ['connect', 'watch', 'clearCache']) 

ответ

1

Вы м подумайте об уменьшении исходного кода. Насколько мне известно, браузер не делает этого, поэтому из того, что я вижу, вы попадаете в не оптимизированный пакет. Вы можете немного уменьшить код.

Некоторые опции:

В будущем вы могли бы также рассмотреть возможность разделения кода на более жгутов и нагрузки на первой необходимости (например, на основе основных маршрутов).

Надеюсь, что это поможет

 Смежные вопросы

  • Нет связанных вопросов^_^