Повысить производительность webView (должна быть такой же, как и собственный веб-браузер) - PullRequest
43 голосов
/ 06 сентября 2010

Мой опыт показывает, что загрузка веб-сайтов в WebView происходит намного медленнее, чем выполнение тех же действий в веб-браузере Android.Я вижу, что все файлы были загружены в мой журнал Apache, однако потребуется несколько секунд, пока страница отобразится в элементе управления WebView.Открытие той же страницы в собственном веб-браузере приведет к немедленному отображению.Кажется, что рендеринг каким-то образом поврежден.

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

Наши текущие настройки:

browserset.setLoadsImagesAutomatically(true);
browserset.setJavaScriptEnabled(true);
browserset.setDatabaseEnabled(true);
browserset.setDatabasePath("data/data/com.xxx/databases");
browserset.setDomStorageEnabled(true);
browserset.setRenderPriority(WebSettings.RenderPriority.HIGH);
browserset.setSupportZoom(false);
browserset.setUserAgentString( browserset.getUserAgentString() + " (XY ClientApp)" );
browserset.setAllowFileAccess(true);
browserset.setSavePassword(false);
browserset.setSupportMultipleWindows(false);
browserset.setAppCacheEnabled(true);
browserset.setAppCachePath("");
browserset.setAppCacheMaxSize(5*1024*1024);

Ответы [ 2 ]

17 голосов
/ 18 января 2012

Я наконец-то понял причину плохой производительности Android WebView. Обратите внимание на изображение ниже ... Он использовал 12 секунд от OnPageStarted до OnPageFinished. Потому что он должен загружать CSS, JavaScript и ... AJAX ...

the debug window:

Я заметил, что JQuery и JQueryMobile должны загрузить всю структуру DOM в Html. Так что если я лениво загружаю javascript после OnPageFinished, он должен показывать страницу быстрее.

Сначала используйте setTimeout вместо $ (document) .ready (function () {}); в JQuery. Затем используйте lazyload файл JavaScript.

Конечный html и javascript:

<script src="/css/j/lazyload-min.js" type="text/javascript"></script>

        <script type="text/javascript" charset="utf-8"> 

       loadComplete(){

          //instead of $(document).ready(function() {});

       }

        function loadscript()

        {

LazyLoad.loadOnce([

 '/css/j/jquery-1.6.2.min.js',

 '/css/j/flow/jquery.flow.1.1.min.js',  

 '/css/j/min.js?v=2011100852'

], loadComplete);

        }

        setTimeout(loadscript,10);

        </script>

Вы можете найти lazyload-min.js в http://wonko.com/post/painless_javascript_lazy_loading_with_lazyload

После этого вы можете увидеть изображение журнала ниже:

after change the javascript

Теперь от OnPageStarted до OnPageFinished требуется всего 2 секунды.

Я разместил статью на https://wenzhang.baidu.com/page/view?key=22fe27eabff3251f-1426227431

Но это было написано на китайском языке:)

17 голосов
/ 26 января 2011

Я столкнулся с подобной проблемой, и после некоторой интенсивной отладки заметил, что собственный браузер и браузер WebView, похоже, используют разные кэши.

Этот код может быть использован для отключения кэша WebView, и сделал WebView для меня намного быстрее (хотя за счет отсутствия кэширования). Обратите внимание, что он использует частные API-интерфейсы, поэтому, рискуя его, в следующих версиях код будет поврежден:

try
{
  Method m = CacheManager.class.getDeclaredMethod("setCacheDisabled", boolean.class);
  m.setAccessible(true);
  m.invoke(null, true);
}
catch (Throwable e)
{
  Log.i("myapp","Reflection failed", e);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...