Jump to content

Recommended Posts

если я правильно понял смысл вашего велосипеда, чисто теоретически, есть вероятность что два пользователя с минимальной задержкой зашли на сайт и один из них получит не целый файл?

Edited by DaVinci
Link to post
Share on other sites
  • Replies 52
  • Created
  • Last Reply

Top Posters In This Topic

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

Edited by DaVinci
Link to post
Share on other sites
все, вижу, вы вообще не сохраняете результат в файл - все стили собираются в одном запросе. ну это ведь жесть))

Жесть с точки зрения читаемости кода, с точки зрения построения сайта вполне хорошо. Все стили в своих файлах.

Можно заморочиться с хэшем, но я не вижу смысла, это совсем мало что изменит.

 

если я правильно понял смысл вашего велосипеда, чисто теоретически, есть
вероятность что два пользователя с минимальной задержкой зашли на сайт и
один из них получит не целый файл?

Не думаю, каждый получит полноценный файл.

Link to post
Share on other sites

Почему? у вас этот ксс файл лежит там же откуда и идёт импортирование, имя файла есть, так почему ему не подключиться?

 

потому что склеенный файл будет примерно иметь вид:

содержимое general.css
содержимое libs.css
содержимое animate.css
содержимое adaptive.css с строкой @import

так вот тут import просто будет ошибкой, а не импортируемыми стилями. Потому что он будет работать только если окажется перед содержимым general.css. И это вполне критично! нельзя импортировать не гугл фонтс не другие css. Тут можно только опять править исходный css путем перемещения кода по файлам или прописями их в php. 

Link to post
Share on other sites
так вот тут import просто будет ошибкой, а не импортируемыми стилями.
Потому что он будет работать только если окажется перед
содержимым general.css. И это вполне критично! нельзя импортировать не
гугл фонтс не другие css. Тут можно только опять править исходный css
путем перемещения кода по файлам или прописями их в php.

Да, согласен. Я просто в 99.9% не использую import в ксс поэтому не знал про тонкость что его надо подключать только в начале объявления таблицы стилей.

Link to post
Share on other sites

 

все, вижу, вы вообще не сохраняете результат в файл - все стили собираются в одном запросе. ну это ведь жесть))

Жесть с точки зрения читаемости кода, с точки зрения построения сайта вполне хорошо. Все стили в своих файлах.

Можно заморочиться с хэшем, но я не вижу смысла, это совсем мало что изменит.

 

если я правильно понял смысл вашего велосипеда, чисто теоретически, есть
вероятность что два пользователя с минимальной задержкой зашли на сайт и
один из них получит не целый файл?

Не думаю, каждый получит полноценный файл.

 

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

Edited by DaVinci
Link to post
Share on other sites
с точки зрения кода там все нормально. посмотрите скорость загрузки
вашего файла при живой генерации и отдачу того же файла статично, ну
почему то я уверен что разница будет глобальной

Время генерации файла: 0.034197092056274

Берем что время отдачи статики = 0, то получаем что разница 0.03 сек.

Среднее значение от 0.033 до 0.035 при обновлении по CTRL+F5 (сброс кэша)

Edited by a13x
Link to post
Share on other sites

 

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

Время генерации файла: 0.034197092056274

Берем что время отдачи статики = 0, то получаем что разница 0.03 сек.

Среднее значение от 0.033 до 0.035 при обновлении по CTRL+F5 (сброс кэша)

 

а в чем тогда плюсы по сравнению с моим методом?

Ни в скорости ни в удобстве (ведь нужна постоянная адаптации css файлов и определенные условия)? 

если есть негатив к vqmod - то я уже писал выше.

Переделать не составит труда, а народу может так лучше будет. Появится интерес.

То я много чего через vqmod делаю, поэтому особого желания на инструкцию переделывать - нет

Link to post
Share on other sites

 

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

Время генерации файла: 0.034197092056274

Берем что время отдачи статики = 0, то получаем что разница 0.03 сек.

Среднее значение от 0.033 до 0.035 при обновлении по CTRL+F5 (сброс кэша)

 

