Работаю на проекте, который имеет фреймовую структуру. После сегодняшней ночи могу сказать, что фреймы это не так уж и плохо :)
Утрированно имеем такую модель:
В каждом фрейме имеем несколько стилей и много яваскрипта.
Положим что однотипные страницы (основной контент фрейма main) выглядят так:
Стили минимизированы и запакованы. Казалось ускорять уже некуда.
Первое что приходит на ум — советы по оптимизации Souders'а. Динамическое создание тега . Только делать это на каждой странице я не хочу. Должен быть метод проще, это ведь фреймы.
После копания в доме находятся следующие свойства:
document.styleSheets[].cssRules[].cssText — лиса
document.styleSheets[].rules[].cssText — осел
Поехали.
1е что надо сделать — вызвать какой-либо метод в паренте при загрузке страницы в фрейме, убрать загрузку css
и реализовать этот метод
А теперь все в кучу:
После таких манипуляций большую часть CSS мы грузим один раз, а время инициализации каждой новой страницы меньше.
Реализация динамического тега link оказалась не такой примитивной, с него и начну это пятничное утро :)
Описанное выше — идея, а не готовая реализация, хотя в лисе работает (код более сложный)
Утрированно имеем такую модель:
<html> <head> <frameset rows="70, *"> <frame name="top" src="frame.html"> <frameset cols="150, *"> <frame name="left" src="frame.html"> <frame name="main" src="frame.html"> </frameset> </frameset> </head> </html>
В каждом фрейме имеем несколько стилей и много яваскрипта.
Положим что однотипные страницы (основной контент фрейма main) выглядят так:
<html> <head> <link rel="stylesheet" href="style.css"> </head> <body> </body> </html>
Стили минимизированы и запакованы. Казалось ускорять уже некуда.
Первое что приходит на ум — советы по оптимизации Souders'а. Динамическое создание тега . Только делать это на каждой странице я не хочу. Должен быть метод проще, это ведь фреймы.
После копания в доме находятся следующие свойства:
document.styleSheets[].cssRules[].cssText — лиса
document.styleSheets[].rules[].cssText — осел
Поехали.
1е что надо сделать — вызвать какой-либо метод в паренте при загрузке страницы в фрейме, убрать загрузку css
<html> <head> <script>parent.bindMe(this)</script> </head> <body> </body> </html>
и реализовать этот метод
function bindMe(obj) { AppendInlineCss(obj.document.getElementsByTagName('head')[0], cssText) }
А теперь все в кучу:
<html> <head> <link rel="stylesheet" href="style1.css"> <link rel="stylesheet" href="style2.css"> <link rel="stylesheet" href="style3.css"> <script> function AppendInlineCss(obj, css) { obj.appendChild(function(){ var inline = document.createElement('style') inline.type = 'text/css' inline.textContent = css return inline}()) } function GatherCssText() { var cssText = '' for(var i = 0, cnt = document.styleSheets.length; i<cnt; i++ ) { var rules = document.styleSheets[i].cssRules || document.styleSheets[i].rules for( var j = 0, c2 = rules.length; j<c2; j++ ) { cssText += rules[j].cssText } } return cssText } var cssText = GatherCssText() function bindMe(obj) { AppendInlineCss(obj.document.getElementsByTagName('head')[0], cssText) } </script> <frameset rows="70, *"> <frame name="top" src="frame.html"> <frameset cols="150, *"> <frame name="left" src="frame.html"> <frame name="main" src="frame.html"> </frameset> </frameset> </head> </html>
После таких манипуляций большую часть CSS мы грузим один раз, а время инициализации каждой новой страницы меньше.
Реализация динамического тега link оказалась не такой примитивной, с него и начну это пятничное утро :)
Описанное выше — идея, а не готовая реализация, хотя в лисе работает (код более сложный)