Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3 4 5      [все]
 вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя. Вот кусок твоего кода встретил на хабре.
Консультируй.
Тут ошибка что не очишаются файлы блоб в локальном хранилище хрома.
Каждый вызов этой функции создаёт новый здоровый блоб на клиенте.
пример ссылки:
blob:http://localhost:8080/02a0f2dc-8835-41cb-a561-0796347ce613
chrome://blob-internals/

Как исправить?

function getPic() {
		this.map[mm].getData(new zip.BlobWriter("image/jpeg"), function (fileBlob) {
				this.progress_load.value = mm + 1;
				this.current_files.innerHTML = (mm + 1) + '  из  ' + this.map.length + ' >>  ' + this.map[mm].filename;
				this.filename = this.map[mm].filename;
				
				window.pic = null;
				pic = new Image();
				pic.onload = function (p) {

						this.img.height = p.target.height;
						this.img.width = p.target.width;
						if (p.target.height > p.target.width) {
								this.img.scale = this.st_full_height / p.target.height;
								this.pics.full_height = this.st_full_height;
								this.pics.full_width = p.target.width * this.img.scale;
								this.pics.preview_height = this.st_preview_height;
								this.pics.preview_width = p.target.width * this.st_preview_height / p.target.height;
						}

						if (p.target.height < p.target.width) {
								this.img.scale = this.st_full_width / p.target.width;
								this.pics.full_width = this.st_full_width;
								this.pics.full_height = p.target.height * this.img.scale;
								this.pics.preview_width = this.st_preview_width;
								this.pics.preview_height = p.target.height * this.st_preview_width / p.target.width;
						}


						if (p.target.height === p.target.width) {
								this.img.scale = this.st_full_width / p.target.width;
								this.pics.full_height = this.st_full_height;
								this.pics.full_width = this.st_full_width;
								this.pics.preview_height = this.st_preview_height;
								this.pics.preview_width = this.st_preview_width;
						}


						var h = this.img.height * this.img.scale;
						var w = this.img.width * this.img.scale;
						this.new_img.height = this.current_img.height = h;
						this.new_img.width = this.current_img.width = w;
						this.new_img.top = this.current_img.top = 0;
						this.new_img.left = this.current_img.left = 0;
						this.new_img.x = this.current_img.x = this.pics.full_width / 2;
						this.new_img.y = this.current_img.y = this.pics.full_height / 2;
						this.img.rotate = 0;
						this.cropp.call(this);
				}.bind(this);
				pic.src = urlFactory.createObjectURL(fileBlob, {type: "image/jpeg"});
				mm++;
		}.bind(this), function (current, total) {
//                    console.log(current, total);
		}
		);
}
6 ноя 19, 15:46    [22010864]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
PetroNotC Sharp
window.pic = null;
вот это в js не работает что сборка мусора убрала блоб. Так как пишут что ссылка все равно осталась.
Вроде только в java работает.
6 ноя 19, 17:30    [22010972]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
Тут ошибка что не очишаются файлы блоб в локальном хранилище хрома.
на что влияет?
не замечал влияния на что либо...
window.pic = null;
и это не тут проявляется..
7 ноя 19, 01:09    [22011159]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
буду исследовать...
7 ноя 19, 01:09    [22011160]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
на что влияет?
даже если блоб 500 мегов отправлен на сервер, он остается в памяти пока живет window.
Память растет, потом переходит на своп и работает все медленнее.
Нужно каким то образом очищать после отправки так как на клиенте он уже не нужен.
7 ноя 19, 07:10    [22011177]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
даже если блоб 500 мегов отправлен на сервер, он остается в памяти пока живет window.
Память растет, потом переходит на своп и работает все медленнее.
Нужно каким то образом очищать после отправки так как на клиенте он уже не нужен.
провел исследования:
очистил историю хрома
очистил всё временное с помощью ccleaner.
загрузил зип 1.5гиг 614 файлов
пока загружались - эти блобы отображались в DevTools во вкладке источники.
при переходе на другую страницу и обратно - упоминание об этих блобах теряются...

посмотрел историю - никаких упоминаний о подобном размере, ничего...
Ccleaner не показал какого-либо заметного увеличения использованного хромом места

так что твои опасения напрасны.
про своп - ну тут вопрос спорный - простое "удаление" - это дело сборщика мусора, но как и когда он запускается - это никому не известно.
в инете - много вопросов про удаления блобов, но все они не сказываются на их удалении из "локального хранилища" , по крайне из списка не удаляются.
7 ноя 19, 09:38    [22011229]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp,

даже во время обработки файлов память не шибко изменяется

К сообщению приложен файл. Размер - 87Kb
7 ноя 19, 09:54    [22011241]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
пока загружались - эти блобы отображались в DevTools во вкладке источники.
то есть, 614 файлов загрузились и висят в памяти пока загружается 615 ый файл?
- зачем тогда асинхронность в загрузке?
- что делать на сотовых и планшетах где всего оперативы 1 гигабайт?
7 ноя 19, 10:05    [22011247]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
даже во время обработки файлов память не шибко изменяется

Введи
chrome://blob-internals/
А то термин "не шибко" как то не инженерно)
7 ноя 19, 10:07    [22011249]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
так что твои опасения напрасны.
ты так в своей техподдержке отвечаешь?
7 ноя 19, 10:09    [22011251]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
то есть, 614 файлов загрузились и висят в памяти пока загружается 615 ый файл?
ничего не висит - на картинке же видно как изменяется память.
даже сам зиповский файл не загружается полностью.
загружается только список зазипованных файлов с инфой их расположения и прочей информацией.
7 ноя 19, 10:12    [22011255]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
PetroNotC Sharp
window.pic = null;
pic = new Image();
этот код НЕ РАБОЧИЙ
Глобальная переменная pic затирается и память не освобождается.
До уничтожения страницы.
7 ноя 19, 10:13    [22011258]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
PetroNotC Sharp
то есть, 614 файлов загрузились и висят в памяти пока загружается 615 ый файл?
ничего не висит - на картинке же видно как изменяется память.
даже сам зиповский файл не загружается полностью.
загружается только список зазипованных файлов с инфой их расположения и прочей информацией.
ты тупой?
Набери в хроме
chrome://blob-internals/
Что видишь?
7 ноя 19, 10:15    [22011261]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
chrome://blob-internals/
Что видишь?
открыл - смотрел
ты можешь сам - найти строчки с местом хранения
там есть путь - открой в проводнике (не закрывая хром) увидишь список этих "блобов"
закрой хром и все они пропадут
7 ноя 19, 10:19    [22011266]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
Глобальная переменная pic затирается и память не освобождается.
До уничтожения страницы.
освобождением памяти занимается сборщик мусора.
когда он запускается - не известно
возможно когда появится необходимость
7 ноя 19, 10:21    [22011267]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
закрой хром и все они пропадут
молодец программист - закрой exe. и память очистится))))
Итого повтор вопроса. 614 блобов там есть пока качаю и уже перекачал 615?
Да или нет?
7 ноя 19, 10:21    [22011268]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
освобождением памяти занимается сборщик мусора.
если у объекта нет рабочих ссылок, неуч.
Двойка.
7 ноя 19, 10:22    [22011271]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
Пришлось самому искать.
Первая ссыль говорит что в js нужен оператор delete переменная.
7 ноя 19, 10:24    [22011274]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
Первая ссыль говорит что в js нужен оператор delete переменная.
ты думаешь я не нашёл этого?
7 ноя 19, 10:26    [22011278]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
PetroNotC Sharp
Первая ссыль говорит что в js нужен оператор delete переменная.
ты думаешь я не нашёл этого?
дак вставь. У тебя упрямства выше крыши.
На планшете 1 гиг оперативы
7 ноя 19, 10:40    [22011293]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
если у объекта нет рабочих ссылок
это подразумевается само сабой.
даже после delete windows.pic
если откроешь chrome://blob-internals/ ты увидишь список блобов
7 ноя 19, 10:42    [22011298]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
PetroNotC Sharp
если у объекта нет рабочих ссылок
это подразумевается само сабой.
даже после delete windows.pic
если откроешь chrome://blob-internals/ ты увидишь список блобов
вижу ты начал работать.
Продолжай.
Реши проблему.
Я могу запустить твою функцию при ответе по AJAX.
Напиши её тут.
7 ноя 19, 10:44    [22011300]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
А то придется идти в js ветку(
7 ноя 19, 10:45    [22011301]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp,
на оперативку это не влияет.
но в папке \Google\Chrome\User Data\Default\blob_storage этих файлов , действительно, нет
7 ноя 19, 10:45    [22011302]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
PetroNotC Sharp,
на оперативку это не влияет.
но в папке \Google\Chrome\User Data\Default\blob_storage этих файлов , действительно, нет
щас проверю
7 ноя 19, 10:46    [22011303]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
Реши проблему.

достаточно такого
                            delete window.pic;
                            window.pic = null;
                            pic = new Image();
7 ноя 19, 10:47    [22011305]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
PetroNotC Sharp
Реши проблему.

достаточно такого
                            delete window.pic;
                            window.pic = null;
                            pic = new Image();
ты проверил?
Я же тоже пробовал вчера.
7 ноя 19, 10:48    [22011307]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
ты проверил?
Я же тоже пробовал вчера.
да , только что .
в chrome://blob-internals/ список висит до тех пор пока находишься на странице
7 ноя 19, 10:55    [22011315]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
пока находишься на странице
сколько раз говорить. Нужно освободить ПОСЛЕ отправки фацла на сервер. Блоб на клиенте после уже не нужен.
Если ты говоришь, что там просто список и ресурсов нет, то я позже проверю.
Отпишусь.
7 ноя 19, 11:14    [22011334]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
PetroNotC Sharp
вадя
PetroNotC Sharp,
на оперативку это не влияет.
но в папке \Google\Chrome\User Data\Default\blob_storage этих файлов , действительно, нет
щас проверю
опять ты не прав.
С чего взял что все ресурсы по этому пути?
Вставил твоё delete.
Потом поработал твоим кодом.
И вот что в конце (скрин).
Причем, мы ВИДИМ все 2 гига отправленных картинок на клиенте.
Значит не очистилось?
Картинка с другого сайта.
7 ноя 19, 12:04    [22011380]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Об чем вы спорите? О поведении специфичном по отношению к Chrome?

Пробовали FireFox, Opera?
7 ноя 19, 12:28    [22011415]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
mayton,
Это дорого. Хотя бы на одном работало.
Да и вадя рекомендовал свой код на хром).
У меня начинается импорт менее секунды и на 500ом файле падает до 3 сек на один файл.
7 ноя 19, 12:31    [22011419]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Я не понял что дорого?

Воспроизвести дефект в другом env?
7 ноя 19, 12:35    [22011423]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
mayton
Я не понял что дорого?

Воспроизвести дефект в другом env?
фокс вообще завис на 400 ой картинке
7 ноя 19, 12:43    [22011427]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
mayton,
При разработке хром выиграл.
Я ушел на него с фокса.
7 ноя 19, 12:44    [22011428]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
опять ты не прав.
С чего взял что все ресурсы по этому пути?
Вставил твоё delete.
Потом поработал твоим кодом.
И вот что в конце (скрин).
Причем, мы ВИДИМ все 2 гига отправленных картинок на клиенте.
Значит не очистилось?

ты убери delete и посмотри ресурсы по пути \Google\Chrome\User Data\Default\blob_storage
потом вставь delete и снова посмотри
то что в скрине это просто список, статический.
он просто отображает обработанные блобы. хром не хранит блобы в памяти, он их выгружает в \Google\Chrome\User Data\Default\blob_storage, что видно по использованию памяти на 22011241
в позиции HEAP. (это без delete)
7 ноя 19, 13:20    [22011466]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
то что в скрине это просто список, статический.
два вопроса
- почему я после всей загрузки могу посмотреть все 500 рисунков?
- почему скорость падает с 3х изображений в сек до изображение в 4 сек
?
Это все было выше, но ты невнимателен.
7 ноя 19, 13:39    [22011479]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
- почему я после всей загрузки могу посмотреть все 500 рисунков?
где ты их можешь посмотреть?
PetroNotC Sharp
- почему скорость падает с 3х изображений в сек до изображение в 4 сек
у пеня постоянная
7 ноя 19, 13:47    [22011486]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
где ты их можешь посмотреть?

))) вадя.
chrome://blob-internals/
В самом низу урл адреса.
Вбей в адрес и увидишь фотки jpg.
7 ноя 19, 13:51    [22011491]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя,
Хром сам выбирает куда сохранять блобы. В свою бд, в кэш папку, на диск или....
7 ноя 19, 13:54    [22011494]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
посмотри ресурсы по пути \Google\Chrome\User Data\Default\blob_storage
там пусто в обоих вариантах. Он не туда сохраняет.
7 ноя 19, 13:57    [22011500]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
PetroNotC Sharp
В самом низу урл адреса.

blob:http://localhost:8080/гуид блоба
7 ноя 19, 13:58    [22011501]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
PetroNotC Sharp
mayton,
При разработке хром выиграл.
Я ушел на него с фокса.

Это прекрасно...
7 ноя 19, 14:04    [22011511]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp,
сделал так
                            this.filename = this.map[mm].filename;
                            delete window.pic;
                            window.pic = null;
                            pic = new Image();
                            pic.onload = function (p) {
***
                                delete window.pic;
                                this.img.height = p.target.height;


тут *** появляется запись о картинке ( как тут 22011380)
т.е. файл из зипа преобразован в картинку и загружен в pic.src
следующая строка удаляет ...
но запись о блобе не исчезает.
а код выдаёт ошибку
Uncaught TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(CSSImageValue or HTMLImageElement or SVGImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'
на этой строке
this.context.drawImage(window.pic, x, y, w, h, 0, 0, w, h);

что правильно, т.к. window.pic нет.

следовательно напрашивается вывод - информацию о блобе хранит только отладчик хрома
7 ноя 19, 14:58    [22011592]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Хром полностью невиноват?
7 ноя 19, 15:06    [22011597]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
mayton
Хром полностью невиноват?
ну у нас разный хром
у меня из окон, у Петро - вроде как из яблока.
7 ноя 19, 15:19    [22011607]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
вадя
следовательно напрашивается вывод - информацию о блобе хранит только отладчик хрома

хотя, если не открывать отладчик - то в chrome://blob-internals/ взять адрес блоба , можно посмотреть этот блоб


вопрос занимательный - где это сохраняется?
в кЭше?
7 ноя 19, 15:23    [22011609]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
Петро - вроде как из яблока.
portable на винде. В андроиде это боевой. Но и фокс не работает на винде.
7 ноя 19, 16:15    [22011661]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
PetroNotC Sharp
createObjectURL
вот эта делает блоб. И ее надо обнулить
7 ноя 19, 16:16    [22011662]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
вопрос занимательный - где это сохраняется?
в кЭше?
вроде да. Но там закрытый формат.
7 ноя 19, 16:17    [22011664]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
загружен в pic.src
а зачем тебе переменная pic так высоко в пространстве окна?
Ты ее в клас Load и потом класс грохнуть.
7 ноя 19, 16:20    [22011666]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя,

https://stackoverflow.com/questions/22899333/delete-javascript-blobs
7 ноя 19, 16:27    [22011676]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
а зачем тебе переменная pic так высоко в пространстве окна?
Ты ее в клас Load и потом класс грохнуть.
поробуй
7 ноя 19, 16:38    [22011682]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
PetroNotC Sharp
а зачем тебе переменная pic так высоко в пространстве окна?
Ты ее в клас Load и потом класс грохнуть.
поробуй
я не могу в твоем коде разобраться)).
7 ноя 19, 16:43    [22011683]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp,
тебе куда скинуть?
7 ноя 19, 17:31    [22011724]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя,
Почту kpetro@mail.ru.
Посмотрю уже завтра.
Спс.
7 ноя 19, 18:03    [22011785]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя,
Ну вот, можешь же когда захочешь)).
И чё три страницы спорил).
вадя
pic убрана из глобальных.
блобы удаляются
this.pic - теперь переменная класса
window.URL.revokeObjectURL(this.pic.src);

// delete this.pic; - это по вкусу, но роли не играет

У меня не исходная с хабра, а модифицированная уже своя версия.
Я там выход из цикла делал, ошибку в innerHtml, глобальные const переменные. Проверку файлов на русские буквы и вложенность.
Поэтому вручную счас буду твои правки вносить в Свою версию твоего js.
Нужно время.
Спасибо.
Если что, отпишусь.
8 ноя 19, 11:39    [22012200]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя,
Ты вынес upload() выше уровнем?
Class Load
crop()
load_pic2()
upload()
Но оствил в классе или еще выше?
8 ноя 19, 12:32    [22012235]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
Class Load
crop()
load_pic2()
upload()
8 ноя 19, 12:33    [22012237]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
Коммент дай на функции.
8 ноя 19, 12:33    [22012238]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Што у вас за возня под столом? Давайте паблишите сорцы. А то некрасиво другие ведь читают. А вы крысите важную инфу топика.
8 ноя 19, 12:40    [22012242]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
/* global zip */

//https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat

document.addEventListener("DOMContentLoaded", function () {

    let loa;
    let message = '';

    document.querySelectorAll('script').forEach(function (item) {
        const regex = /(.*\/)(jszip\.min\.js)/gm;
        let m;
        if ((m = regex.exec(item.src)) !== null) {
            zip.workerScriptsPath = m[1]; // путь до папки слибой zip
            zip.useWebWorkers = true;
            return;
        }
    });
    document.querySelector('#file').addEventListener('change', function () {

        loa = new load(
                document.querySelector('#full').value, // размер просмотрового фото
                document.querySelector('#pre').value, // размер превь фото
                this,
                document.querySelector('#current_files_'), // див вывода текущего обрабатываемого файла
                document.querySelector('#process_time_'), // див для вывода времени процесса
                document.querySelector('#progress_load')  // прогрессс загрузки
                );
    });

    document.querySelector('#load_start').addEventListener('click', function () {

        zip.createReader(new zip.BlobReader(document.querySelector('#file').files[0]), function (zipReader) {
// get all entries from the zip
            zipReader.getEntries(function (entries) {
                entries.forEach(function (entry) {
                    loa.map.push(entry);
                });
                console.table(loa.map);
                if (document.querySelector('#del').checked) {
                    loa.del_previous();
                }
                loa.getFilen(); //запуск на обработку
            });
        });
    });


    class load {
        constructor(
                st_full_height,
                st_preview_height,
                input_zip_files,
                current_files,
                process_time,
                progress_load
                ) {

//            this.pic;

            this.func_servlet = "func"; // для обработки команд
            this.upload_servlet = "upload"; // для обработки команд


            this.input_zip_files = input_zip_files;
            this.st_full_height = st_full_height;
            this.st_full_width = st_full_height;
            this.st_preview_height = st_preview_height;
            this.st_preview_width = st_preview_height;
            this.pics = {
                full_height: this.st_full_height,
                full_width: this.st_full_width,
                preview_height: this.st_preview_height,
                preview_width: this.st_preview_width
            };
            this.matrix = new Array(6);
            this.current_img = {
                top: 0,
                left: 0,
                x: 0,
                y: 0,
                height: 0,
                width: 0
            };
            this.new_img = {
                top: 0,
                left: 0,
                x: 0,
                y: 0,
                height: 0,
                width: 0
            };
            this.img = {height: 0,
                width: 0,
                rotate: 0,
                scale: 1
            };
            this.id_crop = ['preview', 'full'];
            this.crop = {
                id: this.id_crop[1]
            };
            this.cropImg = 0;
            this.deg_to_rad = Math.PI / 180;
            this.rad_to_deg = 180 / Math.PI;
            this.map = [];
            this.filename;
            this.current_files = current_files;
            this.progress_load = progress_load;
            this.process_time = process_time;
            this.time_start;
            this.canvas1 = document.createElement("canvas");
            this.context = this.canvas1.getContext("2d");
            this.getFilen = this.getFiles_();
        }

        del_previous() {
            let formData = new FormData();
            formData.append('comand', 'del_previous');
            let xhr = new XMLHttpRequest();
            xhr.open('POST', this.func_servlet, true);
            xhr.onload = function (e) {
                if (xhr.status !== 200) { // анализируем HTTP-статус ответа, если статус не 200, то произошла ошибка
//                    alert(`Ошибка ${xhr.status}: ${xhr.statusText}`); // Например, 404: Not Found
                    message = 'Ошибка ' + xhr.status + ' ' + xhr.statusText;
                }
            };
            xhr.onerror = function () {
                message = 'Ошибка ' + xhr.status + ' ' + xhr.statusText;
            };
            xhr.send(formData);
        }

        getFiles_() {
            let mm = 0;
            var urlFactory = window.URL || window.webkitURL;
            this.time_start = performance.now();
            return function () {
//
//                if (this.delprevious.checked) {
//                    this.del_previous();
//                }

                this.progress_load.setAttribute('max', this.map.length);
                if (this.map.length === mm || message.length !== 0) {
                    if (message.length !== 0) {
                        alert(message);
                    }
                    message = '';
                    console.log("закончено");
                    this.current_files.innerHTML = '';
                    this.process_time.innerHTML = '';
                    this.map.splice(0, this.map.length);
                    mm = 0;
                    this.input_zip_files.value = '';
                    this.progress_load.value = 0;
                    return 0;
                } else {
                    getPic.call(this);

                    let t = performance.now() - this.time_start;
                    let m = t * this.map.length / mm - t;
                    this.process_time.innerHTML = 'прошло  ' +
                            new Intl.NumberFormat('ru-RU', {maximumFractionDigits: 2}).format(t / 1000) +
                            '<br> осталось ' +
                            new Intl.NumberFormat('ru-RU', {maximumFractionDigits: 2}).format(m / 1000);
                    return mm;
                }
            };


            function getPic() {
                this.map[mm].getData(new zip.BlobWriter("image/jpeg"),
                        function (fileBlob) {
//                            "use strict";
                            this.progress_load.value = mm + 1;
                            this.current_files.innerHTML = (mm + 1) + '  из  ' + this.map.length + ' >>  ' + this.map[mm].filename;
                            this.filename = this.map[mm].filename;
                            try {
                                window.URL.revokeObjectURL(this.pic.src);
                            } catch (e) {
                            }
//                            delete this.pic;
                            
                            this.pic = new Image();
                            this.pic.onload = function (p) {
                                this.img.height = p.target.height;
                                this.img.width = p.target.width;
                                if (p.target.height > p.target.width) {
                                    this.img.scale = this.st_full_height / p.target.height;
                                    this.pics.full_height = this.st_full_height;
                                    this.pics.full_width = p.target.width * this.img.scale;
                                    this.pics.preview_height = this.st_preview_height;
                                    this.pics.preview_width = p.target.width * this.st_preview_height / p.target.height;
                                }

                                if (p.target.height < p.target.width) {
                                    this.img.scale = this.st_full_width / p.target.width;
                                    this.pics.full_width = this.st_full_width;
                                    this.pics.full_height = p.target.height * this.img.scale;
                                    this.pics.preview_width = this.st_preview_width;
                                    this.pics.preview_height = p.target.height * this.st_preview_width / p.target.width;
                                }


                                if (p.target.height === p.target.width) {
                                    this.img.scale = this.st_full_width / p.target.width;
                                    this.pics.full_height = this.st_full_height;
                                    this.pics.full_width = this.st_full_width;
                                    this.pics.preview_height = this.st_preview_height;
                                    this.pics.preview_width = this.st_preview_width;
                                }


                                var h = this.img.height * this.img.scale;
                                var w = this.img.width * this.img.scale;
                                this.new_img.height = this.current_img.height = h;
                                this.new_img.width = this.current_img.width = w;
                                this.new_img.top = this.current_img.top = 0;
                                this.new_img.left = this.current_img.left = 0;
                                this.new_img.x = this.current_img.x = this.pics.full_width / 2;
                                this.new_img.y = this.current_img.y = this.pics.full_height / 2;
                                this.img.rotate = 0;
                                this.cropp.call(this);
                            }.bind(this);
                            this.pic.src = urlFactory.createObjectURL(fileBlob, {type: "image/jpeg"});
                            mm++;
                        }.bind(this),
                        function (current, total) {
//                    console.log(current, total);
                        }
                );
            }
        }

        cropp() {

            var crop_width = this.cropImg === 0 ? this.pics.full_width : this.pics.preview_width;
            var crop_height = this.cropImg === 0 ? this.pics.full_height : this.pics.preview_height;
            var sq = Math.sqrt(crop_width * crop_width + crop_height * crop_height);
            var x = Math.floor((this.new_img.x - sq / 2) / this.img.scale);
            var y = Math.floor((this.new_img.y - sq / 2) / this.img.scale);
            var w = Math.floor(sq / this.img.scale);
            var h = Math.floor(sq / this.img.scale);
            this.canvas1.height = h;
            this.canvas1.width = w;
            this.context.fillStyle = '#ffffff';
            this.context.fillRect(0, 0, w, h);
            this.context.drawImage(this.pic, x, y, w, h, 0, 0, w, h);

            var pic = new Image();
            pic.onload = function () {
                this.canvas1.height = sq;
                this.canvas1.width = sq;
                this.context.translate(sq / 2, sq / 2);
                this.context.rotate((this.img.rotate * Math.PI) / 180);
                this.context.drawImage(pic, -sq / 2, -sq / 2);
                pic.onload = load_pic2.call(this);
                pic.src = this.canvas1.toDataURL("image/jpeg", 1.0);
            }.bind(this);
            if (this.img.scale < 1) {
                pic.src = this.resize(this.canvas1, sq, sq);
            } else {
                pic.src = this.resize_(this.canvas1, sq, sq);

            }

            function load_pic2() {
                this.canvas1.height = crop_height;
                this.canvas1.width = crop_width;
                var x = (sq - crop_width) / 2;
                var y = (sq - crop_height) / 2;
                this.context.drawImage(pic, x, y, crop_width, crop_height, 0, 0, crop_width, crop_height);
                this.canvas1.toBlob(this.upload.bind(this), "image/jpeg", 1);

            }

        }

        upload(blobOrFile) {
            var formData = new FormData();
            formData.append("userfile", blobOrFile, this.filename);
            formData.append('full_preview', this.cropImg);
            var xhr = new XMLHttpRequest();
            xhr.open('POST', this.upload_servlet, true);
            xhr.onload = function (e) {
                if (xhr.status !== 200) { // анализируем HTTP-статус ответа, если статус не 200, то произошла ошибка
                    alert(`Ошибка ${xhr.status}: ${xhr.statusText}`); // Например, 404: Not Found
                } else { // если всё прошло гладко, выводим результат
//                    setTimeout(function () {
//                        message = 'Ошибка ' + xhr.status + ' ' + xhr.statusText;
//                    }, 500);
//                            console.log(xhr.response); // response -- это ответ сервера
                }
            };
            xhr.upload.onprogress = function (e) {
//                        console.log(e);
//                    if (e.lengthComputable) {
//                        progressBar.value = (e.loaded / e.total) * 100;
//                        progressBar.textContent = progressBar.value; // Fallback for unsupported browsers.
//                        throw 11
//                    }
            };
            xhr.onerror = function () {
                message = 'Ошибка ' + xhr.status + ' ' + xhr.statusText;
//                        alert("Загрузка " + this.filename + " не удалась");
            };
            xhr.send(formData);
            this.cropImg = this.crop.id === this.id_crop[1] ? (this.cropImg | 2) : (this.cropImg | 1);
            this.full_pre();
            if (this.cropImg === 2) {
                this.cropp();
            }
        }

        resize(img, w, h) {//уменьшение
            var steps = Math.ceil(Math.log(img.height / h) / Math.LN2);
            var sW = w * Math.pow(2, steps - 1);
            var sH = h * Math.pow(2, steps - 1);
            var canvas2;
            while (steps--)
            {
                canvas2 = document.createElement('canvas');
                canvas2.width = sW;
                canvas2.height = sH;
                canvas2.getContext('2d').drawImage(img, 0, 0, sW, sH);
                img = canvas2;
                sW = Math.round(sW / 2);
                sH = Math.round(sH / 2);
            }
            return canvas2.toDataURL("image/jpeg", 1);
        }

        resize_(img, w, h) {//увеличение
            var steps = Math.ceil(Math.log(h / img.height) / Math.LN2);
            var sW = w * Math.pow(2, steps - 1);
            var sH = h * Math.pow(2, steps - 1);
            var canvas2;
            while (steps--)
            {
                canvas2 = document.createElement('canvas');
                canvas2.width = sW;
                canvas2.height = sH;
                canvas2.getContext('2d').drawImage(img, 0, 0, sW, sH);
                img = canvas2;
                sW = Math.round(sW * 2);
                sH = Math.round(sH * 2);
            }
            return canvas2.toDataURL("image/jpeg", 1);
        }

        full_pre() {
            if (this.crop.id === 'preview')
            {
//            -- включение режима full --
                this.crop.id = this.id_crop[1];
                this.img.scale *= this.pics.full_width / this.pics.preview_width;
                this.setres();
                this.cropImg = 0;
                this.getFilen();
            } else {
//            -- включение режима preview --
                this.crop.id = this.id_crop[0];
                this.img.scale *= this.pics.preview_width / this.pics.full_width;
                this.setres();
            }
        }
        setres() {
            const new_h = this.img.height * this.img.scale;
            this.new_img.x = this.new_img.x * new_h / this.new_img.height;
            this.new_img.height = new_h;
            const new_w = this.img.width * this.img.scale;
            this.new_img.y = this.new_img.y * new_w / this.new_img.width;
            this.new_img.width = new_w;
            this.current_img.x = this.new_img.x;
            this.current_img.y = this.new_img.y;
            const ang = -1 * this.img.rotate * this.deg_to_rad;
            this.matrix[0] = Math.cos(ang);
            this.matrix[1] = -Math.sin(ang);
            this.matrix[2] = Math.sin(ang);
            this.matrix[3] = Math.cos(ang);
            this.matrix[4] = 0;
            this.matrix[5] = 0;
        }
    }



});
8 ноя 19, 13:00    [22012259]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя,
Проверь еще раз. Не работает.
1. Заремуй строку обнуления имени файла zip для загрузки на сервер после всей работы.
2. Два раза загрузи 500 файлов подряд два раза нажав кнопку.
Итого будет 1000 блоб на клиенте.
Так?
8 ноя 19, 13:17    [22012274]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Капец. Яж не юащик. А html дадите?
8 ноя 19, 13:20    [22012278]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
PetroNotC Sharp
Заремуй строку обнуления имени файла zip

