powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / вадя. Встретил твой код на хабре.
109 сообщений из 109, показаны все 5 страниц
вадя. Встретил твой код на хабре.
    #39885833
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя. Вот кусок твоего кода встретил на хабре.
Консультируй.
Тут ошибка что не очишаются файлы блоб в локальном хранилище хрома.
Каждый вызов этой функции создаёт новый здоровый блоб на клиенте.
пример ссылки:
blob: http://localhost:8080/02a0f2dc-8835-41cb-a561-0796347ce613
chrome://blob-internals/

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
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);
		}
		);
}
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39885910
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Код: sql
1.
window.pic = null;

вот это в js не работает что сборка мусора убрала блоб. Так как пишут что ссылка все равно осталась.
Вроде только в java работает.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886021
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Тут ошибка что не очишаются файлы блоб в локальном хранилище хрома.
на что влияет?
не замечал влияния на что либо...
window.pic = null;
и это не тут проявляется..
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886022
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
буду исследовать...
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886033
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
на что влияет?
даже если блоб 500 мегов отправлен на сервер, он остается в памяти пока живет window.
Память растет, потом переходит на своп и работает все медленнее.
Нужно каким то образом очищать после отправки так как на клиенте он уже не нужен.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886057
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
даже если блоб 500 мегов отправлен на сервер, он остается в памяти пока живет window.
Память растет, потом переходит на своп и работает все медленнее.
Нужно каким то образом очищать после отправки так как на клиенте он уже не нужен.
провел исследования:
очистил историю хрома
очистил всё временное с помощью ccleaner.
загрузил зип 1.5гиг 614 файлов
пока загружались - эти блобы отображались в DevTools во вкладке источники.
при переходе на другую страницу и обратно - упоминание об этих блобах теряются...

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

так что твои опасения напрасны.
про своп - ну тут вопрос спорный - простое "удаление" - это дело сборщика мусора, но как и когда он запускается - это никому не известно.
в инете - много вопросов про удаления блобов, но все они не сказываются на их удалении из "локального хранилища" , по крайне из списка не удаляются.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886065
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

даже во время обработки файлов память не шибко изменяется
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886069
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
пока загружались - эти блобы отображались в DevTools во вкладке источники.
то есть, 614 файлов загрузились и висят в памяти пока загружается 615 ый файл?
- зачем тогда асинхронность в загрузке?
- что делать на сотовых и планшетах где всего оперативы 1 гигабайт?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886070
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
даже во время обработки файлов память не шибко изменяется

Введи
chrome://blob-internals/
А то термин "не шибко" как то не инженерно)
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886072
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
так что твои опасения напрасны.
ты так в своей техподдержке отвечаешь?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886074
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
то есть, 614 файлов загрузились и висят в памяти пока загружается 615 ый файл?
ничего не висит - на картинке же видно как изменяется память.
даже сам зиповский файл не загружается полностью.
загружается только список зазипованных файлов с инфой их расположения и прочей информацией.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886076
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Код: sql
1.
2.
window.pic = null;
pic = new Image();

этот код НЕ РАБОЧИЙ
Глобальная переменная pic затирается и память не освобождается.
До уничтожения страницы.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886078
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
PetroNotC Sharp
то есть, 614 файлов загрузились и висят в памяти пока загружается 615 ый файл?
ничего не висит - на картинке же видно как изменяется память.
даже сам зиповский файл не загружается полностью.
загружается только список зазипованных файлов с инфой их расположения и прочей информацией.
ты тупой?
Набери в хроме
chrome://blob-internals/
Что видишь?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886081
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
chrome://blob-internals/
Что видишь?
открыл - смотрел
ты можешь сам - найти строчки с местом хранения
там есть путь - открой в проводнике (не закрывая хром) увидишь список этих "блобов"
закрой хром и все они пропадут
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886082
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Глобальная переменная pic затирается и память не освобождается.
До уничтожения страницы.
освобождением памяти занимается сборщик мусора.
когда он запускается - не известно
возможно когда появится необходимость
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886083
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
закрой хром и все они пропадут
молодец программист - закрой exe. и память очистится))))
Итого повтор вопроса. 614 блобов там есть пока качаю и уже перекачал 615?
Да или нет?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886086
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
освобождением памяти занимается сборщик мусора.
если у объекта нет рабочих ссылок, неуч.
Двойка.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886087
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пришлось самому искать.
Первая ссыль говорит что в js нужен оператор delete переменная.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886090
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Первая ссыль говорит что в js нужен оператор delete переменная.
ты думаешь я не нашёл этого?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886100
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
PetroNotC Sharp
Первая ссыль говорит что в js нужен оператор delete переменная.
ты думаешь я не нашёл этого?
дак вставь. У тебя упрямства выше крыши.
На планшете 1 гиг оперативы
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886103
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
если у объекта нет рабочих ссылок
это подразумевается само сабой.
даже после delete windows.pic
если откроешь chrome://blob-internals/ ты увидишь список блобов
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886105
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
PetroNotC Sharp
если у объекта нет рабочих ссылок
это подразумевается само сабой.
даже после delete windows.pic
если откроешь chrome://blob-internals/ ты увидишь список блобов
вижу ты начал работать.
Продолжай.
Реши проблему.
Я могу запустить твою функцию при ответе по AJAX.
Напиши её тут.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886106
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А то придется идти в js ветку(
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886107
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,
на оперативку это не влияет.
но в папке \Google\Chrome\User Data\Default\blob_storage этих файлов , действительно, нет
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886108
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
PetroNotC Sharp,
на оперативку это не влияет.
но в папке \Google\Chrome\User Data\Default\blob_storage этих файлов , действительно, нет
щас проверю
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886110
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Реши проблему.

достаточно такого
Код: javascript
1.
2.
3.
                            delete window.pic;
                            window.pic = null;
                            pic = new Image();
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886112
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
PetroNotC Sharp
Реши проблему.

достаточно такого
Код: javascript
1.
2.
3.
                            delete window.pic;
                            window.pic = null;
                            pic = new Image();

ты проверил?
Я же тоже пробовал вчера.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886118
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
ты проверил?
Я же тоже пробовал вчера.
да , только что .
в chrome://blob-internals/ список висит до тех пор пока находишься на странице
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886124
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
пока находишься на странице
сколько раз говорить. Нужно освободить ПОСЛЕ отправки фацла на сервер. Блоб на клиенте после уже не нужен.
Если ты говоришь, что там просто список и ресурсов нет, то я позже проверю.
Отпишусь.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886141
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
вадя
PetroNotC Sharp,
на оперативку это не влияет.
но в папке \Google\Chrome\User Data\Default\blob_storage этих файлов , действительно, нет
щас проверю
опять ты не прав.
С чего взял что все ресурсы по этому пути?
Вставил твоё delete.
Потом поработал твоим кодом.
И вот что в конце (скрин).
Причем, мы ВИДИМ все 2 гига отправленных картинок на клиенте.
Значит не очистилось?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886150
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Об чем вы спорите? О поведении специфичном по отношению к Chrome?

Пробовали FireFox, Opera?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886151
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Это дорого. Хотя бы на одном работало.
Да и вадя рекомендовал свой код на хром).
У меня начинается импорт менее секунды и на 500ом файле падает до 3 сек на один файл.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886155
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понял что дорого?

Воспроизвести дефект в другом env?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886156
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я не понял что дорого?

Воспроизвести дефект в другом env?
фокс вообще завис на 400 ой картинке
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886157
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
При разработке хром выиграл.
Я ушел на него с фокса.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886186
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
опять ты не прав.
С чего взял что все ресурсы по этому пути?
Вставил твоё delete.
Потом поработал твоим кодом.
И вот что в конце (скрин).
Причем, мы ВИДИМ все 2 гига отправленных картинок на клиенте.
Значит не очистилось?

