首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WebView的MathJax渲染非常慢

WebView的MathJax渲染非常慢
EN

Stack Overflow用户
提问于 2019-05-24 14:01:58
回答 1查看 979关注 0票数 1

我将一个包含Tex格式的数学的HTML传递给一个WebView,它使用MathJax库(通过CDN传递)来呈现网页。问题是,应用程序需要很长时间才能完成整个过程。在我的Galaxy S7边缘上有一个很好的wifi连接,渲染一个非常短的字符串(比如$$X^2$$ )几乎需要2分钟。我的问题是,

  1. 程序的哪一部分实际上是造成这种延迟的原因?
  2. 如何改进?

代码:

代码语言:javascript
运行
复制
package com.example.mutas.mathjaxpilot;

import android.Manifest;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final String front = "<html>" +
                "    <head>" +
                "        <script src=\'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML\' async></script>" +
                "    </head>" +
                "    <body>";

        final String back = " </body>" +
                "</html>" ;


        final WebView webView = (WebView) findViewById(R.id.webView);
        final EditText editText = (EditText) findViewById(R.id.editText);

        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);


        editText.setOnClickListener(
                new EditText.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String content = editText.getText().toString();
                        content = front + "\\( " + content + " \\)" + back;
                        webView.loadData(content, "text/html; charset=utf-8", "UTF-8");
                    }
                }
        );


        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.INTERNET)
                != PackageManager.PERMISSION_GRANTED) {
            // Permission is not granted
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.INTERNET},
                    1);
        }
        //webView.loadUrl("file:///android_asset/test.html");
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-24 14:50:25

很难说,是什么原因造成了这种拖延。我要做的是隔离问题,一步一步地减少代码,直到它只启动一个空白应用程序。

一开始我会尝试的一件事是避免网络请求。由于这是一个本地安装的应用程序,您可以将"MathJax.js“库作为您的应用程序的资源,这样您就可以省去web请求了。

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=no">
    ...
    <script src="file:///android_asset/html/MathJax.js"></script>
</head>
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56294244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档