LINUX.ORG.RU

Что быстрее?

 , , ,


1

2

Всем доброго времени суток!

Так уж получилось, что в последнее время много приходится писать на стороне клиента (javascript). До сегодняшнего дня активно использовал библиотку jquey и горя не знал. Тут тебе и удобные селекты, и $.ajax(), и $.each(), и куча визуальных эффектов и много всего другого.

Не так давно я стал замечать некоторые тормоза своего приложения. Мало того, что приходится часто обращаться к серверу и вытягивать огромные коллекции данных, так еще интерфейс еле ворочается! Но если с оптимизацией серверной логики все более-меннее понятно, то как можно оптимизировать клиентскую часть мне пока еще не очень ясно.

Немного погуглив, узнал, что многие веб-девелоперы, если того не требуют обстоятельства, стараются использовать нативный javascript-код, вместо каких-либо библиотек, подобных jquery. Посему, у меня вопрос, так сказать, к знатокам «клиентского веба», сильно ли можно выйграть в производительности, использую средства «чистого» js, без использования сторонних оберток наподобие JQuery?

На сколько сильным будет прирост в производительности «рутинных» операций, например: селектов, отправки ajax-запросов, парсинга json, обход свойств объектов, поиск в массиве и т.д. ?

Ответ на: вот живой пример от heilkitty

Можно в eval зафигачить, например, document.location = «http://мой-фишинговый-сайт.рф/»

Да, в тот самый момент, при подмене, перебросит на фиш. И увидит это только сам какер. Где тут хотябы CSRF? А нету, т.к. область применения совершенно иная.

Да — eval тупо хавает намного больше ресурсов. А еще раньше браузеры встретив ошибку, далее не выполняли сценарий и/или вообще другой скрипт на той же странице, ослота 7-8 по прежнему так делает довольно часто. Но тут нас спасает try { ... }

Плюс смотри внимательно - eval('(' + str + ')') увидел вторые скобочки, да? Догадайся почему.

З.Ы.: Предостережение не юзать eval из разряда: «Одень на голову кастрюлю чтоб не замерзнуть, когда в африку собрался»

deep-purple ★★★★★
()
Ответ на: вот живой пример от heilkitty
> eval('(console.log(1),  console.log(2))');

С такой подачи:

> (console.log(1), console.log(2));
Вообще небезопасно js использовать, что уж там eval. Ага — какеры локалхоста, да ))

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Норкоманище. А теперь представь, что ты получаешь свой JSON извне, рекламу, там или ещё какую информацию. А поскольку всем похеру, то внутри внезапно оказывается «няша, отдай мне все свои куки». И тут тебя ничего не спасает. Скобки ничего тут не изменят.

Deleted
()
Ответ на: комментарий от Deleted

Любой сторонний сервис НЕ может кроссдоменно просто так отдать JSON(p), ведь на клиентской стороне УЖЕ должен быть подключен сторонний скрипт, в котором может быть в наличии вообще любая закладка. И сторонний сервис вообще понятия не имеет какие у тебя скрипты на странице подключены, и тем более не будет смотреть что именно в них происходит и искать там дыры.

Наш eval находящийся где-то в контексте родной ф-циональности вообще не будет задействован. Ты всегда пишешь для чужих сервисов свои апи-велосипеды? Погромист штоле? Ты подключаешь на страницу всякие левые скрипты? ССЗБ штоле?

Что можно делать с пришедшими чужими данными? Ответ «все что угодно» не устроит. Почему? Да потому, что с чужими данными никак не «можно», а лишь немножко нужно делать ТОЛЬКО то, что требуется. Перебрал данные, вывел. О каком интерактиве в контексте чужих данных может идти речь? Если сторонний сервис интерактивен, то он и предоставляет некую либу, где он сам хозяин, а ты только дергаешь прозрачные для тебя методы.