//this.current_files.innerHTML = '' ;
8 ноя 19, 13:21    [22012281]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<link rel="stylesheet" href="css/poi-css.css">
<script src="js/vendor/jquery.min.js"  type="text/javascript"></script>
<script src="js/zip/jszip.min.js" type="text/javascript"></script>
<script src="js/zip/zip.js" type="text/javascript"></script>
<script src="js/zip/zip-ext.js" type="text/javascript"></script>
<script src="js/upload/loadphoto.js" type="text/javascript"></script>

<title>Загрузка на сервер</title>
</head>

   	<body>
        <div id="view">
			<label>Имя папки для загрузки на сервере (логин) <input type="text" id="dir-login-name" value="lena" style="width: 50px; height: 12px; text-align: center;"></label><br>
            <label>Размер просмотровый (px) <input type="text" id="full" value="1200" style="width: 50px; height: 12px; text-align: center;"></label><br>
            <label>Размер превью (px)       <input type="text" id="pre" value="75"  style="width: 50px; height: 12px; text-align: center;"></label><br>
            <input type="file" id="file" accept="application/zip" ><br>
            <input type="button" id="load_start" value=" Начать загрузку " style="margin: 13px 0 10px;width: 198px;"><br>
            <label>Загрузка<progress id="progress_load" max="100" value="0"></progress></label>
            Паттерн допустимых символов: /^[()!._a-zA-Z0-9\s]+$/
            <div id="current_files_"></div>
            <div id="process_time_"></div>
			<input type="button" id=del_dir_server" value=" УДАЛЕНИЕ ПАПКИ НА СЕРВЕРЕ !!! " onclick="delDirServer();return false;" style="margin: 13px 0 10px;width: 198px;"><br>
        </div>