ты убери delete и посмотри ресурсы по пути \Google\Chrome\User Data\Default\blob_storage
потом вставь delete и снова посмотри
то что в скрине это просто список, статический.
он просто отображает обработанные блобы. хром не хранит блобы в памяти, он их выгружает в \Google\Chrome\User Data\Default\blob_storage, что видно по использованию памяти на 22011241
в позиции HEAP. (это без delete)
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886194
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
то что в скрине это просто список, статический.
два вопроса
- почему я после всей загрузки могу посмотреть все 500 рисунков?
- почему скорость падает с 3х изображений в сек до изображение в 4 сек
?
Это все было выше, но ты невнимателен.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886199
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
- почему я после всей загрузки могу посмотреть все 500 рисунков?
где ты их можешь посмотреть?
PetroNotC Sharp
- почему скорость падает с 3х изображений в сек до изображение в 4 сек
у пеня постоянная
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886203
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
где ты их можешь посмотреть?

))) вадя.
chrome://blob-internals/
В самом низу урл адреса.
Вбей в адрес и увидишь фотки jpg.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886205
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Хром сам выбирает куда сохранять блобы. В свою бд, в кэш папку, на диск или....
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886208
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
посмотри ресурсы по пути \Google\Chrome\User Data\Default\blob_storage
там пусто в обоих вариантах. Он не туда сохраняет.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886209
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
В самом низу урл адреса.

blob: http://localhost:8080/гуид блоба
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886218
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton,
При разработке хром выиграл.
Я ушел на него с фокса.

Это прекрасно...
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886250
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,
сделал так
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
                            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)'
на этой строке
Код: javascript
1.
this.context.drawImage(window.pic, x, y, w, h, 0, 0, w, h);


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

следовательно напрашивается вывод - информацию о блобе хранит только отладчик хрома
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886253
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хром полностью невиноват?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886262
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Хром полностью невиноват?
ну у нас разный хром
у меня из окон, у Петро - вроде как из яблока.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886264
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
следовательно напрашивается вывод - информацию о блобе хранит только отладчик хрома

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


вопрос занимательный - где это сохраняется?
в кЭше?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886302
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
Петро - вроде как из яблока.
portable на винде. В андроиде это боевой. Но и фокс не работает на винде.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886303
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Код: sql
1.
createObjectURL

вот эта делает блоб. И ее надо обнулить
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886305
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
вопрос занимательный - где это сохраняется?
в кЭше?
вроде да. Но там закрытый формат.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886306
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
загружен в pic.src
а зачем тебе переменная pic так высоко в пространстве окна?
Ты ее в клас Load и потом класс грохнуть.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886313
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886318
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
а зачем тебе переменная pic так высоко в пространстве окна?
Ты ее в клас Load и потом класс грохнуть.
поробуй
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886319
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
PetroNotC Sharp
а зачем тебе переменная pic так высоко в пространстве окна?
Ты ее в клас Load и потом класс грохнуть.
поробуй
я не могу в твоем коде разобраться)).
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886348
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,
тебе куда скинуть?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886396
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Почту kpetro@mail.ru.
Посмотрю уже завтра.
Спс.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886676
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Ну вот, можешь же когда захочешь)).
И чё три страницы спорил).
вадяpic убрана из глобальных.
блобы удаляются
this.pic - теперь переменная класса
Код: java
1.
window.URL.revokeObjectURL(this.pic.src);