Ведешь себя как ребенок, которому родитель вбил в голову, что пИсать в кровать нельзя, при этом объяснений родитель не предоставил, а ты, основываясь лишь на авторитете родителя, запомнил эту «истину».

Первый всплывший в памяти СТОРОННИЙ сервис который юзает в своем контексте eval — гуглокарты. Идиоты, да? Мнения «нельзяписов» не послушали. Именно благодаря тому, что внутри геообъектов есть методы, ты не сможешь (а в контексте JSON.*() вообще не сможешь) кроссбраузерно (де)сериализовать и кешировать ответы апи гуглокарт, и будешь вынужден ходить каждый раз.

З.Ы.: Да, я не защищаю eval, я говорю что, во первых - ослик 7 (не надо про мамонтов, они еще живы, смирись), иначе никак, во вторых иногда очень нужно заюзать eval в контексте задачи.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Ты таки упорот. JSON данные с внешнего хоста это просто текст с определённым майм-типом. Там в коде выше стоит eval со скобками. Если тебе всё ещё не понятно, почему это проблема, то я очень надеюсь, что ты вебом не занимаешься.

Deleted
()

Тред не читал. DOM сильно тормозит. В большинстве случаев лечится использованием reactjs.

bj
()
Ответ на: комментарий от Deleted

Ты еще и майм-тайп сюда приплел? Есть куча текстов с разными майм-тайпами. Ну попробуй ответь text/plain который по структуре жсон — оно схавает. Майм-тайп не аргумент.

Мне не понятно )) Объясняй. Я просил живой пример, а ты написал хрень в кансольке вида «какер локалхоста». Нужны аргументы, а не «ты упоролся». Пруф или не было. Не забудь еще подумать как именно ты собрался получать «злой» жсон с ЧУЖОГО хоста (привет Same-origin policy).

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Мне 10 раз повторить? Ты eval'ить будешь внешние данные. Сегодня тебе туда приходят обычные данные, а завтра в него засунут с той стороны код и все твои пользователи окажутся в заднице, а ты ничего не заметишь.

Deleted
()
Ответ на: комментарий от Deleted

Сегодня тебе туда приходят обычные данные, а завтра в него засунут с той стороны код

В таком случае ССЗБ начинается не с места где ты юзаешь eval, а с момента подключения говносервиса.

deep-purple ★★★★★
()
Ответ на: комментарий от Deleted

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

deep-purple ★★★★★
()

Не так давно я стал замечать некоторые тормоза своего приложения. Мало того, что приходится часто обращаться к серверу и вытягивать огромные коллекции данных

парсинга json, обход свойств объектов, поиск в массиве и т.д.

Обычно это говорит о том, что ты пытаешься перенести логику из БД в приложение (в данном случае браузер, что ещё хуже). Выгружай на клиента только необходимые данные и жить сразу станет легче.

ya-betmen ★★★★★
()
Ответ на: комментарий от Deleted

так я ж таки не понял же, кто изначально запросил говноданные?

anonymous
()
Ответ на: комментарий от Deleted

в смысле, чтоб говноданные севалить — их надо откуда-то получить.

а чтобы их получить — их должен кто-то запросить.

так вот кто же ж этот негодяй?

anonymous
()
Ответ на: комментарий от Deleted

Ты ничего и не объяснил. И я лично, никогда еще не видел внятного объяснения от кукарекушек, которые утверждают, что использование eval — это уязвимость. Тебе абсолютно правильно сказали, что если ты идиот, и собрался эвалить строки, которые получаешь из сети, то это твой личный диагноз. Но никакого отношения к использованию eval как таковому это не имеет.

anonymous
()
Ответ на: комментарий от Deleted

Вон виш, анон то же что и я говорит - ССЗБ начинается когда ты юзаешь говносервис, а не когда ты евалишь данные.

deep-purple ★★★★★
()
Ответ на: комментарий от anonymous

Ты внешние данные ниоткуда не получаешь никогда, админ локалхоста?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.