</body>
</html>
8 ноя 19, 13:27    [22012295]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
mayton,
Хотел выложить тест из 3х файлов.
Оказвается не работает так
Проблема в протоколе file:/// - воркеры запрещены при исполнении скриптов из локального файла.
https://toster.ru/q/251740
)))
8 ноя 19, 14:25    [22012360]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
Проверь еще раз. Не работает.
1. Заремуй строку обнуления имени файла zip для загрузки на сервер после всей работы.
2. Два раза загрузи 500 файлов подряд два раза нажав кнопку.
Итого будет 1000 блоб на клиенте.
Так?
работает, проверил.
блобов нет. их адреса появляются в отладчике, но попробуй из открыть - будет сообщение файл удалён

что значит два раза нажав кнопку?
все изменения на картинке
первое false на true - меняет синхронный режим на асинхронный

К сообщению приложен файл. Размер - 133Kb
8 ноя 19, 17:16    [22012501]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp,
не надо пугать браузеры этим
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

необходимо и достаточно такого
<!DOCTYPE html>
8 ноя 19, 17:21    [22012508]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
что значит два раза нажав кнопку?
ну типа накапливаются при повторном нажатии. Но раз ты говоришь, что только адреса то ОК.
Теперь уже понед.посмотрю.
8 ноя 19, 18:38    [22012558]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
ну типа накапливаются при повторном нажатии. Но раз ты говоришь, что только адреса то ОК.
если по правилам - то надо блокировать эту кнопку на время загрузки.
исправлю.
9 ноя 19, 09:33    [22012676]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя,
Да. Вроде расход ресурсов на клиенте решили общими усилиями. 500 картинок переданных уже не видны на клиенте.
Я тебе написал две просьбы.
Проверить тормоза в конце цикла и перестал идти прогрессбар.
Письмо получил?
12 ноя 19, 10:31    [22014171]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp,
видел, ответил
12 ноя 19, 23:28    [22014879]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
PetroNotC Sharp
loa = new load(
                document.querySelector('#full').value, // размер просмотрового фото
                document.querySelector('#pre').value, // размер превь фото
                this,
                document.querySelector('#current_files_'), // див вывода текущего обрабатываемого файла
                document.querySelector('#process_time_'), // див для вывода времени процесса
                document.querySelector('#progress_load')  // прогрессс загрузки
                );

