国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

你對SPA單頁面的理解,它的優(yōu)缺點分別是什么?如何實現(xiàn)SPA應(yīng)用呢?

這篇具有很好參考價值的文章主要介紹了你對SPA單頁面的理解,它的優(yōu)缺點分別是什么?如何實現(xiàn)SPA應(yīng)用呢?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、什么是SPA

SPA(single-page application),翻譯過來就是單頁應(yīng)用SPA是一種網(wǎng)絡(luò)應(yīng)用程序或網(wǎng)站的模型,它通過動態(tài)重寫當(dāng)前頁面來與用戶交互,這種方法避免了頁面之間切換打斷用戶體驗在單頁應(yīng)用中,所有必要的代碼(HTML、JavaScript和CSS)都通過單個頁面的加載而檢索,或者根據(jù)需要(通常是為響應(yīng)用戶操作)動態(tài)裝載適當(dāng)?shù)馁Y源并添加到頁面頁面在任何時間點都不會重新加載,也不會將控制轉(zhuǎn)移到其他頁面舉個例子來講就是一個杯子,早上裝的牛奶,中午裝的是開水,晚上裝的是茶,我們發(fā)現(xiàn),變的始終是杯子里的內(nèi)容,而杯子始終是那個杯子結(jié)構(gòu)如下圖

我們熟知的JS框架如react,vue,angular,ember都屬于SPA

二、SPA和MPA的區(qū)別

上面大家已經(jīng)對單頁面有所了解了,下面來講講多頁應(yīng)用MPA(MultiPage-page application),翻譯過來就是多頁應(yīng)用在MPA中,每個頁面都是一個主頁面,都是獨(dú)立的當(dāng)我們在訪問另一個頁面的時候,都需要重新加載html、css、js文件,公共文件則根據(jù)需求按需加載如下圖

單頁應(yīng)用與多頁應(yīng)用的區(qū)別
你對SPA單頁面的理解,它的優(yōu)缺點分別是什么?如何實現(xiàn)SPA應(yīng)用呢?,前端,前端框架
單頁應(yīng)用優(yōu)缺點
優(yōu)點:

  • 具有桌面應(yīng)用的即時性、網(wǎng)站的可移植性和可訪問性

  • 用戶體驗好、快,內(nèi)容的改變不需要重新加載整個頁面

  • 良好的前后端分離,分工更明確
    缺點:

  • 不利于搜索引擎的抓取

  • 首次渲染速度相對較慢

三、實現(xiàn)一個SPA
原理
監(jiān)聽地址欄中hash變化驅(qū)動界面變化
用pushsate記錄瀏覽器的歷史,驅(qū)動界面發(fā)送變化

實現(xiàn)
hash 模式
核心通過監(jiān)聽url中的hash來進(jìn)行路由跳轉(zhuǎn)

// 定義 Router  
class Router {  
    constructor () {  
        this.routes = {}; // 存放路由path及callback  
        this.currentUrl = '';  
          
        // 監(jiān)聽路由change調(diào)用相對應(yīng)的路由回調(diào)  
        window.addEventListener('load', this.refresh, false);  
        window.addEventListener('hashchange', this.refresh, false);  
    }  
      
    route(path, callback){  
        this.routes[path] = callback;  
    }  
      
    push(path) {  
        this.routes[path] && this.routes[path]()  
    }  
}  
  
// 使用 router  
window.miniRouter = new Router();  
miniRouter.route('/', () => console.log('page1'))  
miniRouter.route('/page2', () => console.log('page2'))  
  
miniRouter.push('/') // page1  
miniRouter.push('/page2') // page2  

history模式
history 模式核心借用 HTML5 history api,api 提供了豐富的 router 相關(guān)屬性先了解一個幾個相關(guān)的api

  • history.pushState 瀏覽器歷史紀(jì)錄添加記錄
  • history.replaceState修改瀏覽器歷史紀(jì)錄中當(dāng)前紀(jì)錄
  • history.popState 當(dāng) history 發(fā)生變化時觸發(fā)
// 定義 Router  
class Router {  
    constructor () {  
        this.routes = {};  
        this.listerPopState()  
    }  
      
    init(path) {  
        history.replaceState({path: path}, null, path);  
        this.routes[path] && this.routes[path]();  
    }  
      
    route(path, callback){  
        this.routes[path] = callback;  
    }  
      
    push(path) {  
        history.pushState({path: path}, null, path);  
        this.routes[path] && this.routes[path]();  
    }  
      
