03.06.2015, 12:53
|
|
Аспирант
|
|
Регистрация: 16.12.2012
Сообщений: 80
|
|
JavaScript препроцессор (объединение, сжатие)
Здравствуйте. Есть задача, на сайте подключено много скриптов (всяких кусков голого[ужас просто], целых либ, отдельных объектов). Нужно это все дело оптимизировать.
1. Необходимо все скрипты объединить в один большой скрипт
2. При этом нужно юзать какой-либо препроцессор (выбор падает на TypeScript)
3. При компилирования препроцессором выходной файл должен минифицироваться
4. В итоге, полученный большой файл, нужно использовать не целиком всегда, а на определенной странице только какую-то его часть. Например для страницы product создать класс product и юзать только его и события кот в нем определены, но на странице account все что в product не должно вызываться и не должны срабатывать бинды т.к. для account есть свой класс.
5. Должна быть возможность собирать такой "большой" выходной файл из множества маленьких (юзать всякие include), например чтобы каждый класс (или интерфейс) описать в отдельном файле.
6. По возможности не должно быть много трудности для перехода сайта из того состояния как я описал выше в то которое хочется.
Подскажите, что мне для этого лучше использовать и как решить задачку?
p.s.
Из много найденного, понравился TypeScript, но не уверен до конца в нем. Есть ли там инклуды чтоб по файлам все разбить? Умеет ли он сжимать код при компиляции (минифицировать)? И стоит ли его выбирать?
|
|
03.06.2015, 14:55
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
одно
Сообщение от Sanu0074
|
1. Необходимо все скрипты объединить в один большой скрипт
|
не обязывает ко второму
Сообщение от Sanu0074
|
2. При этом нужно юзать какой-либо препроцессор (выбор падает на TypeScript)
|
и третьему
Сообщение от Sanu0074
|
3. При компилирования препроцессором выходной файл должен минифицироваться
|
см Webpack'а тред
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
04.06.2015, 00:15
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от Sanu0074
|
Здравствуйте. Есть задача, на сайте подключено много скриптов (всяких кусков голого[ужас просто], целых либ, отдельных объектов). Нужно это все дело оптимизировать.
|
Вариант на клиенте:
Проверять и подгружать всё на localStorage, проверяя перед загрузкой уже наличествующие загрузки, если скрипт загружен, просто вызываем и развёртываем его, причём подгружать в LS можно и после загрузки страницы, тормоз будет лишь при первом входе или очистке кеша.
Хотя если на главной ограничиться минимумом скриптов, а подгружаемые запихнуть в футер, - данное ограничение тоже должно исчезнуть
----------
ЗЫ: При сборке на клиенте типично отправляем еще и кук-массив(для информирования серва) коротких названий существующих скриптов в кеше клиента при запросах очередной страницы, типа: [S1,S2,S5,S11,S24,S32]
Последний раз редактировалось Deff, 04.06.2015 в 01:23.
|
|
04.06.2015, 03:06
|
Интересующийся
|
|
Регистрация: 09.05.2015
Сообщений: 27
|
|
Нужно сделать что-то подобного:
есть некий скрипт get_js.php
ему передается список подключаемых файлов get_js.php?i=main.js,script.js?v=1,...
на серверной стороне код типа такого
<?php isset($_GET['i']) or die();
$lst = $_GET['i'];
$h = md5($lst);
$p = "jscache/$h";
if (!file_exists($p)) { $files = explode(',', $lst); $data = []; foreach ($files as $file) { $data[] = file_get_contents($file); } $data = implode("\n", $data); /* всегда быстрее конкатенации */ file_put_contents($p, $data); }
header("Content-Type: text/javascript");
include $p;
Последний раз редактировалось sexbot, 04.06.2015 в 03:10.
|
|
04.06.2015, 03:09
|
Интересующийся
|
|
Регистрация: 09.05.2015
Сообщений: 27
|
|
там еще нужно проверки предусмотреть, а то содержимое index.php твоего посмотрят, а там и до базы доберутся (на php не писал давно, я его в душе ненавижу и презираю)
|
|
04.06.2015, 08:44
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
Из много найденного, понравился TypeScript, но не уверен до конца в нем. Есть ли там инклуды чтоб по файлам все разбить? Умеет ли он сжимать код при компиляции (минифицировать)? И стоит ли его выбирать?
|
TypeScript - это диалект ECMAScript, сборка вообще не в его компетенции, для этого отдельные инструменты используются.
Цитата:
|
см Webpack'а тред
|
+. Изучай webpack, там все описанные задачи решаются элементарно.
Цитата:
|
есть некий скрипт get_js.php
ему передается список подключаемых файлов get_js.php?i=main.js,script.js?v=1,...
|
С таким подходом сервер сложится при малейшем наплыве посетителей: сборка, да еще и с препроцессорами - процесс ресурсоёмкий.
|
|
|
|