Вадя. Спс. Ты нашел ошибку.
Но вот скажи, как ты пишешь на js без типизации.
Если перед параметром this поставить false и в самом низу убрать один параметр, то ничего не заругается но работать не будет.
?
18 ноя 19, 12:35    [22018603]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Можно поставить побольше утверждений типа

typeof x === "SomeType"


и надеятся что рантайм выдаст больше информации по несоотвествию.
18 ноя 19, 12:46    [22018609]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
mayton
рантайм
это у заказчика?
Надо при разработке.
18 ноя 19, 12:56    [22018620]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
Но вот скажи, как ты пишешь на js без типизации.
Если перед параметром this поставить false и в самом низу убрать один параметр, то ничего не заругается но работать не будет.
ну с типизацией у js туго.
но как-то мне это не мешает. немного больше внимания и всё.
передать параметры в функцию можно несколькими способами и передать можно любое количество, неизвестное на момент выполнения
18 ноя 19, 13:37    [22018667]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
но как-то мне это не мешает
да. Я знаю.
Ты вот сегодня, взял пропустил файлы не jpeg молчком, в консоль которую никто не видит. И всё.
А в корпоративе все строго. Стоп загрузки и ошибку (изумление смайлик) на экран.
Для энтерпрайза js не удобен.
18 ноя 19, 13:45    [22018681]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
А в корпоративе все строго. Стоп загрузки и ошибку (изумление смайлик) на экран.
Для энтерпрайза js не удобен.
тут вопрос спорный, что лучше. ты привык к одному и поэтому тяжело, но иногда количество передаваемых параметров неизвестно и тут уже без возможностей js не обойтись.
тот же энтерпрайз пишут и на node. и ничего.
18 ноя 19, 14:22    [22018738]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
PetroNotC Sharp
mayton
рантайм
это у заказчика?
Надо при разработке.

Ну тут сорян. Это - недостатки языков динамической типизации.
А именно - компиллятор не может 100% доказать валидность тайп-кастингов.

В строгих языках таких как Scala, типизация возведена в нечто вроде главного смысла.
Тоесть ты думаешь о типах каждую секунду.
18 ноя 19, 14:25    [22018744]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
но иногда количество передаваемых параметров неизвестно
приведи пример
18 ноя 19, 14:27    [22018750]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
mayton
В строгих языках таких как Scala, типизация возведена в нечто вроде главного смысла.
Тоесть ты думаешь о типах каждую секунду.
здорово. Гибкость и типизация одновременно?
18 ноя 19, 14:27    [22018752]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Гибкость в каком смысле?
18 ноя 19, 14:29    [22018753]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
mayton,
У него вроде преимущество перед java в гибкости. Я не спец в нем.
18 ноя 19, 14:34    [22018765]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Не уверен. Его создатель - Мартин Одерский полагал что мультипарадигменность - основная фича.
Тоесть можно ООП-стиль. Можно ФП. Вместе.

Насчет гибкости.. ну не знаю. Термин это слишком гумантитарный. Гибким может быть например матрас.
18 ноя 19, 14:40    [22018780]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
mayton
мультипарадигменность
ок
18 ноя 19, 14:44    [22018785]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
mayton,
Упс... Подумал.
В скале наверно решений вопроса вади больше вариантов.
Когда надо передать гибко параметры.
Это я и назал гибкость.
18 ноя 19, 14:45    [22018788]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Не знаю как вопрос Вади натянуть на топик.

Можно передать аргументы как тип Any. Базовый тип для всех скаловских типов.
А внутри сделать что-то вроде паттерн-матчинг. Но это КМК не ООП. Это немножко другое.

Я имею в виду подход другой.
18 ноя 19, 14:49    [22018795]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
приведи пример
https://learn.javascript.ru/arguments-pseudoarray
https://learn.javascript.ru/es-function#comments
18 ноя 19, 15:12    [22018818]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
mad_nazgul
Member

Откуда:
Сообщений: 4926
mayton
Можно передать аргументы как тип Any. Базовый тип для всех скаловских типов.
А внутри сделать что-то вроде паттерн-матчинг. Но это КМК не ООП. Это немножко другое.


Так в Scala и так паттерн-матчинг "из коробки".

По идее, т.к. в Scala есть вывод типов.
То Any нужен мало лишь когда.

Все через всякие лямбдочки-монадки.

С одной стороны строгая типизация и компилятор если что ругнется.

С другой смотришь на код и думаешь "что ты такое?!". :-)
18 ноя 19, 15:14    [22018821]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя,
Ок. Пример понял.

Для объединения нескольких объектов в один:
var vasya = {
  age: 21,
  name: 'Вася',
  surname: 'Петров'
};

var user = {
  isAdmin: false,
  isEmailConfirmed: true
};

var student = {
  university: 'My university'
};

// добавить к vasya свойства из user и student
copy(vasya, user, student);

alert( vasya.isAdmin ); // false
alert( vasya.university ); // My university
18 ноя 19, 15:24    [22018839]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
mad_nazgul
С одной стороны строгая типизация и компилятор если что ругнется.

С другой смотришь на код и думаешь "что ты такое?!". :-)
да.))
18 ноя 19, 15:25    [22018840]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
mad_nazgul
С другой смотришь на код и думаешь "что ты такое?!". :-)
тут всё зависит от уровня владения языком на котором написан этот код.
пришлось мне однажды разбираться - ну пересилил свой подход, встал на позицию автора кода и как бы ничего , переделал то. что требовалось, оставив остальное как есть.
18 ноя 19, 15:32    [22018847]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
забыл ник
Member

Откуда:
Сообщений: 3048
Scala может, scala может... все что угодно!

Люди умудряются даже булеву логику написать исключительно на типах - https://medium.com/swlh/boolean-logic-using-the-scala-compiler-41d83e6891ec

После scala(если хорошо разобрался с системой типов) смотришь на Java, как ты смотрел со стороны Java на Javascript.

Я бы не сказал что она более гибкая, но если код скомпилировался я прктически уверен что все ок, в связи с этим и тесты пишутся в 3 раза меньше.