// delete this.pic; - это по вкусу, но роли не играет
У меня не исходная с хабра, а модифицированная уже своя версия.
Я там выход из цикла делал, ошибку в innerHtml, глобальные const переменные. Проверку файлов на русские буквы и вложенность.
Поэтому вручную счас буду твои правки вносить в Свою версию твоего js.
Нужно время.
Спасибо.
Если что, отпишусь.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886706
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Ты вынес upload() выше уровнем?
Class Load
crop()
load_pic2()
upload()
Но оствил в классе или еще выше?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886708
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
Class Load
      crop()
             load_pic2()
                     upload()
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886709
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коммент дай на функции.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886713
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Што у вас за возня под столом? Давайте паблишите сорцы. А то некрасиво другие ведь читают. А вы крысите важную инфу топика.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886724
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
/* 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;
        }
    }



});
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886737
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Проверь еще раз. Не работает.
1. Заремуй строку обнуления имени файла zip для загрузки на сервер после всей работы.
2. Два раза загрузи 500 файлов подряд два раза нажав кнопку.
Итого будет 1000 блоб на клиенте.
Так?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886740
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Капец. Яж не юащик. А html дадите?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886742
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Заремуй строку обнуления имени файла zip

//this.current_files.innerHTML = '' ;
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886752
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
<%@ 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>
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886794
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Хотел выложить тест из 3х файлов.
Оказвается не работает так
Проблема в протоколе file:/// - воркеры запрещены при исполнении скриптов из локального файла.
https://toster.ru/q/251740
)))
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886886
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Проверь еще раз. Не работает.
1. Заремуй строку обнуления имени файла zip для загрузки на сервер после всей работы.
2. Два раза загрузи 500 файлов подряд два раза нажав кнопку.
Итого будет 1000 блоб на клиенте.
Так?
работает, проверил.
блобов нет. их адреса появляются в отладчике, но попробуй из открыть - будет сообщение файл удалён

что значит два раза нажав кнопку?
все изменения на картинке
первое false на true - меняет синхронный режим на асинхронный
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886891
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,
не надо пугать браузеры этим
Код: html
1.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


необходимо и достаточно такого
Код: html
1.
<!DOCTYPE html>
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39886918
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
что значит два раза нажав кнопку?
ну типа накапливаются при повторном нажатии. Но раз ты говоришь, что только адреса то ОК.
Теперь уже понед.посмотрю.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39887004
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
ну типа накапливаются при повторном нажатии. Но раз ты говоришь, что только адреса то ОК.
если по правилам - то надо блокировать эту кнопку на время загрузки.
исправлю.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39887899
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Да. Вроде расход ресурсов на клиенте решили общими усилиями. 500 картинок переданных уже не видны на клиенте.
Я тебе написал две просьбы.
Проверить тормоза в конце цикла и перестал идти прогрессбар.
Письмо получил?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39888311
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,
видел, ответил
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890399
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
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 и в самом низу убрать один параметр, то ничего не заругается но работать не будет.
?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890402
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно поставить побольше утверждений типа

Код: javascript
1.
typeof x === "SomeType"



и надеятся что рантайм выдаст больше информации по несоотвествию.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890408
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
рантайм
это у заказчика?
Надо при разработке.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890440
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Но вот скажи, как ты пишешь на js без типизации.
Если перед параметром this поставить false и в самом низу убрать один параметр, то ничего не заругается но работать не будет.
ну с типизацией у js туго.
но как-то мне это не мешает. немного больше внимания и всё.
передать параметры в функцию можно несколькими способами и передать можно любое количество, неизвестное на момент выполнения
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890447
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
но как-то мне это не мешает
да. Я знаю.
Ты вот сегодня, взял пропустил файлы не jpeg молчком, в консоль которую никто не видит. И всё.
А в корпоративе все строго. Стоп загрузки и ошибку (изумление смайлик) на экран.
Для энтерпрайза js не удобен.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890485
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
А в корпоративе все строго. Стоп загрузки и ошибку (изумление смайлик) на экран.
Для энтерпрайза js не удобен.
тут вопрос спорный, что лучше. ты привык к одному и поэтому тяжело, но иногда количество передаваемых параметров неизвестно и тут уже без возможностей js не обойтись.
тот же энтерпрайз пишут и на node. и ничего.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890490
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton
рантайм
это у заказчика?
Надо при разработке.

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

В строгих языках таких как Scala, типизация возведена в нечто вроде главного смысла.
Тоесть ты думаешь о типах каждую секунду.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890495
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
но иногда количество передаваемых параметров неизвестно
приведи пример
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890497
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В строгих языках таких как Scala, типизация возведена в нечто вроде главного смысла.
Тоесть ты думаешь о типах каждую секунду.
здорово. Гибкость и типизация одновременно?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890498
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гибкость в каком смысле?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890509
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
У него вроде преимущество перед java в гибкости. Я не спец в нем.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890519
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не уверен. Его создатель - Мартин Одерский полагал что мультипарадигменность - основная фича.
Тоесть можно ООП-стиль. Можно ФП. Вместе.

Насчет гибкости.. ну не знаю. Термин это слишком гумантитарный. Гибким может быть например матрас.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890525
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
мультипарадигменность
ок
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890528
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Упс... Подумал.
В скале наверно решений вопроса вади больше вариантов.
Когда надо передать гибко параметры.
Это я и назал гибкость.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890535
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю как вопрос Вади натянуть на топик.

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

Я имею в виду подход другой.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890553
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890556
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Можно передать аргументы как тип Any. Базовый тип для всех скаловских типов.
А внутри сделать что-то вроде паттерн-матчинг. Но это КМК не ООП. Это немножко другое.


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

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

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

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

С другой смотришь на код и думаешь "что ты такое?!". :-)
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890571
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Ок. Пример понял.

Для объединения нескольких объектов в один:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890572
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
С одной стороны строгая типизация и компилятор если что ругнется.

С другой смотришь на код и думаешь "что ты такое?!". :-)
да.))
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890577
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
С другой смотришь на код и думаешь "что ты такое?!". :-)
тут всё зависит от уровня владения языком на котором написан этот код.
пришлось мне однажды разбираться - ну пересилил свой подход, встал на позицию автора кода и как бы ничего , переделал то. что требовалось, оставив остальное как есть.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890578
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scala может, scala может... все что угодно!

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

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

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

Я тоже не понимаю зачем может понадобиться переменное количетво параметров. Разные параметры = разная функция, в крайнем случае принимать как параметр функцию высшего порядка
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890587
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
вадя,
Ок. Пример понял.

Для объединения нескольких объектов в один:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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 просто нету перегрузки методов вот и крутятся бедняги...
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890597
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник

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

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

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

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

Лучше выкрутится перегруженной функцией или опциональным параметром с дефолт-значением. Это хотя-бы
дает какие-то уровни строгости.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890617
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Второй вопрос.
Почему ты не пишешь на промисах?
22008985
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890621
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это разве красиво?
Код: java
1.
2.
3.
4.
5.
6.
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);
                });
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890623
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
тут всё зависит от уровня владения языком на котором написан этот код.
пришлось мне однажды разбираться - ну пересилил свой подход, встал на позицию автора кода и как бы ничего , переделал то. что требовалось, оставив остальное как есть.


Так это понятно, что "если кто-то сделал, другой завсегда сломать может".
Но блин нафиг на Scala слишком легко написать всякий изврат.
Что-то подобное я испытал/видел в Clipper'е.
Там тоже через блоки кода можно было сделать самомодифицирующуюся программу.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890775
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Вот это разве красиво?
Код: javascript
1.
2.
3.
4.
5.
6.
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...
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890778
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Почему ты не пишешь на промисах?
они не всегда уместны.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890781
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
У ублюдочного javascript просто нету перегрузки методов вот и крутятся бедняги...
а оно ему надо?

забыл ник
А что будет если сделать copy(vasya, user, window)?
если у бабушки был бы x... это был бы дедушка...
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890790
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
это язык javascript, нравится тебе он или нет.
не только мне не нравится.
Может уже все на промисах пишут?
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890791
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
PetroNotC Sharp
Почему ты не пишешь на промисах?
они не всегда уместны.
это не ответ
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890796
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
вадя
это язык javascript, нравится тебе он или нет.
не только мне не нравится.
Может уже все на промисах пишут?


на чистом скрипте уже мало кто пишет. В основном все спрятано в angularах и reactах, там все на промисах, да
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890798
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
вадя
пропущено...
они не всегда уместны.
это не ответ
ты думаешь если б я написал на промисах тебе бы понравилось больше?
PetroNotC Sharp
Может уже все на промисах пишут?
открой сайты и по F12 посмотри что и на чем
я большой разницы не вижу - на чем удобно , но том и пишу
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890836
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
если б я написал на промисах тебе бы понравилось больше?
а ты сможешь?
Я пока вижу что мне не нравится. Об этом и сказал.
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890846
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так как с недавних пор я стал специалистом по Vaadin
я бы написла на оленях
...
Рейтинг: 0 / 0
вадя. Встретил твой код на хабре.
    #39890867
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
а ты сможешь?
Я пока вижу что мне не нравится. Об этом и сказал.
пока обхожусь без них , это нагляднее.
с точки зрения наглядности мне не нравится и использование листенеров, элемены в одном месте , а их обработчики совсем в другом (хорошим примером был недавний вопрос тут как найти их, человеку так и не удалось) , но со стороны возможностей - листенеры удобнее.
возможно что и промисы удобнее, но пока можно обходиться и без них (в отличие от листенеров) - стараюсь обходиться. не претендую на абсолютную правильность мнения , но как-то так.
...
Рейтинг: 0 / 0
109 сообщений из 109, показаны все 5 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / вадя. Встретил твой код на хабре.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]