導航:首頁 > 網站優化 > react服務端渲染seo

react服務端渲染seo

發布時間:2020-12-11 05:51:37

1、如何使用服務端渲染加速React APP首屏載入

本著什麼都要攙和的原則,一起來看看React Native是如何開發iOS APP。
圍觀本文需自備Mac OSX , XCode , node 以及 npm 。
做好准備之後,打開你的終端(或其他命令行利器),鍵入下面命令:
npm install -g react-native-cli


react-native init AwesomeProject

此時,我們會看到一個名為AwesomeProject的文件夾,這就是工程文件的位置。使用XCode打開AwesomeProject.xcodeproj,並點擊RUN,會看到iOS模擬器以及此項目對應的內容。

如果想要修改顯示內容,請打開index.ios.js,裡面是一堆Javascript模樣的東西。修改之後,在iOS模擬器中cmd+R就可以看到修改後的效果。
接下來,我們按照教程,來展示一張電影海報,為了方便,我們直接修改index.ios.js。
一、模擬數據
在var React = require('react-native');後面,我們先模擬一下海報所需要的數據:
var MOCKED_MOVIES_DATA = [
{title: 'Title', year: '2015', posters: {thumbnail: 'http://i.imgur.com/UePbdph.jpg'}},
];

二、渲染
我們需要展示電影的標題、年份以及縮略圖,因此我們需要下面這些東西(看起來也不難理解):
var {
AppRegistry,
Image,
StyleSheet,
Text,
View,
} = React;

下面,為了展示我們需要的內容,我們來修改一下render部分的內容。
render: function() {
var movie = MOCKED_MOVIES_DATA[0];
return (
<View style={styles.container}>
<Text>{movie.title}</Text>
<Text>{movie.year}</Text>
<Image source={{uri: movie.posters.thumbnail}} />
</View>
)
}

最直觀的感受,就像是我們在Javascript代碼中寫了HTML代碼,<View>看起來類似於<div>。(此時在iOS模擬器中cmd+R可以看到不帶樣式的效果)
接下來,我們為渲染出來的數據添加樣式:
var styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
thumbnail: {
width: 53,
height: 81,
},
});

我們可以使用flex來進行布局,看起來是個好消息。
在這時候,教程說,海報圖片(<Image>)還沒有添加樣式,我們找到<Image source={{uri: movie.posters.thumbnail}} />,添加上style={styles.thumbnail}也就是變成下面的樣子:
<Image
source={{uri: movie.posters.thumbnail}}
style={styles.thumbnail}
/>

此時在模擬器中cmd+R,可以看到效果。

2、React如何從後端獲取數據並渲染到前端

React.js 自己的定位是「A JavaScript Library for building user interface」,它的文檔稱許多人將它用作 MVC 的 V。因此,React.js 不關心你是如何嵌入後端數據的。換句話說,我們怎麼使用一個標準的 HTML 元素和後端打交道,就可以把同樣的思路運用在 React.js 創造的組件上。

比如,一個 input,可以:

<input id="name" name="name" value="<?=$name?>">
的方式從 PHP 得到變數 $name。

一個 React.js 組件也可以形如:

ReactDOM.render(React.createElement(HelloMessage, { name: "<?=$name?>" }), mountNode);
用標准元素你可以用 AJAX 得到一個值然後(比如用 jQuery 去)操作:

$.ajax(...)
.done(function(data){
$('#name').val(data.name);
});
用 React.js 時,同樣可以在 AJAX 返回時使用你自己定義的方法去更新組件。

關於維護 JSON 信息麻煩的事情,怎麼會呢?在 PHP 中 echo $var; 和 echo json_encode($var); 的麻煩程度是一個量級的。

3、react.js在伺服器端渲染有什麼好處?渲染是怎麼個流程

服務端渲染來與react沒有直接關系,你可源以理解為服務端渲染時一段js,引入到react或者vue裡面都能使用,不引入也沒關系。
使用服務端渲染的場景是當我們要求渲染時間盡量快、頁面響應速度快時(優點),才會採用伺服器渲染,並且應該「按需」對頁面進行渲染 ——「首次載入/首屏」。即服務端渲染的優勢在於:由中間層( node端 )為客戶端請求初始數據、並由node渲染頁面。
react 服務端渲染流程