    listerPopState () {  
        window.addEventListener('popstate' , e => {  
            const path = e.state && e.state.path;  
            this.routers[path] && this.routers[path]()  
        })  
    }  
}  
  
// 使用 Router  
  
window.miniRouter = new Router();  
miniRouter.route('/', ()=> console.log('page1'))  
miniRouter.route('/page2', ()=> console.log('page2'))  
  
// 跳轉(zhuǎn)  
miniRouter.push('/page2')  // page2  

四、題外話:如何給SPA做SEO

下面給出基于Vue的SPA如何實現(xiàn)SEO的三種方式

SSR服務(wù)端渲染
將組件或頁面通過服務(wù)器生成html,再返回給瀏覽器,如nuxt.js

四、題外話:如何給SPA做SEO
下面給出基于Vue的SPA如何實現(xiàn)SEO的三種方式

SSR服務(wù)端渲染
將組件或頁面通過服務(wù)器生成html,再返回給瀏覽器,如nuxt.js

靜態(tài)化
目前主流的靜態(tài)化主要有兩種:(1)一種是通過程序?qū)討B(tài)頁面抓取并保存為靜態(tài)頁面,這樣的頁面的實際存在于服務(wù)器的硬盤中(2)另外一種是通過WEB服務(wù)器的 URL Rewrite的方式,它的原理是通過web服務(wù)器內(nèi)部模塊按一定規(guī)則將外部的URL請求轉(zhuǎn)化為內(nèi)部的文件地址,一句話來說就是把外部請求的靜態(tài)地址轉(zhuǎn)化為實際的動態(tài)頁面地址,而靜態(tài)頁面實際是不存在的。這兩種方法都達(dá)到了實現(xiàn)URL靜態(tài)化的效果

使用Phantomjs針對爬蟲處理
原理是通過Nginx配置,判斷訪問來源是否為爬蟲,如果是則搜索引擎的爬蟲請求會轉(zhuǎn)發(fā)到一個node server,再通過PhantomJS來解析完整的HTML,返回給爬蟲
目前主流的靜態(tài)化主要有兩種:(1)一種是通過程序?qū)討B(tài)頁面抓取并保存為靜態(tài)頁面,這樣的頁面的實際存在于服務(wù)器的硬盤中(2)另外一種是通過WEB服務(wù)器的 URL Rewrite的方式,它的原理是通過web服務(wù)器內(nèi)部模塊按一定規(guī)則將外部的URL請求轉(zhuǎn)化為內(nèi)部的文件地址,一句話來說就是把外部請求的靜態(tài)地址轉(zhuǎn)化為實際的動態(tài)頁面地址,而靜態(tài)頁面實際是不存在的。這兩種方法都達(dá)到了實現(xiàn)URL靜態(tài)化的效果

使用Phantomjs針對爬蟲處理
原理是通過Nginx配置,判斷訪問來源是否為爬蟲,如果是則搜索引擎的爬蟲請求會轉(zhuǎn)發(fā)到一個node server,再通過PhantomJS來解析完整的HTML,返回給爬蟲文章來源地址http://www.zghlxwxcb.cn/news/detail-684652.html

到了這里,關(guān)于你對SPA單頁面的理解,它的優(yōu)缺點分別是什么?如何實現(xiàn)SPA應(yīng)用呢?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • AES和DES算法的區(qū)別,分別有哪些優(yōu)缺點

    AES和DES算法的區(qū)別,分別有哪些優(yōu)缺點

    AES(高級加密標(biāo)準(zhǔn))和DES(美國數(shù)據(jù)加密標(biāo)準(zhǔn))是對稱加密算法。AES是美國聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。DES是對稱性加密里常見的一種,是一種使用密鑰加密的塊算法。那么AES和DES算法的區(qū)別在哪里,這兩者有哪些優(yōu)缺點呢? ? 什么是AES? AES一般指高級加密標(biāo)準(zhǔn),又

    2023年04月08日
    瀏覽(22)
  • vue -- 單頁面應(yīng)用和多頁面應(yīng)用區(qū)別及優(yōu)缺點

    Vue單頁面應(yīng)用(SPA) 和 多頁面應(yīng)用(MPA) 是兩種常見的前端應(yīng)用架構(gòu)模式,它們在開發(fā)方式、性能以及用戶體驗方面有著不同的特點。 單頁面應(yīng)用(SPA ): SPA 是一種基于JavaScript的應(yīng)用程序,通過動態(tài)更新頁面的方式來實現(xiàn)交互和導(dǎo)航。 整個應(yīng)用只有一個HTML頁面,所有的

    2024年01月19日
    瀏覽(24)
  • 【基礎(chǔ)類】—三欄頁面布局的方案和優(yōu)缺點

    【基礎(chǔ)類】—三欄頁面布局的方案和優(yōu)缺點

    float浮動、absolute絕對定位、flex彈性盒子、table表格布局、grid網(wǎng)格布局 浮動 float 實現(xiàn)總結(jié): 1-1 通過左右浮動,實現(xiàn)左右兩欄的占位 1-2 通過內(nèi)容margin, 實現(xiàn)中間內(nèi)容寬度自適應(yīng) 1-3 right的元素必須放在center元素的前面,因為需要有.right元素通過右浮動 絕對定位 absolute 實現(xiàn)總結(jié)

    2024年02月14日
    瀏覽(27)
  • 深入理解CommonJS和ES Module? 優(yōu)缺點?什么時候用?

    在webpack中,我們可以使用多種模塊化方式,如CommonJS和ES Module。 CommonJS是什么? CommonJS是一種模塊化規(guī)范,它是Node.js采用的模塊化規(guī)范,它的主要特點是同步加載模塊,模塊輸出的是一個值的拷貝,而不是引用。CommonJS的優(yōu)點是簡單易用,可以在服務(wù)器端和客戶端使用,缺點

    2024年02月03日
    瀏覽(24)
  • SwiftUI的優(yōu)缺點

    SwiftUI的優(yōu)缺點

    2019年WWDC大會上,蘋果在壓軸環(huán)節(jié)向大眾宣布了基于Swift語言構(gòu)建的全新UI框架——SwiftUI,開發(fā)者可通過它快速為所有的Apple平臺創(chuàng)建美觀、動態(tài)的應(yīng)用程序。推薦大量使用struct代替類。 SwiftUI 就是?種聲明式的構(gòu)建界面的用戶接口工具包。 SwiftUI使用聲明式的語法構(gòu)建UI,我們

    2024年02月13日
    瀏覽(27)
  • 量化交易的優(yōu)缺點

    ? ?量化交易其實就像 《物種起源》 里的物種一樣,隨著計算機(jī)與 智能 機(jī)器人的發(fā)展 , 投資量化是時代 發(fā)展 的必然產(chǎn)物 。 所謂 能者為先 適 者生存,這是 放諸四海 皆為本 的 生存法則 。在 現(xiàn)代 科技欣欣向榮的發(fā)展 環(huán)境下 , 量化交易 所 表現(xiàn)出 的 種種 優(yōu)勢 , 使 全

    2023年04月08日
    瀏覽(94)
  • springcloud 的優(yōu)缺點:

    優(yōu)點: 服務(wù)拆分粒度更細(xì),有利于資源重復(fù)利用,有利于提高開發(fā)效率 可以更精準(zhǔn)的制定優(yōu)化服務(wù)方案,提高系統(tǒng)的可維護(hù)性 微服務(wù)架構(gòu)采用去中心化思想,服務(wù)之間采用Restful等輕量級通訊,比ESB更輕量 適于互聯(lián)網(wǎng)時代,產(chǎn)品迭代周期更短 缺點: 微服務(wù)過多,治理成本高

    2023年04月08日
    瀏覽(94)
  • RabbitMQ有什么優(yōu)缺點

    為什么使用MQ?MQ的優(yōu)點 簡答 異步處理 - 相比于傳統(tǒng)的串行、并行方式,提高了系統(tǒng)吞吐量。 應(yīng)用解耦 - 系統(tǒng)間通過消息通信,不用關(guān)心其他系統(tǒng)的處理。 流量削鋒 - 可以通過消息隊列長度控制請求量;可以緩解短時間內(nèi)的高并發(fā)請求。 日志處理 - 解決大量日志傳輸。 消息

    2024年02月11日
    瀏覽(88)
  • SSM框架的優(yōu)缺點

    SSM的優(yōu)缺點 Mybatis 的優(yōu)缺點 優(yōu)點 1、與JDBC相比,減少了50%以上的代碼量 2、最簡單的持久化框架、小巧簡單易學(xué) 3、SQL代碼從程序代碼中徹底分離出來,可重用 4、提供XML標(biāo)簽,支持編寫動態(tài)SQL 5、提供映射標(biāo)簽,支持對象與數(shù)據(jù)庫的ORM字段關(guān)系映射 缺點 1、SQL語句編寫工作量

    2024年02月03日
    瀏覽(83)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包