欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Angular中使用MathJax遇到的問(wèn)題有哪些-創(chuàng)新互聯(lián)

這篇文章主要介紹了Angular中使用MathJax遇到的問(wèn)題有哪些,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)是一家專注于做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),洪洞網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:洪洞等地區(qū)。洪洞做網(wǎng)站價(jià)格咨詢:18982081108

MathJax簡(jiǎn)介

MathJax是一款運(yùn)行在瀏覽器中的開(kāi)源數(shù)學(xué)符號(hào)渲染引擎,使用MathJax可以方便的在瀏覽器中顯示數(shù)學(xué)公式,不需要使用圖片。目前,MathJax可以解析Latex、MathML和ASCIIMathML的標(biāo)記語(yǔ)言。MathJax項(xiàng)目于2009年開(kāi)始,發(fā)起人有American Mathematical Society, Design Science等,還有眾多的支持者,個(gè)人感覺(jué)MathJax會(huì)成為今后數(shù)學(xué)符號(hào)渲染引擎中的主流,也許現(xiàn)在已經(jīng)是了。

個(gè)人其實(shí)也不算鉆研,因?yàn)閷?shí)際上 MathJax 很簡(jiǎn)單,調(diào)用 MathJax.Hub.Queue(['Typeset', MathJax.Hub, this.element.nativeElement]); 就可以渲染一個(gè)元素(這個(gè) this.element.nativeElement 是從 Angular 中調(diào)用它 DOM 的語(yǔ)法),這個(gè) .Queue 實(shí)際上是 MathJax 自己實(shí)現(xiàn)的回調(diào)格式,語(yǔ)法非常清奇,參數(shù)個(gè)數(shù)不定,每個(gè)都是數(shù)組,代表一個(gè)回調(diào),順序執(zhí)行。比如這個(gè) ['Typeset', MathJax.Hub, this.element.nativeElement] ,第一個(gè)元素是方法名,第二個(gè)元素是 this ,之后的元素都是參數(shù)……

我們可以看到這個(gè)就相當(dāng)于執(zhí)行 MathJax.Hub.Typeset(this.element.nativeElement) ,那為啥不執(zhí)行這個(gè)?因?yàn)檫@方法是同步的,會(huì)導(dǎo)致頁(yè)面十分卡。于是 MathJax 就自己封裝了一個(gè)異步隊(duì)列(它的 API 可能幾百年沒(méi)改了)

我們說(shuō)回 Angular。因?yàn)橐?markdown,我的思路是用 marked 封裝一個(gè) directive。那么我們就應(yīng)該在 marked 渲染完成之后用 MathJax 去 Typeset 這個(gè)組件。但真的這樣做了,卻產(chǎn)生了奇妙的效果——切換頁(yè)面之后,要等將近一分鐘才開(kāi)始渲染。我在它的隊(duì)列里放了幾個(gè) log,發(fā)現(xiàn)每個(gè)元素都被 queue 了 4 次,幾十個(gè)元素,難怪要一分鐘才開(kāi)始渲染下一頁(yè)的內(nèi)容,即使大部分 markdown 里面根本沒(méi)有數(shù)學(xué)。

這時(shí)候我開(kāi)始灰心了,這個(gè)問(wèn)題就沒(méi)有解決辦法了嗎?絕望之時(shí),我想到能不能直接 Typeset document,結(jié)果是可以的,而且十分快。所以渲染并不慢,可能是渲染的初始化過(guò)程比較慢。那么這時(shí)候方案就出來(lái)了,我們可以盡量減少渲染次數(shù),同時(shí)只渲染 document。只要這個(gè)渲染還在進(jìn)行,那么有再多的元素 queue 上來(lái),我們也只當(dāng)作 queue 了一次。

于是我就寫(xiě)了這么個(gè) service:

@Injectable()
export class MathjaxService {
 public isQueued = false;
 public isRunning = false;
 window: any;
 constructor(@Inject(PLATFORM_ID) private platformId: Object) {
 if (isPlatformBrowser(this.platformId)) {
 this.window = window as any;
 }
 }
 finishRunning() {
 this.isRunning = false;
 if (this.isQueued) {
 this.queueChange();
 }
 }
 queueChange() {
 if (this.isRunning) {
 this.isQueued = true;
 } else {
 this.isQueued = false;
 this.isRunning = true;
 if (isPlatformBrowser(this.platformId)) {
 if (this.window.MathJax) {
  this.window.MathJax.Hub.Config({
  messageStyle: 'none',
  tex2jax: {
  // preview: 'none',
  inlineMath: [['$', '$']],
  processEscapes: true
  }
  });
  this.window.MathJax.Hub.Queue(['log', console, 'start'], ['Typeset', this.window.MathJax.Hub, document], ['log', console, 'end'], ['finishRunning', this]);
 }
 } else {
 this.finishRunning();
 }
 }
 }
}

事實(shí)證明,它能圓滿完成任務(wù),它也就是現(xiàn)在運(yùn)行在 這個(gè)網(wǎng)站 上的代碼。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Angular中使用MathJax遇到的問(wèn)題有哪些”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司,關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、網(wǎng)站設(shè)計(jì)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

本文標(biāo)題:Angular中使用MathJax遇到的問(wèn)題有哪些-創(chuàng)新互聯(lián)
URL鏈接:http://chinadenli.net/article16/dhpedg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、商城網(wǎng)站、網(wǎng)站導(dǎo)航、動(dòng)態(tài)網(wǎng)站、網(wǎng)站排名、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)