если учесть что, к примеру, главная страница демо симплы генерируется за 0.04 то 0.03 только для css это очень критично

 

http://prntscr.com/i8ul1z

Link to post
Share on other sites
если учесть что, к примеру, главная страница демо симплы генерируется за 0.04 то 0.03 только для css это очень критично

думаю у вас какой нить кривой запрос из базы что-то типа FIND_IN_SET будет дольше обрабатываться, чем чтение локального файла :lol: и я уже молчу про доп. запросы к css или js, которые по времени также обрабатываются.

 

а в чем тогда плюсы по сравнению с моим методом?

Для меня? В простоте, в скорости (не по сравнению с вашим т.к. тут одинаково будет), в удобстве. Для вас не знаю :lol: Вы написали свой автомобиль, он вам нравится, я написал свой велосипед и он мне нравится. Я лишь сказал что можно сделать всё тоже самое используя пару строк на пхп.

Edited by a13x
Link to post
Share on other sites

 

если учесть что, к примеру, главная страница демо симплы генерируется за 0.04 то 0.03 только для css это очень критично

думаю у вас какой нить кривой запрос из базы что-то типа FIND_IN_SET будет дольше обрабатываться, чем чтение локального файла :lol: и я уже молчу про доп. запросы к css или js, которые по времени также обрабатываются.

 

а в чем тогда плюсы по сравнению с моим методом?

Для меня? В простоте, в скорости (не по сравнению с вашим т.к. тут одинаково будет), в удобстве. Для вас не знаю :lol: Вы написали свой автомобиль, он вам нравится, я написал свой велосипед и он мне нравится. Я лишь сказал что можно сделать всё тоже самое используя пару строк на пхп.

 

ну чего одинаково в скорости - если у меня отдается файл на прямую без php?

 

В простоте - тоже спорю с вами. ведь вот весь код для вывода сss:

{css id="libs" include=[
"design/{$settings->theme}/css/bootstrap.css",
"design/{$settings->theme}/css/animate.css",
"design/{$settings->theme}/css/style.css"
]}{/css}
{stylesheet}

Что бы добавить файл нужно добавить 1 строку в массив. И не нужны никакие адаптации css. Скрипт все сам сделает и import перенесет и путь к прикладным сменит. 

 

В размере файлов - у меня они тоже больше сожмутся.

 

Ну в общем дело ваше. Делайте как вам удобней... 

Link to post
Share on other sites

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

P.s. если бы ваш плагин работал без VQMOD, бесспорно это было бы лучшее решение!

Edited by a13x
Link to post
Share on other sites

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

P.s. если бы ваш плагин работал без VQMOD, бесспорно это было бы лучшее решение!

я вам предлагал переписать на не vqmod версию...

Что касается замеров скорости - то ошибаетесь.

Думаете я делал и не обращал внимание на скорость? 

 

чистая 2.3.7 версия 

чистая 2.3.7 + vqmod 2.8

все версии без сторонних модулей 

 

главная страница: 

 

чистая симпла:

http://joxi.ru/Vm6KoBkhx9Opy2?d=1 - 0.073

 

vqmod: 

http://joxi.ru/RmzBZGvtWzqexm?d=1 - генерация кэша vqmod (без smarty) 0.19

http://joxi.ru/VrwydvpiKQpeP2?d=1 - повторная загрузка уже с кэшем 0.076

 

страница товара: 

 

чистая симпла:

http://joxi.ru/52aXl6JiGRL7bm?d=1 - 0.09

 

vqmod: 

http://joxi.ru/EA4doBaiDzLEVA?d=1 - если генерируется кэш 0.16

http://joxi.ru/n2YLx9Yij9Xzxm?d=1 - повторная загрузка 0.095

 

 

как видно по таймингам задержка примерно как на вашем css скрипте 

 

если есть желание - то можете сами погонять

http://demo.tmp.pp.ua/vqmod/

admin

admin

 

 

по опенкарту

simpla это совсем другой движок и другое количество файлов. И очень многое зависит от самих модулей. Если бы данный подход был так ужасен - то с чего бы его внедряли в основу opencart 2 (ocmod)? 

Что разработчики opencart настолько не дружат с головой? 

 

любая модульность будет излишней нагрузкой. Если разрабатывается огромный проект с 50к товаров и тд - то я бы не сильно советовал внедрять туда vqmod. Потому что с большими проектами каждая доля секунды на счету. Там и стандартная симпла имеет целую кучу недочетов что замедлит работу.

Edited by yr4ik
Link to post
Share on other sites
  • 7 months later...

Версия 1.2

 

+ добавлены новые параметры minify и combine  в регистрацию js/css (работают при render=true)

+ добавлена поддержка синтаксиса less. Активируется при регистрации с параметром less=true

 
скачать и подробнее описание в шапке
 
 
Также залил демонстративный шаблон на github
Edited by yr4ik
Link to post
Share on other sites

not vqmod версия
 
 
1) Папки из архива распаковываем в корень сайта 
 
2) api/Simpla.php после строки: 

'design'     => 'Design',

добавляем: 

#SMARTY_MINIFY
        'js'     => 'Javascript',
        'css'     => 'Stylesheet',
#SMARTY_MINIFY


3) view/View.php после строки:

// Настраиваем плагины для смарти

добавляем: 

#SMARTY_MINIFY
            // функции для работы с js 
            $this->design->smarty->registerPlugin('block', 'js',        array($this, 'add_javascript_block'));
            $this->design->smarty->registerPlugin('function', 'unset_js',        array($this, 'unset_javascript_function'));
            $this->design->smarty->registerPlugin('function', 'javascript',        array($this, 'print_javascript'));
        
            // функции для работы с css 
            $this->design->smarty->registerPlugin('block', 'css',        array($this, 'add_stylesheet_block'));
            $this->design->smarty->registerPlugin('function', 'unset_css',        array($this, 'unset_stylesheet_function'));
            $this->design->smarty->registerPlugin('function', 'stylesheet',        array($this, 'print_stylesheet'));
#SMARTY_MINIFY 

 

в том же файле ПЕРЕД строкой: 

public function get_discounted_products_plugin($params, &$smarty)

добавляем: 

#SMARTY_MINIFY
    /*
    * Функции для работа с файлами javascript
    * Регистрация  js фал(а|ов) или кода
    */
    public function add_javascript_block($params, $content, $smarty, &$repeat)
    {
        if(!isset($params['id']) || $repeat || (empty($content)) && empty($params['include']))
            return false;


        if(!isset($params['priority']))
            $params['priority'] = 10;
            
        if(!empty($params['include']))
            $this->js->add_files($params['id'], $params['include'], $params['priority']);
        
        if(!empty($content))
            $this->js->add_code($params['id'], $content, $params['priority']);
            


        if(!empty($params['render']))
        {
            if(!isset($params['minify']))
                $params['minify'] = null;    
            
            if(!isset($params['combine']))
                $params['combine'] = true;
            
            return $this->js->render($params['id'], $params['minify'], $params['combine']);
        }
    }    
    /*
    * Отмена регистрации js фал(а|ов) или кода
    */
    public function unset_javascript_function($params, $smarty)
    {
        if(!isset($params['id']))
            return false;


        $this->js->unplug($params['id']);
    }
    /*
    * Вывод упакованого js файла 
    */
    public function print_javascript($params)
    {
        if(!isset($params['id']))
            $params['id'] = null;
            
        if(!isset($params['combine']))
            $params['combine'] = true;
        
        if(!isset($params['minify']))
            $params['minify'] = null;
    
        return $this->js->render($params['id'], $params['minify'], $params['combine']);
    }    
    
    /*
    * Функции для работа с файлами стилей
    * Регистрация  css фал(а|ов) или кода
    */
    public function add_stylesheet_block($params, $content, $smarty, &$repeat)
    {
        if(!isset($params['id']) || $repeat || (empty($content)) && empty($params['include']))
            return false;


        if(!isset($params['priority']))
            $params['priority'] = 10;
        
        if(!isset($params['less']))
            $params['less'] = false;
            
        if(!empty($params['include']))
            $this->css->add_files($params['id'], $params['include'], $params['priority'], $params['less']);
        
        if(!empty($content))
            $this->css->add_code($params['id'], $content, $params['priority'], $params['less']);


        if(!empty($params['render']))
        {
            if(!isset($params['minify']))
                $params['minify'] = null;    
            
            if(!isset($params['combine']))
                $params['combine'] = true;
            
            return $this->css->render($params['id'], $params['minify'], $params['combine']);
        }
    }    
    /*
    * Отмена регистрации css фал(а|ов) или кода
    */
    public function unset_stylesheet_function($params, $smarty)
    {
        if(!isset($params['id']))
            return false;


        $this->css->unplug($params['id']);
    }
    /*
    * Вывод упакованого css файла 
    */
    public function print_stylesheet($params)
    {
        if(!isset($params['id']))
            $params['id'] = null;
            
        if(!isset($params['combine']))
            $params['combine'] = true;
        
        if(!isset($params['minify']))
            $params['minify'] = null;
    
        return $this->css->render($params['id'], $params['minify'], $params['combine']);
    }
    
#SMARTY_MINIFY

 

4) в config/config.php после

[smarty]

добавляем:

minify_js    = false                ; сжимать javascript (true=да, false=нет)
minify_css    = false                    ; сжимать css (true=да, false=нет)
minify_gzip_level    = 0                    ; уровень сжатия (gzip) от 0 до 9
minify_cache_dir    = cache/minify/    ; папка для кеширования

 
5) в .htaccess в корне файла после  

RewriteEngine on

добавляем:

#SMARTY_MINIFY
<FilesMatch "(js|css).gz[1-9]$">
	<IfModule mod_headers.c>
		Header set Content-Encoding: gzip
	</IfModule>
    <FilesMatch "css.gz[1-9]$">
        ForceType text/css
    </FilesMatch>
    <FilesMatch "js.gz[1-9]$">
        ForceType text/javascript
    </FilesMatch>
</FilesMatch>


RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^cache/minify/(.+).gz([1-9])$ resize/gzip.php [L,END]

#SMARTY_MINIFY
Edited by yr4ik
Link to post
Share on other sites

5) строка

Header set Content-Encoding: gzip

по-моему, лишняя.

Во всяком случае, у меня с ней ошибка Internal Server Error, а без нее работает...

 

Мне кажется или у вас Gzip не включен вот и ошибку бьет?

Link to post
Share on other sites

5) строка

Header set Content-Encoding: gzip

по-моему, лишняя.

Во всяком случае, у меня с ней ошибка Internal Server Error, а без нее работает...

 
Данная строка добавляет заголовок что файл сжат при помощи gzip. Если ее убрать и включить сжатие - то ресурсы могут не открываться. 
можно попробовать заменить через какие то другие директивы. Но для этого мне нужно знать что у вас за сервер
 
..............
 
возможно отсутствует mod_headers.c
проверить можно обернув данную строку условием
<IfModule mod_headers.c>
	Header set Content-Encoding: gzip
</IfModule>

Если ошибка исчезнет - значит модуль отсутсвует

 
 
Edited by yr4ik
Link to post
Share on other sites

Версия 1.3


 


небольшой апдейт для устранения багов


  • переписан механизм кэширования less (теперь и импортированные, в основной файл, less - проверяются на актуальность) 
  • отключен импорт в основной css, прикладных файлов, размером до 5кб . Поскольку штатной библиотекой пока не возможно проверять их актуальность. В дальнейшем, как будет нужда, поправлю библиотеку и верну эту настройку

 


Все инструкции и файлы находятся в шапке


Edited by yr4ik
Link to post
Share on other sites
  • 8 months later...

А как сделать отложенную или параллельную загрузку?
 

<script type="text/javascript" src="https://www.unidn.com/s/i.js" defer></script>

чтобы добавлялся тэг «defer» ?

Link to post
Share on other sites
  • 9 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...