2010-02-24 3 views
6

Мы создали так называемое одностраничное веб-приложение (одна страница html + ajax)
В погоне за бритьем, как можно больше http-звонков, мы связали JS и CSS в 2 файлах.Одностраничные веб-приложения и встроенные javascript и CSS

Тем временем мы смотрели на то, как Google Buzz для мобильных построен, и есть некоторые интересные моменты:

  • рядный SCRIPT и СТИЛЬ
  • без внешних JS и CSS
  • данные: изображения в CSS вместо url (...)

Таким образом, мы пошли дальше и «вложили» 2 файла JS и CSS в теги SCRIPT и STYLE. Удаление 2 драгоценных http-звонков.

Кто-нибудь испытал некоторые неприятности, делающие это на настольных браузерах?

Я не пытаюсь открыть религиозные дебаты о unobtrusivity;) Это о производительности, сетевых задержек мобильных страниц и т.д ...

+0

Обратите внимание, что IE не поддерживает 'data:' URL – SLaks

+0

IE8 поддерживает его. – Mic

+0

Так было ли это на самом деле вопрос или просто просьба подтвердить то, что вы на самом деле верили? – Tom

ответ

2

Никогда. Поместите их в html-голову, чтобы они загрузили сначала и не волновались.

+0

Заинтригованный всеми этими разговорами, я снова Прочитайте страницы YSLOW, и они говорят, что сокращение количества звонков на YouTube является самым значительным улучшением для ваших посетителей в первый раз и 40-60% людей, которые приходят с пустым кешем на вашем сайте. Они также имеют встроенный и внешний JS/CSS-абзац, который, по-видимому, пользуется популярностью в случае приложений на одной странице. http://developer.yahoo.com/yslow/help/index.html – Mic

+0

@Mic Интересно. Я определенно понимаю ваши аргументы - я просто думаю, что важно иметь в виду, что то, что работает в Google, не всегда будет работать для всех остальных. Но если он работает в вашем случае, тогда здорово. – Skilldrick

0

Inlining и связанные с CSS и файлы сценариев эквивалентны. Нет никакой разницы, кроме HTTP.

+1

Кроме сохранения спагетти. – Tom

+1

И кеширование (как упоминалось в другом месте) – cjk

+0

@Tom. Если у вас уже есть скрипт, который связывает файлы JS/CSS, добавление логики для inline их довольно просто. – Mic

0

Является ли производительность проблемой в настоящее время? То, что Google делает для поддержки 100 пользователей одновременных пользователей, не обязательно то, что вы должны делать. Мне было намного проще поддерживать код, когда такие вещи, как CSS и JavaScript, хранятся в отдельных файлах include. Я только нарушаю то, что считаю хорошей практикой кодирования, когда есть веская причина. Трудно представить, что одностраничное приложение убивается трафиком для двух файлов include, которые будут кэшироваться браузерами пользователей после первого использования.

+0

И ваши затраты на пропускную способность растут, так как они больше не будут использовать кешированные css, js или изображение и вместо этого загружать все эти данные снова и снова. – CaffGeek

+0

Даже если у вас есть 2 пользователя, влияние, которое вы оставляете, если у вас есть действительно быстрое приложение бесценно. Особенно на мобильных телефонах и соединениях с высокой задержкой. – Mic

+0

@chad, встроенные файлы находятся на странице html, которая кэшируется – Mic

2

Практически никто не должен иметь дело с трафиком Google. Я бы сказал, что практически никогда не стоит следовать рекомендациям Google по оптимизации, потому что они просто не применяются в реальном мире.

+0

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

+0

Да, но вид оптимизаций Google вообще не будет заметным. Если Google урезает 0,5% от использования процессором каждого поиска, они могут привести в действие небольшую страну с электричеством, которое они сохранили (я это сделал). 0.5% не повлияет на ваш пользовательский интерфейс. – Skilldrick

+0

Вводя в строение 2 файла, сделал заметную разницу во времени ответа, особенно на мобильном телефоне. Так что да, это пользовательский опыт. – Mic

4

Здесь стоит отметить, что встроенный CSS < style/> блокирует связанные CSS файлы CSS при возникновении конфликта.

Например

<style type="text/css"> 
    div .whiteBG { 
    background-color: #fff; 
    } 
</style> 

козыри связанный файл CSS, содержащий

div .whiteBG { 
    background-color: #ccc; 
    } 

даже если связанные файлы называются последним.

+0

Это интересно, даже если вы ставите! Но так как мы удалили все внешние CSS, мы можем избавиться от этой потенциальной проблемы. – Mic

+1

@ MIC: Нет, это не то, что я сказал. Для одинаково взвешенных селекторов рендерер предпочтет встроенный внешний. Если у вас есть важное значение для обоих, встроенный все еще выигрывает. – Robusto

0

Я думаю, что вы уже смотрите на то, что никто не закодировал вывод, который вы видите с помощью системы Google Buzz или Gmail. Они зависят от очень сложной системы, которая построила на Python и C, чтобы скомпилировать исходный код и сделать его очень дружелюбным к тому, что у них есть доморощенная система «push».

Я не думаю, что вы должны быть так же обеспокоены, как вывод состоит из нескольких запросов, я думаю, что эта проблема является второстепенной для возможности создания и развертывания вашего приложения. Позже мы сосредоточимся на том, чтобы полностью использовать JS и CSS в голове, поскольку это можно сделать прагматично при развертывании.

+0

Источники находятся во многих внешних JS и CSS, это просто, когда мы связываем их (автоматически со сценарием), что мы добавили простой дополнительный шаг. – Mic