#django #performance #internet-explorer #loading
#django #Производительность #internet-explorer #Загрузка
Вопрос:
Я только начинаю изучать Django, создаю проект на своем компьютере под управлением 64-разрядной Windows 7, Python 2.7, Django 1.3.
В принципе, что бы я ни написал, оно загружается в Chrome и Firefox мгновенно. Но для IE (версии 9) он просто останавливается там и ничего не делает. Я могу загрузить «http://127.0.0.1:8000 » включите IE и оставьте компьютер включенным на несколько часов, и он не загружается. Иногда, когда я обновляю пару раз или перезапускаю IE, это будет работать. Если я что-то изменяю в коде, опять же, Chrome и Firefox мгновенно отражают изменения, тогда как IE этого не делает — если он вообще загружает страницу.
Что происходит? Я здесь схожу с ума….
Комментарии:
1. Я не уверен, что заставляет IE вести себя таким образом, но я видел точно такое же поведение. Я занимаюсь разработкой в Linux и при кроссплатформенном тестировании запускаю сервер разработки с определенным IP: 8000. Я заметил, что IE сделает несколько запросов, а затем остановится. Я перезапущу сервер разработки, и он снова заработает для нескольких запросов.
2. на моем Mac (Mountain Lion) я могу использовать сервер разработки только с Chrome, в Firefox и Safari он застрял : (
Ответ №1:
Это может быть связано с этой проблемой:https://code.djangoproject.com/ticket/16099
По сути, сервер разработки не является многопоточным, и если браузер открывает соединение, а затем пытается установить второе соединение, чтобы фактически получить данные, оно может зависнуть навсегда.
Редактировать:
Также смотрите Эту проблему:https://code.djangoproject.com/ticket/15178
Если вы можете предоставить способ воспроизвести проблему, мы, возможно, сможем найти исправление.
Кроме того, если бы вы могли попробовать последнюю версию разработки и посмотреть, исправляет ли это, мы недавно выпустили новый патч, который добавляет возможность многопоточности в команду runserver.
Комментарии:
1. Я думаю, что именно в этом и заключается проблема. Как только я закрывал другие браузеры и использовал IE только для открытия страницы на сервере разработки, это срабатывало каждый раз. Но это все еще немного медленнее, чем Chrome или Firefox … но я думаю, мне просто придется с этим смириться.
2. Действительно, я заполнил тикет 15178 и только что подтвердил, что использование многопоточного сервера разработки исправляет это. Исправление находится в редакции 16427.
Ответ №2:
Я не уверен, что у вас такая же проблема, как у меня. Но я также столкнулся с той же белой страницей в IE9, и, по-видимому, это было вызвано тем, что html-тег «fieldset» скрывает мою форму.
Попробуйте проверить свой html-код или проверьте совместимость html-тегов с IE9. Надеюсь, это поможет.
Ответ №3:
Я разрабатываю с Windows 7, 64bit, django 1.3, py 2.6 и я всегда проверяю функциональность сервера разработки в IE, Firefox, Safari и Chrome. В моей новейшей системе установлен IE9, а в моей старой системе — IE8. Я также заметил проблему зависания. Я обнаружил, что когда я использовал 127.0.0.1: 8000, он зависал и требовал обновления, чтобы заставить его работать. Если я запустил сервер разработки, используя определенный IP-адрес моего сервера разработки, проблема, казалось, исчезла. Например, python manage.py runserver 192.168.1.134:8000
Похоже, это что-то очень специфичное для IE9. и если вы загуглите, больше людей увидят эту проблему.
Ответ №4:
у меня тоже была эта проблема, это обходное решение устраняет. работает только для django <= 1.3
http://nedbatchelder.com/blog/201103/quick_and_dirty_multithreaded_django_dev_server.html
@Andrew Barber
РЕДАКТИРОВАТЬ резюме / как я это сделал:
создайте файл с именем managec.py (c = параллельный)
вставьте туда следующий код:
#!/usr/bin/env python
#
# A clone of manage.py, with multi-threadedness monkeypatched in.
import os, sys
from django.core.management import execute_manager
try:
import settings # Assumed to be in the same directory.
except ImportError:
sys.stderr.write(
"Error: Can't find the file 'settings.py' in the directory containing %r. "
"It appears you've customized things.n"
"You'll have to run django-admin.py, passing it your settings module.n"
"(If the file settings.py does indeed exist, it's causing an ImportError somehow.)n"
% __file__
)
sys.exit(1)
def monkey_patch_for_multi_threaded():
# This monkey-patches BaseHTTPServer to create a base HTTPServer class that
# supports multithreading
import BaseHTTPServer, SocketServer
OriginalHTTPServer = BaseHTTPServer.HTTPServer
class ThreadedHTTPServer(SocketServer.ThreadingMixIn, OriginalHTTPServer):
def __init__(self, server_address, RequestHandlerClass=None):
OriginalHTTPServer.__init__(self, server_address, RequestHandlerClass)
BaseHTTPServer.HTTPServer = ThreadedHTTPServer
if __name__ == "__main__":
monkey_patch_for_multi_threaded()
execute_manager(settings)
запустите свой сервер разработки с помощью ./managec.py запустите сервер 8080 (или любой другой порт, который вы используете)
наслаждайтесь 🙂
Комментарии:
1. Не могли бы вы обобщить ответ здесь?
Ответ №5:
Иногда это случается, когда у вас необычный код, например, у меня есть строка, принимающая входные данные от пользователей перед HttpResponse. Удалите этот код и обновите сервер. Это будет работать как шарм.