基本是APP開發涉及到的相關技術的入門級介紹。涉及到的知識點與技術細節比較多,不少技術相關的內容并沒有像標題暗示的那樣沒有技術背景也可以看懂,而是涉及到許多專業的術語、原理。也有一些內容是用比喻的方法講原理。



 可以看作是給開發人員的APP開發技術的一個索引。沒有技術背景的產品經理也可以通過這本書知道需要再去詳細了解哪些IT知識,可以學習到一些常識,比如說普通的人像照片沒法轉化成矢量圖。


 總體評價3星,有參考價值。


 以下是書中一些內容的摘抄:


 1:在一些視頻網站上,所有的電影名、演員名都是立刻顯示的,電影的海報是框架加載完成之后,再發起AJAX請求拉取的。采用這樣的異步加載模式可以在最大程度上緩解用戶等待時的焦慮感。P3


 2:所以,瀏覽器在解析HTML文檔時,會把每個標簽抽象成代碼里的對象,按照這種層次分明的結構組織,這就是DOM. P4


 3:于是,有人發明了一種便捷的方法,叫作虛擬DOM。簡單來說,就是用JavaScript模擬了一棵簡單的DOM樹,然后在這上面演練所有的DOM操作,等時機成熟時再把虛擬DOM樹和真正的瀏覽器的DOM樹做對比,算出差異,一次性地改變真正的DOM樹。這兩個步驟從整體上大大提高了JavaScript操縱DOM樹的效率。P5


 4:當然,要防御它是有辦法的。開發者在引用一個第三方庫時,在頁面里寫上它的散列值,如果第三方庫被劫持,計算出的散列值與開發者寫在頁面里的不匹配,瀏覽器便不會執行它。還有另一種方案,就是使用HTTPS鏈接,這樣可以解決大部分劫持問題。P13


 5:使用WebSocket可以很好地解決這個問題.WebSocket是HTML5的一個主要特性,它是建立在TCP上的一種全雙工協議,也就是說客戶端可以向服務器發信息,服務器也可以向客戶端推送消息。WebSocket在首次建立連接時,使用普通HTTP和服務器通信,同時告訴服務器后面的交互用WebSocket的方式。P24


 6:總結一下:瀏覽器直接輸出渲染好數據的HTML頁面,簡稱“直出”.直出沒什么神秘的,只不過需要Node.js的支持,服務器和前端都用JavaScript語言編寫,相當于在服務器上也運行一個瀏覽器,它把渲染好的內容直接輸出給客戶端的瀏覽器。P25


 7:單頁的Web應用會在用戶單擊鏈接之后直接和服務器聯系(不會告訴瀏覽器頁面切換了),拉取數據。雖然看起來與多頁Web應用沒什么區別,但技術上的區別很大。P26


 8:現在,移動端上的很多應用都采用了Hybrid APP的架構。所謂Hybrid APP,就是指使用原生和H5兩種UI呈現內容。P36


 9:看到路上的街景采集車(如圖2-7所示)了嗎?如果讀者以為它們只是采集街景就想錯了。它們在大街上漫游時,就記下了附近無線路由器的MAC地址和GPS信息。日復一日年復一年,一個龐大的Wi-Fi定位數據庫就建立起來了。P42


 10:發送心跳包是有代價的。為了省電,手機鎖屏之后,CPU是處于休眠狀態的,然而發送心跳包就會喚醒CPU,必然會增加電量的消耗。這還只是一條長連接通道的情況,如果手機里裝了二三十個帶有推送的APP呢?聰明的Android工程師和iOS工程師早就想到了這一點,他們分別設計了GCM(Google Cloud Messaging)和APNs(Apple Push Notification service)來解決多個APP有多個長連接通道的問題。P45


 11:圖2-11中貓咪的眼睛和鼻子都一起被模糊了,嚴重失真,所以我們一般選用一種特殊的高斯模糊算法:雙邊濾波。它的好處是可以保存邊緣,比如皮膚和眉毛的交接處,經過雙邊濾波后眉毛沒有變化,只有皮膚做了高斯模糊處理。在實際應用過程中,還會用到膚色檢測,人臉識別等技術。P47


 12:“以圖搜圖”的功能通過對圖片進行縮放、灰度處理,最后提取出一個64位的散列值作為特征碼,用它去做匹配。同樣,要識別一首歌曲,也要先找到它的特征,也就是音樂的“指紋”,簡稱“樂紋”。P48


 13:所以平時我們使用搜索引擎時,它的搜索結果并不是實時査找出來的,而是使用了提前做好的倒排索引,將關鍵詞的索引結果合并展示出來。P79


 14:CSRF攻擊的本質是,瀏覽器無法區分一個請求是用戶在當前網站自愿發起的,還是其他網站模擬用戶行為發出來的。


 15:因此,避免CSRF攻擊的措施之一便是區分當前請求的來源網站。P133


 16:最后,搬運一個應用的流程就變成“下載應用——反編譯——篡改代碼——重新打包——國內分發”,這個流程很簡單,將其做成一個批量處理任務只需十來分鐘,可是開發一個應用最少要耗費開發者幾個月的時間。P138


 17:一個好的產品設計是這樣的:本地要默認寫死一些常在展示、不怎么變化的頻道,這些稱為打底數據或默認數據。如果沒有這份寫死的數據,你的客戶端運行時,至網絡數據傳回前或者無網絡時,頭部都沒有任何信息展示。所以打底數據主要用于解決用戶體驗問題,在無網絡或初次啟動時,告知用戶這個客戶端已經在正常運行。P161


 18:所以,JSON并不是憑空想出來的高深概念,而只是為了解決“對象”在網絡上傳輸的問題而誕生的。這時再看它的英文名JavaScript Object Notation(JavaScript的對象標記法),是不是覺得確實是這么回事?P180


 19:那么問題來了,如何才能充分調動顯卡的強大能力,幫助我們繪制圖形呢?OpenGL就是為此而生的。OpenGL是一組API,這些API可以運行在不同的平臺上,可以支持各種語言。最重要的是,它能利用顯卡的硬件加速能力,幫助我們繪制圖形。P181


 20:OpenGL這兩年比較火,主要還是因為iOS和Android都靠它來做游戲、寫界面。嚴格地說,在移動平臺上,大家用的是OpenGL-ES,是OpenGL的一個子集。OpenGL有700多個API,OpenGL-ES裁掉了其中不常用的、移動端不好用的一些API。P182


 21:既然矢量圖可以做到縮放不失真,為什么不把所有圖片都做成矢量圖呢?答案是,做不到。一張普通的圖片里,有人物也有風景,每一個細節是無法用數學方程式來描述的,只能按照點對點的映射做成一張位圖,而這張位圖的分辨率就取決于鏡頭的分辨率。P188


 22:React是Facebook推出的一個前端框架,準確地說,它是一個前端的UI組件庫。P197


 23:ReactNative是Facebook推出的一個用JavaScript語言就能同時編寫iOS,Android及后臺的技術.ReactNative于2016年9月發布的Android版本在IT圈里掀起了一波熱潮,不斷有喜歡嘗鮮的程序員投人這個領域。P198


 24:因為ReactNative引擎的啟動耗時,所以首屏速度可能會稍微慢一點兒。另外,ReactNative會多出一些JStoNative的通信成本。除此之外,翻譯后的UI布局因為用的是純原生的實現方式,動畫,滑動都會跟原生一樣順滑。但React有一個硬傷,就是List(列表)的性能較差。P200


 25:谷歌正式發布了Flutter,它一經推出便受到眾多開發者的追捧。不像ReactNative那樣站在ReactJS的肩膀上,Flutter的誕生顯得平淡了很多。它的開發者來自谷歌的Chrome團隊,沒錯,就是那些做瀏覽器的技術人員,他們試圖把瀏覽器的渲染技術用在普通的APP上,改著改著,就改出了一個令所有人振奮的框架。P202


 26:谷歌之所以用Dart而不用JavaScript還有一層原因.Dart語言既可以像Java那樣預先編譯成二進制代碼預裝在APK包里,也可以像JavaScript那樣動態下發,隨時解釋執行。P203



    相關資訊