Я тоже не понимаю зачем может понадобиться переменное количетво параметров. Разные параметры = разная функция, в крайнем случае принимать как параметр функцию высшего порядка
18 ноя 19, 15:34    [22018849]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
забыл ник
Member

Откуда:
Сообщений: 3048
PetroNotC Sharp
вадя,
Ок. Пример понял.

Для объединения нескольких объектов в один:
var vasya = {
  age: 21,
  name: 'Вася',
  surname: 'Петров'
};

var user = {
  isAdmin: false,
  isEmailConfirmed: true
};

var student = {
  university: 'My university'
};

// добавить к vasya свойства из user и student
copy(vasya, user, student);

alert( vasya.isAdmin ); // false
alert( vasya.university ); // My university


Омг. Какое унылое говнище...
А что будет если сделать copy(vasya, user, window)?

У ублюдочного javascript просто нету перегрузки методов вот и крутятся бедняги...
18 ноя 19, 15:43    [22018861]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
забыл ник

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

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

Фактически речь идет об одном параметре-списке. И соотв. логика которая процессит эти все параметры - должна
быть набита проверками на количество этих параметров чтоб принимать решения.

Единственный полезный кейс который я видел это ... инициализация тогоже списка через varargs в Guava для
разных коллекций (List, Set).

Лучше выкрутится перегруженной функцией или опциональным параметром с дефолт-значением. Это хотя-бы
дает какие-то уровни строгости.
18 ноя 19, 15:56    [22018875]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя,
Второй вопрос.
Почему ты не пишешь на промисах?
22008985
18 ноя 19, 16:17    [22018904]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
Вот это разве красиво?
zip.createReader(new zip.BlobReader(document.querySelector('#file').files[0]), function (zipReader) {
// get all entries from the zip
            zipReader.getEntries(function (entries) {
                entries.forEach(function (entry) {
                    loa.map.push(entry);
                });
18 ноя 19, 16:22    [22018913]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
mad_nazgul
Member

Откуда:
Сообщений: 4926
вадя
тут всё зависит от уровня владения языком на котором написан этот код.
пришлось мне однажды разбираться - ну пересилил свой подход, встал на позицию автора кода и как бы ничего , переделал то. что требовалось, оставив остальное как есть.


Так это понятно, что "если кто-то сделал, другой завсегда сломать может".
Но блин нафиг на Scala слишком легко написать всякий изврат.
Что-то подобное я испытал/видел в Clipper'е.
Там тоже через блоки кода можно было сделать самомодифицирующуюся программу.
18 ноя 19, 16:24    [22018917]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
Вот это разве красиво?
zip.createReader(new zip.BlobReader(document.querySelector('#file').files[0]), function (zipReader) {
// get all entries from the zip
            zipReader.getEntries(function (entries) {
                entries.forEach(function (entry) {
                    loa.map.push(entry);
                });

а что тут не понятного?
createReader "метод" объекта zip
в который передаётся вновь создаваемый объект zip.BlobReader , параметром которого является элемент document.querySelector('#file').files[0] (сам догадаешься что за элемент?)
и колбэк function (zipReader)

ну и дальше по списку...

это язык javascript, нравится тебе он или нет.

тоже самое можно и про sql сказать, если глубоко вникать всех sql - mssql, mysql, postgresql, oracle...
18 ноя 19, 19:42    [22019151]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
Почему ты не пишешь на промисах?
они не всегда уместны.
18 ноя 19, 19:49    [22019157]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
забыл ник
У ублюдочного javascript просто нету перегрузки методов вот и крутятся бедняги...
а оно ему надо?

забыл ник
А что будет если сделать copy(vasya, user, window)?
если у бабушки был бы x... это был бы дедушка...
18 ноя 19, 19:55    [22019162]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
это язык javascript, нравится тебе он или нет.
не только мне не нравится.
Может уже все на промисах пишут?
18 ноя 19, 20:19    [22019178]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
PetroNotC Sharp
Почему ты не пишешь на промисах?
они не всегда уместны.
это не ответ
18 ноя 19, 20:20    [22019179]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
забыл ник
Member

Откуда:
Сообщений: 3048
PetroNotC Sharp
вадя
это язык javascript, нравится тебе он или нет.
не только мне не нравится.
Может уже все на промисах пишут?


на чистом скрипте уже мало кто пишет. В основном все спрятано в angularах и reactах, там все на промисах, да
18 ноя 19, 20:29    [22019185]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
вадя
пропущено...
они не всегда уместны.
это не ответ
ты думаешь если б я написал на промисах тебе бы понравилось больше?
PetroNotC Sharp
Может уже все на промисах пишут?
открой сайты и по F12 посмотри что и на чем
я большой разницы не вижу - на чем удобно , но том и пишу
18 ноя 19, 20:34    [22019188]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2481
вадя
если б я написал на промисах тебе бы понравилось больше?
а ты сможешь?
Я пока вижу что мне не нравится. Об этом и сказал.
18 ноя 19, 22:48    [22019234]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2732
так как с недавних пор я стал специалистом по Vaadin
я бы написла на оленях
вчера, 00:10    [22019249]     Ответить | Цитировать Сообщить модератору
 Re: вадя. Встретил твой код на хабре.  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 16799
PetroNotC Sharp
а ты сможешь?
Я пока вижу что мне не нравится. Об этом и сказал.
пока обхожусь без них , это нагляднее.
с точки зрения наглядности мне не нравится и использование листенеров, элемены в одном месте , а их обработчики совсем в другом (хорошим примером был недавний вопрос тут как найти их, человеку так и не удалось) , но со стороны возможностей - листенеры удобнее.
возможно что и промисы удобнее, но пока можно обходиться и без них (в отличие от листенеров) - стараюсь обходиться. не претендую на абсолютную правильность мнения , но как-то так.
вчера, 06:28    [22019283]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4 5      [все]
Все форумы / Java Ответить