Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
авторN - это сколько? при 10 картинках по 5м - страница потребовала 200м. В зависимости от браузера может потребоваться и 400 Мб, и 600 Мб. По крайней мере, в статье на хабре при использовании FileReader объём потребляемой памяти для jpeg-картинок в 10-12 раз превышает размер этих jpeg-файлов (а у вас к тому же картинки занимают место в памяти в двойном, как минимум, размере - при том коде, который вы показали) авторно ни сбоев ни вылетов не было Раз на раз не приходится и наверняка зависит от браузера Лично наблюдал слёты в Safari. В последнем FF генерируются ошибки в логах. Но даже если все современные браузеры в этом плане стали стабильными (не слетают, а просто генерируют ошибки в логах), то нет гарантии, что все корпоративные пользователи будут пользоваться последними версиями браузеров... P.S. Иными словами, если браузер поддерживает URL API , то нет никаких причин отказываться от URL.createObjectURL()/URL.revokeObject.URL() в пользу FileReader . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2017, 18:33 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
В вашем случае по протоколу webSocket нельзя передать объект File вместо Blob ? Т.е. можно только из оперативной памяти передавать данные ? Если можно, то однозначно лучше передавать объект File , а превьюшки генерировать через img.src = URL.createObjectURL() с последующим URL.revokeObjectURL() авторно кто мешает сделать подобный элемент dom, который при окончании работы просто удалится из DOM и освободит ресурсы?Освободит ресурсы, выделенные под DOM-объект, но не освободит ресурсы, выделенные под прочитанный файл (по крайней мере, сразу после удаления DOM-объекта) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2017, 18:33 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02В зависимости от браузера может потребоваться и 400 Мб, и 600 Мб. в моём случае нет необходимости использовать другие браузеры, кроме хрома. корпоративное применение системы позволяет воспользоваться таким преимуществом. Cyrax_02В вашем случае по протоколу webSocket нельзя передать объект File вместо Blob ? Т.е. можно только из оперативной памяти передавать данные ?да. хранение в памяти blob, это не ресурсы dom. поэтому они удаляются сразу. такое чтение reader.readAsArrayBuffer(file) и такое хранение fb['pic' + fb.max] = new Blob([reader.result], {type: "image/jpeg"}); занимают память ровно под размер картинки ну а размер занимаемый под src можно сразу отдать сборщику путём присвоения null. я думаю, что прожорливость не повод для беспокойства. быстродействие имеет больший приоритет. хотя если б удалось добиться решения твоего вопроса - было б несколько лучше. но, порыскав по инету, я не нашёл ничего и это странно. в моём варианте можно воспользоваться и base64 для отображения в src, сократив таким образом количество образов картинок. но потом рередача в текстовом формате base64 или дополнительное преобразование base64 в blob не есть более выйгрышный вариант. ещё раз : при почти нулевой свободной памяти я не увидел больших проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2017, 20:13 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, проверил в мозиле ,опере - 100 картинок держит без проблем.(больше не стал - долго ждать освобождения свопа) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2017, 20:52 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, мне кажется в той статье не совсем верно показано, что такое занятая память . у него 20 фоток и такие объёмы. я загружаю по 100-400 и нет таких показателей, смотрю диспетчером задач. при наличии свободной памяти - 2гига подимать панику , даже при моём варианте, я не вижу смысла. неужели кто-то допустит загрузку по 100++ фоток? а до 20 - всё прекрасно и замечательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 07:39 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
вадянеужели кто-то допустит загрузку по 100++ фоток? А почему нет? У нас в одном проекте как-то загружали больше 1000 фоток хайрез (по 10+ мб каждая) обследования объектов. При чём делали со слабых компах с маленьким количеством памяти, и никто не жаловался. Потому что мы грузили сразу на сервер и показывали миниатюры с сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 08:15 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
hVosttА почему нет? У нас в одном проекте как-то загружали больше 1000 фоток хайрез (по 10+ мб каждая) обследования объектов. При чём делали со слабых компах с маленьким количеством памяти, и никто не жаловался. Потому что мы грузили сразу на сервер и показывали миниатюры с сервера. это как вариант вполне имеет место быть. ия так тоже делал(правда не для такого количества) но это специфическое, корпоративное использование. у Cyrax_02 , как я понимаю, использование для широкого круга. и ему надо убить одновременно десяток зайцев. я его требования понимаю, поэтому тестирую свой вариант, чтоб найти слабые места. в моей области применения, я таковых не наблюдаю. советую и Cyrax_02 его проверить. интересно услышать отзывы о конкретном использовании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 08:33 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
вадяинтересно услышать отзывы о конкретном использовании. Я в вашу дискуссию не лезу :) Просто меня зацепило вот это: вадянеужели кто-то допустит загрузку по 100++ фоток? Сразу вспоминается боян про «640 кб хватит всем!!!», и я с этим периодически сталкиваюсь, когда кто-то начинает делать скорополительные выводы типа - да кто будет вводить в этом поле больше 100 символов? это же бред? зачем делать проверку? - да кто будет сюда нажимать? никто! не буду обрабатывать. - да кто будет нажимать Back в браузере? покажите этих людей! - да кто будет вводить скрипты и HTML в textarea? это же обычные пользователи, не буду фильтровать! - да кто будет загружать 100++ фоток?... Я хочу акцентировать внимание на том, что программист должен предусматривать все возможные варианты и решать их до того, как проблема наступит, по возможности, а не прикрываться тезисами о том, что типа так делать никто не будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 09:52 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
hVosttЯ в вашу дискуссию не лезу :) Просто меня зацепило вот это: не надо воспринимать это замечание так буквально. :) просто для общественных серверов(на что и ориентирован Cyrax_02 ) возмозможность неограниченной загрузки чревата многими последствиями. умников хватает. в корпоративном секторе - заблаговременно расчитывается и большие объёмы вполне допустимы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 10:35 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
вадя, Если исходить из самого смысла производства ПО: а это прямая или косвенная выгода, то разработчик прежде всего должен заботиться о комфорте пользователя. Пользователь понятия не имеет ни о каком свопе, и если он захочет загрузить 100++ фоток, он их загрузит. Если пот этом он столкнётся с тем, что комп встанет колом, он пошлёт нафиг такой сайт и уйдёт к конкуренту. Такие соображения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 12:18 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
hVosttТакие соображения. дак поэтому я и привожу результаты по загрузке 600 картинок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 12:52 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
вадяhVosttТакие соображения. дак поэтому я и привожу результаты по загрузке 600 картинок Это хорошее дело! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 12:58 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
авторну а размер занимаемый под src можно сразу отдать сборщику путём присвоения null. А вы думаете, сборщик запускается сразу после исчезновения необходимости в хранении некоторых данных в оперативной памяти ? Однозначно нет. Если присвоить ( src = null ), память не освободится. Освободится, только после того, как все превьюшки будут сгенерированы (по моим наблюдениям, через 1-10 сек либо только после закрытия/перезагрузки страницы) авторхранение в памяти blob, это не ресурсы dom. поэтому они удаляются сразу. А кто освобождает память, отведённую под Blob ? Тот же сборщик. А когда запускается сборщик - см. комментарий выше. авторя думаю, что прожорливость не повод для беспокойства. быстродействие имеет больший приоритет. На первом месте всегда находится безсбойность и стабильность работы кода. И если стабильность зависит от прожорливости, то прожорливость выходит вперёд по сравнению с быстродействием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 13:14 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
авторв моём варианте можно воспользоваться и base64 для отображения в src, сократив таким образом количество образов картинок. но потом рередача в текстовом формате base64 или дополнительное преобразование base64 в blob не есть более выйгрышный вариант. ещё раз : при почти нулевой свободной памяти я не увидел больших проблем. В вашем случае, как минимум, нужно использовать URL.revokeObjectURL() после использования объектной ссылки . На один "образ" будет меньше. Ну а почему вы на вашем конкретном браузере конкретной версии не видите никаких проблем - причины очевидно есть, но они никоим образом не связаны с вашим программным кодом. Наблюдения пользователей показывают, что при проблемы бывают и при таком коде их вероятность высока. авторещё раз : при почти нулевой свободной памяти я не увидел больших проблем. У меня на последней верcии FF при 3Гб оперативки (столько же свопа), когда оперативка почти полностью занята и браузеру достаётся только своп, при использовании FileReader.readAsObjectURL() из 5-10 картинок по 4Мб превью генерируются только для трети из них (и с тормозами), для остальных в логах вылезают критические ошибки. При использовании URL.CreateObjectURL()/revokeObjectURL() даже если оперативка под завяку занята, все превьюшки генерируются без ошибок и без тормозов. Пример весьма показателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 13:14 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
Что касается той статьи на хабре, там действительно большие объёмы памяти потребляются. Но я проверял с FileReader.readAsObjectURL() . Действительно, потребляются большие объёмы памяти. Почему у вас нет проблем, даже при масштабном использовании свопа - можно предположить, что: а) FileReader.readAsArrayBuffer() + Blob + ArrayBuffer => за счёт грамотной работы сборщика (а работа сборщика может зависеть и от ОС) в памяти хранится только один экземпляр данных картинки б) эффективная и корректная работа свопа (браузер + ОС) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 13:27 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02В вашем случае, как минимум, нужно использовать URL.revokeObjectURL() после использования объектной ссылки .это правильное замечание, только я не смог сообразить где его лучше вставить... Cyrax_02Ну а почему вы на вашем конкретном браузере конкретной версии не видите никаких проблем - причины очевидно есть, но они никоим образом не связаны с вашим программным кодом вот это интересный вывод. я тоже хотел знать. но дитя не плачет - мать не разумеет. Cyrax_02У меня на последней верcии FF при 3Гб оперативки (столько же свопа), у меня win10, 4гига , оперативка под завязку - netbeans, mysql, dbForge, мозилла (10-15 вкладок), хром, скайп, java, tomcat... и клиет и сервер всё на одной машине. 600 картинок без труда. только диск стонет.... ноут 11 года. может у тебя проблемы с диском? дефрагментация? перегрев? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 14:21 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
авторэто правильное замечание, только я не смог сообразить где его лучше вставить...В обработчике события "onload" DOM-объекта, соответствующего <img> (обработчик ставить перед image.src = ... ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 15:12 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02В обработчике события "onload" DOM-объекта, соответствующего <img> (обработчик ставить перед image.src = ... )в такой конструкции Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. где? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 17:26 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
Например, так: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2017, 01:07 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
вадяв такой конструкции твой код читать - глаза сломаешь (форматирование). Учись у Cyrax_02. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2017, 11:15 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, спасибо, что уделил внимание моему коду. благодаря тебе я смог избавиться от jquery :) $('#pic_div').append( и есть интересное наблюдение: у тебя есть такое $(image).one('load', function(e) {... в последних весиях (по крайней мере хрома) это стало необходимо. но! при таком использовании Код: javascript 1. 2. 3. необходимости в этом нет. потому как это urlFactory.createObjectURL(fb['pic' + fb.max]) в итоге строка, и в момент формирования основной строки это urlFactory.createObjectURL(fb['pic' + fb.max]) вызывается как "функция", которая выполняется не в фоновом режиме. (в отличие от твоего варианта) и никакого лишнего элемента не создается, результат - простая строка - ссылка на память. ... я так думаю.... хотя могу ошибаться. при указании реального uri картинки - происходит загрузка картинки с ссервера. что происходит при при указании src='blob:http://www.site.ru/17b3ab49-dbc2-48e5-afc2-be1d64cec7ef' не понятно, перегружается ли в область для src, либо src по этой ссылке "подключается" к памяти поуказанию этой ссылки. по-моему мнению - второе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2017, 13:00 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
авторблагодаря тебе я смог избавиться от jquery :) $('#pic_div').append(А при чём здесь мой код ? И твой код, и мой - используют jquery. Впрочем, переделать на чистый javascript не сложно... автор$(image).one('load', function(e) {... в последних весиях (по крайней мере хрома) это стало необходимо.Не понятно, что именно необходимо ? Здесь вешается обработчик на событие "onload". В этом обработчике освобождается память, отведённая под объект, созданный методом URL.createObjectURL() . Данные действия обусловлены исключительно логикой кода, а не версией браузера. авторнеобходимости в этом нет. потому как это urlFactory.createObjectURL(fb['pic' + fb.max]) в итоге строка, и в момент формирования основной строки это urlFactory.createObjectURL(fb['pic' + fb.max]) вызывается как "функция", которая выполняется не в фоновом режиме. (в отличие от твоего варианта) и никакого лишнего элемента не создается, результат - простая строка - ссылка на память.В чём нет необходимости ? DOM-объект <img> создаётся отдельно для того, чтобы повесить на него обработчик события загрузки картинки "onload", в котором выполняется освобождение памяти, отведённой под объект, созданный методом URL.createObjectURL() . Загрузка картинки начинается асинхронно сразу после присваивания img.src=... После выполнения вашего изначального кода картинка ещё не загружена (не отрендерина). Чтобы отловить момент, когда она завершит загрузку (рендеринг), и нужен обработчик события "onload". Освобождать память, отведённую под объект, созданный методом URL.createObjectURL() , можно только после завершения загрузки (рендеринга) картинки. авторпри указании реального uri картинки - происходит загрузка картинки с ссервера. что происходит при при указании src='blob:http://www.site.ru/17b3ab49-dbc2-48e5-afc2-be1d64cec7ef' не понятноЯ же написал в первых постах, что метод URL.createObjectURL() создаёт в оперативной памяти специальный объект и возвращает на него строковую объектную ссылку специального формата, которую можно присваивать img.src . В этом случае картинка загружается (рендерится) из этого специального объекта, на который указывает эта специальная ссылка. После завершения рендеринга картинки этот специальный объект остаётся в памяти и его нужно (желательно) явно освобождать методом URL.revokeObjectURL() . И освобождать только после того, как завершится рендеринг картинки (событие "onload"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2017, 13:37 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, сделал я удаление... может что-то и изменилось, но никак я не смог этого заметить этого. добиться обвала браузера мне не удалось. попробуй сделать своп 6-8гиг. у меня при 4 гигах озу свар 15гиг(я знаю, что это бессмысленно, но ...) так при загрузке картинок показывает использование "памяти" 7+ гиг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2017, 23:16 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, а рендеринг картинок происходит на на событии onload. рендеринг проимходит в момент первого появления картинки на экране. это проявляется в виде задержки , дергании, рывках при первом скролинге картинок. в дальнейшем скролинге всё прокручивается плавно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2017, 23:20 |
|
||
|
(js) Как из URL.createObjectURL() получить ArrayBuffer ?
|
|||
|---|---|---|---|
|
#18+
авторможет что-то и изменилось, но никак я не смог этого заметить этого.Зато по фэншую... автора рендеринг картинок происходит на на событии onload. рендеринг проимходит в момент первого появления картинки на экране. это проявляется в виде задержки , дергании, рывках...Картинка начинает рендериться в момент присваивания img.src = ... (либо создания/добавления узла img с указанным src , как в вашем изначальном коде), завершается рендеринг непосредственно перед генерацией события "onload" (или "onerror" - при ошибках рендеринга). А " момент первого появления картинки " - это момент после завершения рендеринга этой самой картинки. Что у вас там тормозит и когда - всецело зависит от логики кода (вы же не одну картинку загружаете и отображаете) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2017, 05:45 |
|
||
|
|

start [/forum/topic.php?fid=22&gotonew=1&tid=1444597]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
11ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 184ms |

| 0 / 0 |