服務端渲染路線:2. 請求一個html -> 2. 服務端請求數據( 內網請求快 ) -> 3. 伺服器初始渲染(服務端性能好,較快) -> 4. 服務端返回已經有正確內容的頁面 -> 5. 客戶端請求js/css文件 -> 6. 等待js文件下載完成 -> 7. 等待js載入並初始化完成 -> 8. react-dom( 客戶端 )把剩下一部分渲染完成( 內容小,渲染快 )

4、react服務端渲染 客戶端發送ajax請求怎麼處理

端渲染copy的原理是服務端完成渲染之後,JS在客戶端再次執行時發現已經存在相同的元素,所以不會再次渲染
2、比如說這樣一個場景,訪問某個地址時,服務端先請求介面獲得數據然後傳給react組件,然後renderToString再插到頁面中,返回頁面,但是JS在客戶端再次執行時是沒有這些數據的,所以會將前面服務端根據數據生成的這些元素刪掉,這個問題怎麼解決啊,求助大神
添加評論 分享

5、如何使用服務端渲染加速React APP首屏載入

渲染加速有2種實現可能:
1、AMD載入,
2、CMD載入。
CMD和AMD都是模塊載入規范,都支持非同步載入。對於依賴的模塊,AMD 是提前執行,CMD 是延遲執行。當在伺服器端渲染網站的時候,可以採取首頁載入,就近延遲,這樣就不用一次性渲染整個網站的組件,首頁載入的時候,需要考慮組件載入的順序和關聯,如果把需要的插件載入到組件上面,比如你用到了jquery或者rex,你只需要require需要的那個插件文件,根據顯示的效果,採取一定的順序渲染組件,在現在普遍情況下的網速來看,只是先載入首頁不會很慢。

6、react.js在伺服器端渲染有什麼好處?渲染是怎麼個流程

1.
有些回答中提到CPU負載和node.js效率問題。伺服器端渲染固然耗CPU,但可以使用伺服器端緩存的方式解決,並不是每個用戶訪問都需要重新渲染一
遍。而且伺服器端渲染甚至可以潛在地增加伺服器效率(這點在參考資料第二個里有提到,不過是純英文的,我有空會翻譯下)。

2. 伺服器端和客戶端可以共享某些代碼,避免重復定義。這樣可以使結構更清晰,增加可維護性

3. 首次載入頁面的速度加快。客戶端渲染的一個缺點是,當用戶第一次進入站點,此時瀏覽器中沒有緩存,需要下載代碼後在本地渲染,時間較長。而伺服器渲染則是,用戶在下載的已經是渲染好的頁面了,打開速度比本地渲染快。

4. SEO。伺服器端渲染可以讓搜索引擎更容易讀取頁面的meta信息以及其他SEO相關信息,大大增加網站在搜索引擎中的可見度。

其實並不一定要爭個好壞,伺服器端和客戶端渲染各有各的優缺點。建議根據實際需求,在某些頁面使用伺服器渲染,某些頁面使用客戶端渲染,以達到最佳解決方案。

7、react服務端渲染,css樣式問題如何解決

一原因與思路
客戶端渲染路線:1. 請求一個html -> 2. 服務端返回一個html -> 3. 瀏覽器下載回html裡面的答js/css文件 -> 4. 等待js文件下載完成 -> 5. 等待js載入並初始化完成 -> 6. js代碼終於可以運行,由js代碼向後端請求數據( ajax/fetch ) -> 7. 等待後端數據返回 -> 8. react-dom( 客戶端 )從無到完整地,把數據渲染為響應頁面
服務端渲染路線:2. 請求一個html -> 2. 服務端請求數據( 內網請求快 ) -> 3. 伺服器初始渲染(服務端性能好,較快) -> 4. 服務端返回已經有正確內容的頁面 -> 5. 客戶端請求js/css文件 -> 6. 等待js文件下載完成 -> 7. 等待js載入並初始化完成 -> 8. react-dom( 客戶端 )把剩下一部分渲染完成( 內容小,渲染快 )
說明:對同一個組件,服務端渲染「可視的」一部分( render/componentWillMount部分代碼 ),為確保組件有完善的生命周期及事件處理,客戶端需要再次渲染。即:服務端渲染,實際上也是需要客戶端進行 再次地、但開銷很小的二次渲染。

8、react 號稱可以服務端渲染 這個服務端一定要是 nodejs 寫的么

1. 你的理解些許問題。你直接輸出的 html 是沒法和 react 的 js component 直接綁定的。應為 react 內部是 vdom 方式做對比然後改變頁面的。你看見用 react 生成的 html 上面有很多的 id 沒有。哪些都是用來定位和 js component 的關系的。你自己生成的肯定沒有。所謂 server rendering ,就是在後端做這個事情。

2. 因為前端是 js 。所以後端也用 js 的話這個 component 是可以重用的。不然就只能在 py 裡面跑個 v8.然後 renderToString 把 html 搞出來然後再拼進模版里。

3. 我沒有用過 py 。但是按照 2 的思路應該是可以的。

ps>> 其實問題在於為啥你一定要做 server rendering. seo 的話現在的爬蟲大部分都有處理 js 的能力。真不行就專為 seo 做個頁面讓他爬。沒必要這么折騰。

9、react 號稱可以服務端渲染 這個服務端一定要是 nodejs 寫的么

不是非要nodejs寫。所有的後端語音都能實現這個功能,但是用nodejs寫的話,暫時來回說是最好的。
因為服務端答渲染的優勢在於:由中間件為客戶端請求初始數據、並由node渲染頁面。
因為nodejs現在的主要優勢就是作為一個中間件 在服務端和客戶端之間做一些優化處理,其他語音來說在這方面,確實還是有所欠缺。
說白了node出來就是做這個的,什麼文檔,實例代碼什麼的一抓一大把,但是其他的就基本沒這方面的文檔了。

10、react 服務端渲染啟動文件server怎麼寫

React 提供了兩個方法 renderToString 和 renderToStaticMarkup 用來將組件( DOM)輸出成 HTML 字元串,這是 React 伺服器端渲染的基礎,它移除了伺服器端對於瀏覽器環境的依賴,所以讓伺服器端渲染變成了一件有吸引力的事情。
伺服器端渲染除了要解決對瀏覽器環境的依賴,還要解決兩個問題:
前後端可以共享代碼
前後端路由可以統一處理
React 生態提供了很多選擇方案,這里我們選用 Rex 和 react-router 來做說明。
Rex
Rex 提供了一套類似 Flux 的單向數據流,整個應用只維護一個 Store,以及面向函數式的特性讓它對伺服器端渲染支持很友好。
2 分鍾了解 Rex 是如何運作的
關於 Store:
整個應用只有一個唯一的 Store
Store 對應的狀態樹(State),由調用一個 recer 函數(root recer)生成
狀態樹上的每個欄位都可以進一步由不同的 recer 函數生成
Store 包含了幾個方法比如 dispatch, getState 來處理數據流
Store 的狀態樹只能由 dispatch(action) 來觸發更改
Rex 的數據流:
action 是一個包含 { type, payload } 的對象
recer 函數通過 store.dispatch(action) 觸發
recer 函數接受 (state, action) 兩個參數,返回一個新的 state
recer 函數判斷 action.type 然後處理對應的 action.payload 數據來更新狀態樹
所以對於整個應用來說,一個 Store 就對應一個 UI 快照,伺服器端渲染就簡化成了在伺服器端初始化 Store,將 Store 傳入應用的根組件,針對根組件調用 renderToString 就將整個應用輸出成包含了初始化數據的 HTML。
react-router
react-router 通過一種聲明式的方式匹配不同路由決定在頁面上展示不同的組件,並且通過 props 將路由信息傳遞給組件使用,所以只要路由變更,props 就會變化,觸發組件 re-render。
假設有一個很簡單的應用,只有兩個頁面,一個列表頁 /list 和一個詳情頁 /item/:id,點擊列表上的條目進入詳情頁。
可以這樣定義路由,./routes.js
import React from 'react';
import { Route } from 'react-router';
import { List, Item } from './components';

// 無狀態(stateless)組件,一個簡單的容器,react-router 會根據 route
// 規則匹配到的組件作為 `props.children` 傳入
const Container = (props) => {
return (
<div>{props.children}</div>
);
};

// route 規則:
// - `/list` 顯示 `List` 組件
// - `/item/:id` 顯示 `Item` 組件
const routes = (
<Route path="/" component={Container} >
<Route path="list" component={List} />
<Route path="item/:id" component={Item} />
</Route>
);

export default routes;

與react服務端渲染seo相關的知識