Минимизируйте HTML, сомнения и вопросы - PullRequest
0 голосов
/ 07 октября 2010

Минимизация html - единственный раздел на Скорость страницы Google , где еще есть возможности для улучшения.

Мой сайт весь динамический, а HTML уже Deflated, поэтому нет никаких причин оказывать дополнительное давление на сервер (я не хочу минимизировать страницы в реальном времени перед отправкой).

Что я мог сделать, так это свернуть файлы шаблона. Мои файлы шаблонов представляют собой смесь PHP и HTML, поэтому я придумала некоторый код, который, на мой взгляд, довольно безопасен, но хотел бы, чтобы сообщество пересмотрело.

// this will loop trough all template files
// php is cleaned first so that line-comments will not interfere with the regex
$original = file_get_contents($dir.'/'.$file);
$php_clean = php_strip_whitespace($dir.'/'.$file);
$minimized = preg_replace('/\s+/', ' ', $php_clean);

Это сделает мои файлы шаблонов в виде одного очень длинного файла, чередующегося с некоторыми местами, в которые вставляется содержимое БД. Исходный код главной страницы Google более или менее похож на то, что я получаю, поэтому мне интересно, следуют ли они подобному подходу.

Вопрос 1: Есть ли у вас потенциальные проблемы?
Вопрос 2: Есть ли что-нибудь лучше (эффективнее для этого)?

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

Редактировать: Учтите, что файлы шаблона будут развернуты при развертывании. Поскольку файлы CSS и Javascript минимизируются и сжимаются с помощью YUI Compressure and Closure, файлы шаблона будут минимизированы аналогично при развертывании. Не по запросу клиента.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 19 октября 2010

Собственные Google Closure Templates (Soy) по умолчанию удаляет пробелы в конце строки, и дизайнер шаблонов явно вставляет пробел, используя {sp}.Вероятно, это недостаточно веская причина для перехода с PHP, но я просто хотел обратить на это внимание.

Кроме того, следует понимать, что HTML 4 позволяет исключать некоторые теги, как рекомендованоДокументация по скорости страницы при минимизации HTML (http://code.google.com/p/page-speed/wiki/MinifyHtml). Вы можете исключить </p>, </td>, </tr> и т. Д. Для получения полного списка элементов, для которых можно пропустить конечный тег, найдите «- O» вHTML 4 DTD (http://www.w3.org/TR/REC-html40/sgml/dtd.html). Вы можете даже полностью опустить теги <html>, <head>, <body> и <tbody>, так как начальный и конечный теги являются необязательными ("O O" в DTD).

Вы также можете опустить кавычки вокруг атрибутов (http://www.w3.org/TR/REC-html40/intro/sgmltut.html#h-3.2.2), таких как id, class (с одним именем класса) и type, которые имеют простое содержимое (то есть соответствует * 1023).*). Для атрибутов, которые имеют одно возможное значение, вы можете исключить значение (например, просто checked вместо checked=checked).

Некоторые люди могут счесть эти советы отталкивающими, потому что мы былив течение многих лет готовиться к предстоящему мируle LALR парсеры для XHTML.Таким образом, такие инструменты, как HTML Tidy Дейва Раггетта, генерируют HTML с соответствующими закрывающими тегами и кавычками вокруг значений атрибутов.Но давайте посмотрим правде в глаза, у всех браузеров уже есть парсеры, которые понимают HTML 4, любой новый браузер будет использовать синтаксический анализатор HTML 5, а не XHTML, и мы должны научиться писать HTML, оптимизированный для размера.

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

1 голос
/ 07 октября 2010

Я думаю, что при таком подходе вы столкнетесь с проблемами со временем загрузки, поскольку вызовы get content, strip whitespace и preg replace будут занимать намного больше времени, чем любая полоса пропускания, которую экономит минимизированный HTML. .

1 голос
/ 07 октября 2010

Пробел может быть значительным (например, в pre элементах).

Когда у меня была особенно большая страница (то есть достаточно большая, чтобы минимизировать HTML), я использовал HTML Tidy и кэшировал результаты.

tidy -c -n -omit -ashtml -utf8 --doctype strict \
    --drop-proprietary-attributes yes --output-bom no \
    --wrap 0
0 голосов
/ 19 октября 2010

Я проводил тесты на всех своих сайтах в течение нескольких недель, и я могу сказать, что этот метод довольно последовательный.Это повлияет только на содержимое шаблона, поэтому существует небольшой риск путаницы с неизвестным <pre> или подобным.

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

Помните, что весь контент, который поступает из базы данных , не будет испытывать какое-либо влияние, поскольку, как сказано выше, он запускается до развертываниятолько для файлов шаблонов.

Метод выглядит достаточно твердым, чтобы передать его в производство.

Если что-то пойдет не так, я опубликую его здесь.

...