Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.06.2015, 12:53
Аватар для Sanu0074
Аспирант
Отправить личное сообщение для Sanu0074 Посмотреть профиль Найти все сообщения от Sanu0074
 
Регистрация: 16.12.2012
Сообщений: 80

JavaScript препроцессор (объединение, сжатие)
Здравствуйте. Есть задача, на сайте подключено много скриптов (всяких кусков голого[ужас просто], целых либ, отдельных объектов). Нужно это все дело оптимизировать.
1. Необходимо все скрипты объединить в один большой скрипт
2. При этом нужно юзать какой-либо препроцессор (выбор падает на TypeScript)
3. При компилирования препроцессором выходной файл должен минифицироваться
4. В итоге, полученный большой файл, нужно использовать не целиком всегда, а на определенной странице только какую-то его часть. Например для страницы product создать класс product и юзать только его и события кот в нем определены, но на странице account все что в product не должно вызываться и не должны срабатывать бинды т.к. для account есть свой класс.
5. Должна быть возможность собирать такой "большой" выходной файл из множества маленьких (юзать всякие include), например чтобы каждый класс (или интерфейс) описать в отдельном файле.
6. По возможности не должно быть много трудности для перехода сайта из того состояния как я описал выше в то которое хочется.

Подскажите, что мне для этого лучше использовать и как решить задачку?
p.s.
Из много найденного, понравился TypeScript, но не уверен до конца в нем. Есть ли там инклуды чтоб по файлам все разбить? Умеет ли он сжимать код при компиляции (минифицировать)? И стоит ли его выбирать?
Ответить с цитированием
  #2 (permalink)  
Старый 03.06.2015, 14:55
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

одно
Сообщение от Sanu0074
1. Необходимо все скрипты объединить в один большой скрипт
не обязывает ко второму
Сообщение от Sanu0074
2. При этом нужно юзать какой-либо препроцессор (выбор падает на TypeScript)
и третьему
Сообщение от Sanu0074
3. При компилирования препроцессором выходной файл должен минифицироваться
см Webpack'а тред
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 04.06.2015, 00:15
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Sanu0074
Здравствуйте. Есть задача, на сайте подключено много скриптов (всяких кусков голого[ужас просто], целых либ, отдельных объектов). Нужно это все дело оптимизировать.
Вариант на клиенте:
Проверять и подгружать всё на localStorage, проверяя перед загрузкой уже наличествующие загрузки, если скрипт загружен, просто вызываем и развёртываем его, причём подгружать в LS можно и после загрузки страницы, тормоз будет лишь при первом входе или очистке кеша.
Хотя если на главной ограничиться минимумом скриптов, а подгружаемые запихнуть в футер, - данное ограничение тоже должно исчезнуть
----------
ЗЫ: При сборке на клиенте типично отправляем еще и кук-массив(для информирования серва) коротких названий существующих скриптов в кеше клиента при запросах очередной страницы, типа: [S1,S2,S5,S11,S24,S32]

Последний раз редактировалось Deff, 04.06.2015 в 01:23.
Ответить с цитированием
  #4 (permalink)  
Старый 04.06.2015, 03:06
Интересующийся
Отправить личное сообщение для sexbot Посмотреть профиль Найти все сообщения от sexbot
 
Регистрация: 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.
Ответить с цитированием
  #5 (permalink)  
Старый 04.06.2015, 03:09
Интересующийся
Отправить личное сообщение для sexbot Посмотреть профиль Найти все сообщения от sexbot
 
Регистрация: 09.05.2015
Сообщений: 27

там еще нужно проверки предусмотреть, а то содержимое index.php твоего посмотрят, а там и до базы доберутся (на php не писал давно, я его в душе ненавижу и презираю)
Ответить с цитированием
  #6 (permalink)  
Старый 04.06.2015, 08:44
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Из много найденного, понравился TypeScript, но не уверен до конца в нем. Есть ли там инклуды чтоб по файлам все разбить? Умеет ли он сжимать код при компиляции (минифицировать)? И стоит ли его выбирать?
TypeScript - это диалект ECMAScript, сборка вообще не в его компетенции, для этого отдельные инструменты используются.

Цитата:
см Webpack'а тред
+. Изучай webpack, там все описанные задачи решаются элементарно.

Цитата:
есть некий скрипт get_js.php
ему передается список подключаемых файлов get_js.php?i=main.js,script.js?v=1,...
С таким подходом сервер сложится при малейшем наплыве посетителей: сборка, да еще и с препроцессорами - процесс ресурсоёмкий.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книга: JavaScript. Сильные стороны Magneto Учебные материалы 16 21.04.2013 15:28
Интерпретатор Java на JS kobezzza Оффтопик 24 11.10.2012 18:32
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34