#php #javascript #compression #yui
#php #javascript #сжатие #yui
Вопрос:
Я хочу использовать компрессор YUI для файлов JavaScript, содержащих PHP-код, например:
<?php $include 'headerDefinitions.js.php'; ?>
function hello(name) {
alert('Hello ' name);
}
hello('<?= $_GET["name"] ?>');
Это, очевидно, приводит к некоторым ошибкам при запуске через yui compressor, подобным этому:
java -jar yui-compressor.jar --type js -o target-file.js.php source-file.js.php
поскольку компрессор предполагает, что даже часть PHP является JavaScript. Есть ли способ сжать JavaScript, сохраняя и игнорируя части PHP? Таким образом, приведенный выше пример приводит к:
<?php $include 'headerDefinitions.js.php'; ?>function hello(a){alert('Hello ' a)}hello('<?= $_GET["name"] ?>');
Комментарии:
1.
hello('<?= $_GET["name"] ?>');
— скажи мне, что это была просто шутка.2. Это всего лишь пример, а не реальный код.
3. Тогда все пользователи могут спать спокойно :).
4. Я бы никогда не осмелился поделиться реальным кодом, который выглядел бы так 😉
Ответ №1:
Это не сработает. Вы должны определить все свои функции в простых файлах .js, и тогда все динамические значения или вызовы функций будут на вашей PHP-странице. Помимо разрешения сжатия, это позволит вашим .js файлам правильно кэшироваться браузером.
Ответ №2:
Чтобы ответить самому:
ответ джигги по отделению JavaScript от PHP, вероятно, самый понятный, и ему следует следовать, когда это возможно. Но иногда это невозможно. В моем случае я не могу разделить PHP и JavaScript, не потратив огромное количество времени (это старый и большой проект).
В любом случае, YUI Compressor не удаляет комментарии JavaScript, начинающиеся с /*!
, поэтому ключевым моментом является окружение PHP-кода блоком комментариев, подобным этому:
/*!
<?php $include 'headerDefinitions.js.php'; ?> */
function hello(name) {
alert('Hello ' name);
}
hello('<?= $_GET["name"] ?>');
Вот и все. При просмотре в браузере будет пустой блок комментариев, но им можно пренебречь или заполнить некоторой информацией об авторских правах.
PHP-код в строках JavaScript не требует дополнительного внимания, поскольку они (очевидно) остаются нетронутыми в процессе сжатия:
var myString = '<?= $_GET["name"] ?>';
изменять не нужно. Вам нужно только позаботиться о том, чтобы не использовать одинарные или двойные кавычки как для объявления строки JavaScript, так и для строк в коде PHP.