2012-02-05 3 views
2

Очистка холста дает совершенно разные возможности для разных браузеров. См. http://jsperf.com/canvas-clearing2.Работает на разных браузерех на основе браузера

Мне нужно очистить холст в каждом кадре и как я это делаю, оказывает огромное влияние на производительность сафари для мобильных устройств и производительность сафари на рабочем столе. Desktop Safari любит canvas.width = width, но мобильное сафари предпочитает canvas.drawRect().

Есть ли способ определить, что браузер - это то, что работает на другом JavaScript на его основе? Я бы предпочел сделать это через JavaScript, а не на стороне сервера.

Кроме того, я обнаружил, что $ .browser jQuery не помогает, поскольку он не различает сафари для мобильных устройств и настольные сафари. объект навигатора имеет схожие проблемы.

+0

это может помочь вам обнаружить мобильный сафари: HTTP: //alan.edward.es/posts/detecting-the-awes omeness-что-это-мобильный-сафари / –

ответ

3

Ориентация на определенные браузеры всегда является проблемой. Хотя есть определенные способы сделать это, это не особенно удобный способ сделать это, потому что есть много разных браузеров и версий каждого браузера, и эти браузеры меняются со временем, таким образом, какие браузеры оптимизированы, с помощью которых код может изменять все время. Это создает довольно головную боль. Например, мобильный Safari на iPod Touch имеет очень разные характеристики производительности, чем мобильный Safari на каждом поколении iPhone или iPad.

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

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

Таким образом, ваш код всегда будет использовать самую быструю версию вашего кода во всех браузерах, теперь и навсегда, без необходимости поддерживать/тестировать zillions браузеров, чтобы знать, что должно использоваться для каждого.

1

Я нахожусь с jfriend00, если вы ищете более долгосрочные, более надежные решения. Тем не менее, вы все равно можете получить довольно много информации с определенными функциями в Javascript и использовать это в своих интересах.

Проверьте это:

http://notnotmobile.appspot.com/

Другие ресурсы

Навигатор объекта: http://www.w3schools.com/js/js_browser.asp

Browser Detect: http://www.quirksmode.org/js/detect.html

Смежные вопросы