Лучший способ инициировать загрузку?

Это сообщение означает, что по какой-то причине сборщик мусора занимает слишком много времени (по умолчанию 98% от всего времени процессора процесса) и восстанавливает очень мало памяти в каждом прогоне (по умолчанию 2% от кучи) .

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

Чтобы ваше приложение не впитывало процессорное время без каких-либо действий , JVM выбрасывает этот Error, так что у вас есть шанс диагностировать проблему.

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

Для получения подробной информации этой статьи ознакомьтесь с этой частью ).

12
задан Anant Singh---Alive to Die 5 June 2015 в 07:18
поделиться

10 ответов

Можно также сделать обновление meta, которое поддерживает большинство браузеров. Download.com помещает один в теге noscript.

<meta http-equiv="refresh" content="5;url=/download.php?doc=123.zip"/>
16
ответ дан 26 October 2019 в 05:09
поделиться

У меня обычно просто есть Сценарий PHP, который производит файл непосредственно к браузеру с соответствующим Типом контента

if(file_exists($filename)) {
    header("Pragma:  public");
    header("Expires:  0");
    header("Cache-Control:  must-revalidate, pre-check=0");
    header("Cache-Control:  private", false);
    header("Content-Type:  " . $content-type);
    header("Content-Disposition:  attachment; filename=\"" . basename($filename) . "\";" );
    header("Content-Transfer-Encoding:  binary");
    header("Content-Length:  " . filesize($filename));

    readfile("$filename");
}else{
    print "ERROR:  the file " . basename($filename) . " could not be downloaded because it did not exist.";
}

Единственный недостаток - то, что, так как это устанавливает HTTP-заголовок, он имеет быть названным, прежде чем у Вас будет любой другой вывод.

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

5
ответ дан 26 October 2019 в 05:09
поделиться

Hoi!

@Nathan: Я решил сделать точно что: Имейте мой "getfile.php", загружают весь необходимый материал и затем делают a

header("Location: ./$path/$filename");

для разрешения самому браузеру и непосредственно делают то, что он думает, корректно, делают с файлом. Это даже хорошо работает в Opera со мной.

Но это будет проблемой в средах, где никакой прямой доступ к файлам не позволяется, в этом случае необходимо будет найти другой путь! (Благодарите Discordia, мои файлы являются общедоступным PDFs!)

С наилучшими пожеланиями, Basty

1
ответ дан 26 October 2019 в 05:09
поделиться

Обновление: Я решил отказаться от этого подхода и вместо этого просто подарить пользователю ссылку на фактический файл. Мое обоснование - это:

Мои начальные попытки инициируемой сервером загрузки были заблокированы браузером. Это получило меня взгляды: "браузер является правильным. Как это знает, что это - законная загрузка? Это должно заблокировать загрузку, которая, очевидно, не инициируется пользователями".

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

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

15
ответ дан 26 October 2019 в 05:09
поделиться

Одна выгода - то, что можно встретиться с проблемами с IE (версия 6 в особенности), если заголовки не настраиваются "правильно".

Удостоверьтесь, что Вы устанавливаете правильный Тип контента, но также и полагаете, что установка опций Cache для IE (по крайней мере), позволяет кэшироваться. Если файл - один, пользователь может открыть, а не сохранить (например, документ MS Word), ранние версии IE должны кэшировать файл, поскольку они вручают от "открытого" запроса применимому приложению, указывая на файл, который был загружен в кэше.

Существует также связанная проблема, если кэш пользователя IE6 будет полон, то это правильно не сохранит файл (таким образом, когда применимое приложение заставит руку от открывать его, это будет жаловаться, что файл поврежден.

Можно также хотеть к повороту любых gzip действий с загрузками также (для IE)

IE6/IE7 оба имеют проблемы с большими загрузками (например, 4.x Концерты...) не вероятный сценарий, так как IE даже не имеет менеджера загрузок, но чего-то для знания.

Наконец, IE6 иногда приятно не обрабатывает загрузку "нажатие", если это инициировалось из вложенного iframe. Я не абсолютно уверен, что инициировало проблему, но я нахожу, что легче с IE6 избежать этого сценария.

1
ответ дан 26 October 2019 в 05:09
поделиться

Как насчет того, чтобы изменить местоположение для указания на новый файл? (например, путем изменения window.location)

0
ответ дан 26 October 2019 в 05:09
поделиться

Относительно не указания на текущее окно к загрузке. По моему опыту, можно все еще показать, "пожертвуйте" страницу, начиная с загрузок (как долго, когда они отправляют, корректные заголовки) на самом деле не обновляют окно браузера. Я делаю это для экспорта csv на одном из моих сайтов, и, что касается пользователя, что он просто открывается безопасное окно файла. Таким образом, я рекомендовал бы простое метаперенаправление, поскольку Soldarnal показал.

0
ответ дан 26 October 2019 в 05:09
поделиться

Только для подведения итогов у Вас есть 2 цели:

  1. запустите процесс загрузки
  2. покажите пользователю страницу с пожертвовать опции

Для достижения этого, я сделал бы следующее:

Когда Ваш пользователь отправляет форму, он получает получающуюся страницу с пожертвовать опции и текст, говоря, что его загрузка запустится через 5 секунд. И в главном разделе этой страницы Вы помещаете код META, как заявил Soldarnal: <meta http-equiv = "обновляют" содержание = "5; URL =/download.php? doc=123.zip>

И это - все.

0
ответ дан 26 October 2019 в 05:09
поделиться

Я всегда только что делал iframe, который указывает на файл.

<iframe src="/download.exe" frameborder="0" height="0" width="0"><a href="/download.exe">Click here to download.</a></iframe>
0
ответ дан 26 October 2019 в 05:09
поделиться
<a href="normaldownload.zip" onclick="use_dhtml_or_ajax_to_display_page()">

Текущая страница незатронута, если загрузка сохраняется. Просто удостоверьтесь, что загрузка не открывается в том же окне (надлежащий тип MIME или Content-Disposition) и Вы сможете показать что-либо.

См. больше полного ответа

0
ответ дан 26 October 2019 в 05:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: