Ухудшение корректно с Рабочими по сети

От http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes :

До Python 2.1, классы старого стиля были единственным ароматом, доступным пользователю.

понятие класса (старого стиля) не связано с понятием типа: если x экземпляр класса старого стиля, то x.__class__ определяет класс x, но type(x) всегда .

Это отражает то, что все экземпляры старого стиля, независимо от их класса, реализованы с единственным встроенным типом, названным экземпляром.

Модернизированные классы были представлены в Python 2.2 для объединения понятия класса и типа . Модернизированный класс является просто пользовательским типом, ни больше, ни меньше.

, Если x является экземпляром модернизированного класса, то type(x) обычно то же как x.__class__ (хотя этому не гарантируют †“модернизированный экземпляр класса, разрешен переопределить значение, возвращенное для x.__class__).

главная мотивация для представления модернизированных классов должна предоставить объединенной объектной модели полную метамодель .

Это также обладает многими непосредственными преимуществами, как способность разделить на подклассы большинство встроенных типов или введение "дескрипторов", которые включают вычисленные свойства.

По причинам совместимости, классы все еще старого стиля значением по умолчанию .

Модернизированные классы создаются путем определения другого модернизированного класса (т.е. тип) как родительский класс или "тип верхнего уровня" объект, если никакой другой родитель не необходим.

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

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

Python 3 только имеет модернизированные классы .

, Неважно, если Вы разделяете на подклассы от object или нет, классы являются новым стилем в Python 3.

19
задан Joel Martinez 22 July 2009 в 13:46
поделиться

5 ответов

Это старая проблема веб-разработки: что что делать с браузерами, которые не поддерживают то, что вам нужно. В настоящее время я рекомендую использовать Web Workers только для сложных, длительных задач, которые можно разбить на части и по какой-то причине нельзя выполнить на стороне сервера. Таким образом, если у вас нет Web Workers, вы просто ждете дольше. В противном случае вам придется испортить свой код с помощью оберток и прочего, чего вы попытаетесь избежать позже. Моя стратегия деградации происходит сразу после загрузки страницы.

псевдокод функции onload:

if( window.Worker /*check for support*/ )
    someObject.myFunction = function() { /*algorithm that uses Web Workers*/ }
else
    someObject.myFunction = function() { /* sad face */ }

Вам все равно придется написать алгоритм дважды, но вам все равно придется это сделать, если вы хотите поддерживать браузеры без Web Workers. Таким образом, возникает интересный вопрос: стоит ли тратить время (и деньги) на то, чтобы написать что-то дважды, чтобы это могло работать немного быстрее для некоторых людей?

11
ответ дан 30 November 2019 в 04:59
поделиться

Проект Bespin имеет (то, что они называют) фасад , который позволяет им запускать код JavaScript в Web Workers, Gears Workers и, если они недоступны в основном потоке .

2
ответ дан 30 November 2019 в 04:59
поделиться

Вот что сказал Джон Ресиг , отвечая на комментарий в своем блоге

Я думал об этом - но это будет сложно. Вам придется с самого начала использовать в коде обработки setTimeout / setInterval (этот код в конечном итоге будет работать как в рабочем, так и на обычном веб-сайте). Таким образом, хотя результат будет немного медленнее для браузеров с поддержкой рабочих процессов, по крайней мере, он будет работать в обоих случаях.

1
ответ дан 30 November 2019 в 04:59
поделиться

Пережевывая это несколько дней, я написал статью в своем блоге:
http://codecube.net/2009/07/cross-platform-javascript-webworker/

Идея в том, что в В случаях, когда WebWorker не определен, существует API-оболочка, которая просто использует встроенные методы.

4
ответ дан 30 November 2019 в 04:59
поделиться

У меня была забавная проблема: моя задача без поддержки Web Worker была слишком медленной в Firefox (не реагирующий скрипт), но достаточно быстрой во всех других современных браузерах. С Web Workers она работала во всех браузерах, кроме Opera (10.50), которая вообще не поддерживает Web Workers, но Opera прекрасно работала и без них.

Поэтому я написал WorkerFacade, который использует API Web Worker, когда он доступен, или имитирует API с небольшими дополнениями к настоящему JS Worker. Вы можете найти WorkerFacade как gist на GitHub. Мне помогло, возможно, поможет и кому-то другому.

0
ответ дан 30 November 2019 в 04:59
поделиться
Другие вопросы по тегам:

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