Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Альтернатива eval
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Альтернатива eval

Страниц (1): [1]
 

1. Pavelbeginner - 20 Января, 2014 - 13:21:53 - перейти к сообщению
1) Доброго времени суток. Идея в следующем: на клиенте js-ом хочу определять какие скрипты должны присутствовать на странице и подгружать эти скрипты и выполнять.
Делал это следующим образом - определял какие скрипты нужны, ajax-ом подгружал их, затем вставлял в eval и выполнял. Все хорошо. Затем узнал из кучи статей, что eval - это зло, он долго выполняется, да и вообще просто плохо.
В таком случае какая существует альтернатива eval-у?

Задумка в следующем: например, есть верстка:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <ul class="social">
  3.         ...
  4. </ul>
  5.  


скриптом нахожу, что используется блок social. отправляю запрос на сервер за стилями и скриптами этого блока. Из ответа вставляю стили на страницу, а скрипт вставлял в eval. Для чего это нужно? Во-первых хотел получить автоматизацию, не надо больше париться какие стили и какой js нужно подключать на страницу - все подгружается автоматом. Во-вторых меньше размер русурсов. То есть, если раньше стили были все в одном файле здоровенном и на текущей открытойстранице могли использоваться лишь 5% от всех стилей, то сейчас подгружаются файлы со стилями только используемых блоков на странице.

2) может вы знаете аналоги подобные, реализующие данный функционал?

Спасибо.
2. esterio - 20 Января, 2014 - 13:32:53 - перейти к сообщению
CODE (javascript):
скопировать код в буфер обмена
  1. var script = docu,ent.createElement('script');
  2. script.setAttribute('src', src);
  3. document.body.appendChild(script);

как-то так
(Добавление)
ну а в общем сама идея плохая
3. Pavelbeginner - 20 Января, 2014 - 13:50:47 - перейти к сообщению
esterio пишет:
CODE (javascript):
скопировать код в буфер обмена
  1. var script = docu,ent.createElement('script');
  2. script.setAttribute('src', src);
  3. document.body.appendChild(script);

как-то так
(Добавление)
ну а в общем сама идея плохая


а подгружаемый файл стилей будет отрабатывать после того как создастся?
и чем плоха идея?
4. esterio - 20 Января, 2014 - 13:54:53 - перейти к сообщению
лучше на ПХП, если мы знаем какая страница будет отображена, грузим соответсвующий JS и стили если нужно. Например в Yii есть целый класс CClientScript для такых целей
5. Pavelbeginner - 20 Января, 2014 - 14:10:46 - перейти к сообщению
esterio пишет:
лучше на ПХП, если мы знаем какая страница будет отображена, грузим соответсвующий JS и стили если нужно. Например в Yii есть целый класс CClientScript для такых целей

да, было бы здорово, если бы страница была статичной, но в моем случае все страницы сайта подгружаются ajax-ом. На сервере я не могу(конечно могу, но это куча гемороя будет, по-моему) следить за тем какие стили уже у пользователя на странице подгружены, а какие ещё нужно прислать.
А так я на сервере получаю html новой ajax присланной страницы, нахожу какие блоки(блоки в терминологии БЭМ) используются в этой верстке, проверяю не подгружены ли уже стили и js этих блоков и, если не подгружены, отправляю запрос за стилями и js-ом этих блоков.
6. esterio - 20 Января, 2014 - 14:17:47 - перейти к сообщению
почему сразу все не прогрузить
7. Ch_chov - 20 Января, 2014 - 14:20:35 - перейти к сообщению
Pavelbeginner пишет:
То есть, если раньше стили были все в одном файле здоровенном и на текущей открытойстранице могли использоваться лишь 5% от всех стилей, то сейчас подгружаются файлы со стилями только используемых блоков на странице.

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

Pavelbeginner пишет:
может вы знаете аналоги подобные, реализующие данный функционал?

http://requirejs[dot]org
8. Pavelbeginner - 20 Января, 2014 - 14:24:41 - перейти к сообщению
esterio пишет:
почему сразу все не прогрузить
В каком смысле всё? Например, загрузили главную страницу, на ней используются блоки socail, menu.
Затем пользователь может перейти на страницу, наример, page_products. Эта страница аяксом грузится. На этой странице есть блок products. Так вот, зачем мне при первой загрузке странице грузить стили блока products, если пользователь вдруг не захочет заходить на страницу page_products?
(Добавление)
Ch_chov пишет:
Это файл скорей всего сразу попдет в кэш браузера. Поэтому пользователю не придется его скачивать каждый раз
Это я понимаю, но на работе, например, требование грузить на страницу только те стили, которые используются на странице и точка... Когда были статичные странице, то есть с перезагрузкой страницы, использовались бандлы, то есть для каждой страницы на сервере лежал css файл, в котором хранились все используемые на странице стили. Сейчас же, когда встал вопрос сайта без перезагрузки страницы, то есть все страницы грузятся ajax-ом, нужно новое решение.
9. esterio - 20 Января, 2014 - 14:35:19 - перейти к сообщению
затем что Вы больше кода написали на проверкы, нежели все стили из кеша пойдут
10. caballero - 20 Января, 2014 - 14:36:48 - перейти к сообщению
на вашем месте самое лучшее решение смеить работу. Когда у манагеров вывернуты мозги только и будете бегать по форумам как реализовать очередное идиотское требование
11. nerv - 22 Января, 2014 - 19:47:23 - перейти к сообщению
Pavelbeginner пишет:
В таком случае какая существует альтернатива eval-у?


но ты занимаешься ерундой

esterio пишет:
почему сразу все не прогрузить

ты действительно не знаешь почему?)

Pavelbeginner пишет:
2) может вы знаете аналоги подобные, реализующие данный функционал?

читай на хабре про AMD

 

Powered by ExBB FM 1.0 RC1