摘要:綜合比較,符合標(biāo)準(zhǔn)規(guī)范的無(wú)疑是最好的選擇。在不支持的瀏覽器上可以使用。對(duì)于單頁(yè)面應(yīng)用來(lái)說(shuō),使用儲(chǔ)存模板也是個(gè)很好的選擇。把請(qǐng)求也緩存,當(dāng)數(shù)據(jù)過(guò)期后,再去請(qǐng)求。
學(xué)習(xí)了一段時(shí)間的react,完成了一個(gè)WebApp。
這是一個(gè)pixiv.net的插畫圖片墻,我把它叫做pixivの「ラブライブ」発見(jiàn),意思就是發(fā)現(xiàn)pixiv.net上有關(guān)ラブライブ LoveLive!學(xué)園偶像祭的作品。
項(xiàng)目很簡(jiǎn)單,就是一個(gè)瀑布流無(wú)限加載的列表,主要用到的技術(shù)棧:
react
react-router
react-mdl google的material design lite框架在react上的組裝
react-masonry-component jquery.masonry瀑布流布局插件在react上的實(shí)現(xiàn)
關(guān)于AJAX請(qǐng)求,有很多選擇:fetch、superagent、axios,甚至是"jQuery.ajax"。綜合比較,符合標(biāo)準(zhǔn)規(guī)范的fetch無(wú)疑是最好的選擇。在不支持的瀏覽器上可以使用fetch-polyfill。
其他應(yīng)該沒(méi)什么好說(shuō)的,主要是性能問(wèn)題也花了一段時(shí)間。
這個(gè)應(yīng)用中有一個(gè)長(zhǎng)列表,每一個(gè)圖片組件上都綁定了一個(gè)onClick事件,如果列表數(shù)量上來(lái)了,性能問(wèn)題就很明顯,解決方案主要有以下兩點(diǎn):
不要在onClick中進(jìn)行bind(this)操作,因?yàn)檫@樣每次render都會(huì)生成一個(gè)新的函數(shù),性能影響可想而知。同樣的,使用箭頭函數(shù)()=>{}也是一樣的道理,它也會(huì)自動(dòng)bind一次。比較好的方案是在constructor中事先bind好,Don"t Use Bind When Passing Props 這篇文章提到了共9種解決方案,各有利弊。
我們都知道,react循環(huán)中的列表必須賦予一個(gè)key屬性,這個(gè)屬性不是給用戶自己用的,而是給 React 自己用的。你必須為數(shù)組中的元素提供唯一的 key 屬性,我們可能會(huì)直接使用數(shù)組的index作為key,這其實(shí)是多次一舉的,因?yàn)槟悴惶峁?b>key的話,react默認(rèn)采用的正是index。比較好的方案是使用shortid這個(gè)包來(lái)生成,主要參考了Index as a key is an anti-pattern
其它的一些微小的優(yōu)化:
把javascript緩存在localStorage里,版本變動(dòng)后才會(huì)去服務(wù)器下載新的js,解決方案來(lái)自 移動(dòng) WEB 通用優(yōu)化策略介紹(一)。localStorage緩存靜態(tài)資源,在移動(dòng)端和高版本的瀏覽器上還是值得嘗試的的。雖然可以通過(guò)瀏覽器緩存靜態(tài)文件,但在一些情況下(比如f5刷新),還是會(huì)發(fā)起 cache-control:max-age=0 的請(qǐng)求。出于節(jié)約請(qǐng)求的目的,可以改造一下靜態(tài)資源的請(qǐng)求方式,將所有的靜態(tài)資源都通過(guò)一個(gè)請(qǐng)求來(lái)加載。這樣的話,無(wú)論如何,頁(yè)面都只會(huì)發(fā)這一個(gè)請(qǐng)求,如果靜態(tài)文件有更新,則服務(wù)端返回更新的文件內(nèi)容,通過(guò)js插入到頁(yè)面中并緩存在localStorage中;如果靜態(tài)文件沒(méi)有更新,則直接從localStorage中取出來(lái),插入到頁(yè)面中就可以了。對(duì)于移動(dòng)端來(lái)說(shuō),將js和css這些靜態(tài)文件的請(qǐng)求縮減成一個(gè),還是很有效果的,具體可以參考一下百度移動(dòng)版,使用的就是這個(gè)方案。對(duì)于單頁(yè)面應(yīng)用來(lái)說(shuō),使用localStorage儲(chǔ)存模板也是個(gè)很好的選擇。
把a(bǔ)jax請(qǐng)求也緩存,當(dāng)數(shù)據(jù)過(guò)期后,再去請(qǐng)求api。
另外推薦一個(gè)react各種問(wèn)題集合:react-faq
項(xiàng)目地址在這里:
https://pixiv.moe
https://github.com/LoveLiveSunshine/pixiv.moe
放一張GIF預(yù)覽圖:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80809.html
摘要:拿寫爬蟲,聽(tīng)起來(lái)貌似有些不靠譜爬蟲,大多人對(duì)于爬蟲的理解都停留在使用后端語(yǔ)言如寫的爬蟲。圖中顯示的那一個(gè)長(zhǎng)條是原本不存在與原網(wǎng)站中的,而是通過(guò)油猴腳本自動(dòng)載入腳本來(lái)創(chuàng)建的。最大作用是將網(wǎng)站類似于花瓣網(wǎng)中的圖片作品快速的抓取下來(lái)。 拿JavaScript寫爬蟲,聽(tīng)起來(lái)貌似有些不靠譜? 爬蟲,大多人對(duì)于爬蟲的理解都停留在使用后端語(yǔ)言如Python寫的爬蟲。但是實(shí)際上,使用客戶端JavaSc...
摘要:云存儲(chǔ)問(wèn)題,帳號(hào)系統(tǒng),多端同步最開(kāi)始只想做瀏覽器本地的存儲(chǔ),使用提供的存在本地就。具體解決方案云存儲(chǔ)及帳號(hào)系統(tǒng)使用提供的存儲(chǔ)服務(wù)解決。 0. 目錄 要開(kāi)發(fā)的是什么項(xiàng)目 1.1 想法開(kāi)端 1.2 應(yīng)該有什么功能? 開(kāi)發(fā)需要解決的核心問(wèn)題 具體解決方案 3.1 帳號(hào)系統(tǒng) 3.2 存儲(chǔ)服務(wù) 3.3 使用`LeanEngine`做反防盜鏈中轉(zhuǎn)接口 3.4 Chrome 插件實(shí)現(xiàn) 對(duì)去...
小編寫這篇文章的主要目的,是來(lái)給大家做出一個(gè)介紹,介紹關(guān)于python爬蟲的一些技能技巧,包括怎么才能夠爬取pixiv圖片,作為一個(gè)小白來(lái)講,還是需要一定的實(shí)戰(zhàn)的,那么,具體的實(shí)戰(zhàn)技能,下面就給大家詳細(xì)的解答下。 自從接觸python以后就想著爬pixiv,之前因?yàn)樘葑佑悬c(diǎn)問(wèn)題就一直擱置,最近換了個(gè)梯子就迫不及待試了下?! ∨老x無(wú)非request獲取html頁(yè)面然后用正則表達(dá)式或者beaut...
摘要:準(zhǔn)備工作在這里,我們登錄微信獲取好友信息,使用的是模塊處理并生成最終的圖像借助模塊。生成微信好友墻制作微信好友墻,就像以前的大字報(bào),把我們下載的好友頭像逐一貼上去即可。首先設(shè)定好微信好友墻的尺寸,使用方法。 目錄:0 引言1 環(huán)境2 代碼實(shí)現(xiàn)3 后記 0 引言 前段時(shí)間,微信朋友圈開(kāi)始出現(xiàn)了一種曬照片新形式,微信好友墻,即在一張大圖片中展示出自己的所有微信好友的頭像。 效果如下圖,出于...
摘要:在月和月的時(shí)候停止開(kāi)發(fā),然后在三月份的時(shí)候上線了第一個(gè)版本。簡(jiǎn)述一個(gè)類似下稱站的網(wǎng)站,主要實(shí)現(xiàn)有用戶管理,圖片管理,評(píng)論回復(fù)等功能。前端項(xiàng)目實(shí)現(xiàn)基于的框架,設(shè)計(jì)風(fēng)格,過(guò)渡平滑,詳細(xì)代碼碎片整合和輪子制作會(huì)后續(xù)發(fā)布。 首先貼上地址 展示地址:http://www.secdra.com/web前端代碼地址:https://github.com/JunJieFu/s...mobile前端代碼...
閱讀 2800·2021-09-01 10:30
閱讀 1690·2019-08-30 15:52
閱讀 979·2019-08-29 18:40
閱讀 1134·2019-08-28 18:30
閱讀 2405·2019-08-23 17:19
閱讀 1333·2019-08-23 16:25
閱讀 2711·2019-08-23 16:18
閱讀 2988·2019-08-23 13:53