Что лучше использовать: gulp-useref, gulp-concate или другой вариант?

Какой плагин использовать для оптимизации запросов на многостраничных сайтах?
Или компилить весь js в один, включая библиотеки?
  • Вопрос задан
  • 455 просмотров
Решения вопроса 1
VGrabko
@VGrabko
Golang, Php, Js
Я юзаю ленивую загрузку. Вместо мапа можно писать в localstorage
//регистр всех загруженных данных
window.Registry = {
    Controllers: {},
    Views: {},
    Package: {},
    Middleware: {},
    location: {
        Controller: "",
        Method: ""
    }
};
window.Get = {
    load: function (url) {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', url, false);
        xhr.send();
        if (xhr.status >= 200 && xhr.status < 400) {
            eval(xhr.responseText);
        }
    },
    /**
     * 
     * @param {string} name Имя пакета
     * @returns {Registry.Package}
     */
    Package: function (name) {
        if (Registry.Package[name] === undefined) {
        	this.load("/resources/js/package/" + name + ".js");
        }
        return Registry.Package[name];
    },
    /**
     * 
     * @param {string} name Имя контроллера
     * @param {string} method Метод контроллера
     * @returns bool Вернёт true если найдёт метод в контроллере
     */
    Controllers: function (name, method) {
        Registry.location.Controller = name;
        Registry.location.Method = method;
        if (Registry.Controllers[name] === undefined) {
        	this.load("/resources/js/app/controllers/" + name + ".js");
        }

        if (Registry.Controllers[name][method] === undefined) {
            return false;
        } else {
            Registry.Controllers[name][method]();
            return true;
        }
    },
    Middleware: function (name, data) {
        if (Registry.Middleware[name] === undefined) {
        	this.load("/resources/js/app/middleware/" + name + ".js");
        }

        if (Registry.Middleware[name] === undefined) {
            return false;
        } else {
            Registry.Middleware[name](data);
            return true;
        }
    },
    ViewsSource: function (name) {
        if (Registry.Views[name] === undefined) {
        	var xhr = new XMLHttpRequest();
        	xhr.open('GET', "/resources/js/app/views/" + name + ".tpl", false);
        	xhr.send();
        	if (xhr.status >= 200 && xhr.status < 400) {
       	     Registry.Views[name] = xhr.responseText;
        	} else {
        	    console.error("Ошибка при загрузке вьюшки " + name + ". Исходный урл: /resources/js/app/views/" + name + ".tpl")
       	 }
        }
        return Registry.Views[name];
    },
    /**
     * 
     * @param {type} name Имя вьюшки
     * @param {type} vars обьект с переменными
     * @returns {Registry.Views} содержание вьюшки
     */
    Views: function (name, vars) {
        var v = this.Package("Views");
        document.getElementById("page").innerHTML = v.compile(this.ViewsSource(name), vars);
    }
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы