IT168 評測】2014年,榮耀以獨立品牌的方式正式與華為奉行雙品牌運行的戰略,作為名副其實的“富二代”創業,榮耀品牌在兩年時間內逐漸擺脫了華為的影子,在榮耀6之后短短的兩代產品里,看起來略顯激進的產品策略也使得榮耀短時間內為自己的產品打上獨特的印記。而作為年度旗艦產品,榮耀此次將新品定義為V系列,不僅包含了Victory之意,也表現了榮耀突破常規、勇敢做自己的產品理念。相比于有些廠商還在打高配低價的性價比牌時,榮耀V8更專注于產品扎實的提升。
如今的手機市場逐漸由過去的“購機時代”過度到“換機時代”,用戶再繼續選購產品時則會顯得比較慎重。而對于榮耀這樣的互聯網品牌,在產品的迭代上則需要更加謹慎。因此我們看到,榮耀歷經了將近9個月的沉寂,才又再一次為我們帶來榮耀V8。榮耀V8不僅拿出了2K屏、雙攝像頭,甚至著手布局VR,調子起的足夠高,甚至有些畢其功于一役的態度。而作為承擔著為榮耀在16年開疆拓土的旗艦,究竟榮耀V8能否在今年,對于互聯網手機顯得有些特別的節點,繼續不負旗艦之名,這也是我們在這篇評測中需要了解的問題。
硬件部分:
作為互聯網品牌的手機,硬件配置自然承載了手機的定位。榮耀V8作為年度旗艦,在預熱階段放出關于使用2K屏幕的解讀、雙攝像頭的再一次使用使得許多人對于其配置也是非常關心。文章的開頭,我們就先來看看榮耀V8的硬件配置。
榮耀V8參數 | ||
手機型號 | 榮耀V8 | 榮耀V8(全網通) |
屏幕尺寸 | 5.7英寸 | 5.7英寸 |
分辨率 | 1920*1080 | 2560*1440 |
處理器 | 麒麟950 | 麒麟955 |
SIM卡 | 雙NanoSIM卡槽,雙卡雙待 | 雙NanoSIM卡槽,雙卡雙待 |
運行內存 | 4GB | 4GB |
機身內存 | 32GB | 64GB/128GB |
主攝像頭 | 1200萬像素雙攝像頭 | 1200萬像素雙攝像頭 |
前置相機 | 800萬像素 | 800萬像素 |
操作系統 | EMUI 4.1 | EMUI 4.1 |
機身尺寸 | 157x77.6x7.75mm | 157x77.6x7.75mm |
特色功能 | 不支持NFC | 支持NFC |
電池容量 | 3500mAh | 3500mAh |
網絡制式 | 運營商版/全網通 | 全網通 |
價格 | 2299/2499元【查看】 | 2799元【查看】 |
通過表格對比我們看到,榮耀V8 64GB全網通版與標準版最大的區別在于高配版采用麒麟955處理器(標準版為麒麟950),最高支持2.5GHz(標準版為2.3GHz)。搭配4GB RAM +32/64GB ROM,最高支持128GB內存擴展。榮耀V8采用一塊5.7英寸屏幕,分辨率為2560x1440(標配版及運營商版分辨率為1080P)。全網通版支持NFC、運營商版本不支持NFC,甚至顏色也有一定的區分。可以看到,榮耀V8在各版本之間還是有著不小的差異,用戶可以根據自己的需要進行選擇。
外觀方面:
一款優秀的手機不僅擁有強悍的配置,還要擁有出色的外觀設計。隨著智能手機性能過剩的問題逐漸凸顯,外觀已經成為很多用戶選購旗艦手機的第一標準。一款好的旗艦手機,要同時具備扎實的做工、優秀的工業設計以及出色的手感,才有希望俘獲用戶的心,下面我們來看看榮耀V8在外觀工業設計上有什么特色。
在外觀方面,榮耀V8搭載了一塊5.7英寸的2K屏幕,分辨率達到了515 ppi,并且具備94.5%色彩飽和度和2048級的背光調節,使得該機能夠帶來更加真實細膩的顯示效果。榮耀V8正面沒有實體的功能按鍵,這樣的設計讓正面看上去非常清爽,不過屏內虛擬按鍵的設計會降低屏幕的真實使用面積,榮耀還提供了虛擬按鍵隱藏功能,可以根據實際需求喚出或者隱藏虛擬按鍵。
隨著智能手機的飛速發展,智能手機早已進入到了“金屬時代”。在機身背面方面,榮耀V8采用金屬一體化機身設計。再配合3D鉆切亮邊設計和噴砂工藝微米級別的噴涂技術,使得榮耀V8在不同角度呈現不同的金屬質感,同時手感握持和耐磨損程度上也比以往提升了不少。此次還加入了氟化液防水技術,有效的減少水滴、手汗等生活常見情況對手機造成的傷害。顯然榮耀V8在外觀設計與機身的工藝處理上更進一步,金屬噴砂工藝的加入令這款手機在同價位競品中有著比較高的辨識度。
在機身背部的上方,分別就是攝像頭和指紋識別模塊,我們可以明顯的看到兩顆攝像頭固定于同一底座,采用堅固的鋅合金保護支架,經過精準的調試,充分保證拍攝質量以及長期使用過程中的穩定性。榮耀V8采用的是雙1200萬像素攝像頭,雙攝頭分別采用黑白加彩色雙傳感器,支持反差、激光、景深混合激光對焦技術,還特別針對東方人的膚色進行了專門的優化,可以說此次在雙攝像頭的技術上進行了全面升級。
榮耀V8手機右側依然保留了頗受好評的智靈鍵,并且將靈按鍵進行了重新調整,與音量鍵和電源鍵放在了同一側,讓用戶使用起來更加便捷,也更加符合人體工程學。值得一提的是,此次智靈鍵深度整合了互聯網資源與服務,首次實現了消費者在移動互聯生活上的突破性體驗。
不知不覺,對稱式的設計風格就在手機圈風靡起來,并逐漸被越來越多的手機廠商所采用。榮耀V8底部的開孔也遵循了對稱式設計的原則,在視覺上更為統一,看起來更加簡潔。在接口方面,榮耀V8表現也非常主流,榮耀V8的底部采用了最新的Type-C接口。相比傳統的MicroUSB接口,無需區分正反向的盲插屬性使其操控體驗更加便利。
EMUI4.1系統體驗:
榮耀V8搭載基于Android 6.0深度定制的EMUI4.1系統,相比之前的EMUI4.0系統,此次更新在整體界面風格上沒有太大變化,仍采用大弧度圓角矩形的圖標設計,整體保持了簡潔、直觀的特點。EMUI4.1系統主要以優化為主,并加入了一些實用有趣的小功能。在文章的這一部分,我們就為您解讀現今版本的EMUI 4.1系統帶來了哪些優化與新功能?
1、優化無線網絡連接
EMUI4.1在網絡方面升級了WiFi+2.0,通過后臺計算自動識別每個WiFi的連接質量,自動告知用戶熱點質量為可上網(質量佳、一般、不佳)、不可上網、需要驗證碼(Portal熱點),并且可以根據網絡質量或者其他更直觀的方式進行排序。與此同時,針對需要驗證碼的Portal熱點進行登錄簡化,使用戶能夠不用手動輸入手機號、驗證碼,即可直接連接進行使用。
2、更全面的3D色溫調節
根據每個人對色彩的敏感度與偏愛程度不同,榮耀V8還內置了屏幕色溫調節選項,不論是你是更偏愛冷屏還是暖屏,都可以自行在“設置-顯示-色溫”中進行調節,與之前的默認的三種模式色溫調節不同,EMUI4.1的色溫調整最大特色在于用戶可以拖動色球自定義自己喜歡的色溫,更大程度的滿足了用戶個人對于屏幕色彩的偏好。
3、ROG省電模式保證長續航
榮耀V8主打長續航功能,除了硬件上降低功耗、采用高能量密度大容量電池以外,系統的優化也是影響續航時間的重要參數之一。發布會上提到的基于互聯網的超級省電模式,將會在6月份通過OTA升級正式推送至榮耀V8,不過在EMUI 4.1的電池管理中,我們還發現了一項名為“ROG省電”的功能,該功能可以將屏幕的分辨率降至1280*720,在其他設置不變的情況下能夠有效提高續航時間。通過降低系統的API分辨率來達到省電的目的,無需關機重啟即可實現,從原理上來說這樣是肯定能夠達到省電目的的,至于具體省電的效果如何,有待后續進行進一步的續航測試。
4、多用戶模式
生活中經常會遇到臨時把手機借用朋友、親人使用的情況,退出一堆社交軟件賬號備份清理個人隱私信息著實麻煩,EMUI4.1針對此新增了多用戶模式,其實就是之前EMUI系統中訪客模式的升級版。類似于PC端系統的多用戶,互不干擾的在本機創建各自的使用賬戶;在鎖屏界面上,可顯示所有已創建的用戶(頭像+名稱),點擊可以切換;切換其它賬戶后,機主賬戶原有的信息會全部的被隔離起來,使用時賬戶之間信息內容各自獨立、互不共享。
5、新增學生模式
如今不少學生也配備有一臺手機,但是家長又擔心孩子沉迷于手機游戲,或者瀏覽一些內容不當的網頁。EMUI 4.1中加入的學生模式顯然就是為此而設計。在開啟學生模式后,應用的使用上會受到時間的限制,同時不能隨意安裝和下載應用,另外家長可以限制網頁瀏覽。為了避免“熊孩子”,學生模式下還屏蔽了修改系統時間、多用戶等功能。
6、定制化豐富的VR內容資源
為了配合2K屏更好地享受VR體驗,榮耀V8中的視頻升級至視頻2.0,與優酷土豆進行深度合作,除了6000萬小時海量優質片庫以外還開設VR全景專區,在目前已經有156部VR視頻資源上線,未來也將持續進行更新,同時優酷承諾未來將有一萬部VR電影,每月更新同時每雙周為榮耀用戶定制VR內容。
硬件性能:
華為麒麟950/955 SoC芯片參數對比 | ||
產品型號 | 華為麒麟950 | 華為麒麟955 |
制程工藝 | 16nm FinFET+ TSMC | 16nm FinFET+ TSMC |
核心數量 | 8核 | 8核 |
架構 | Cortex A72+A53+i5協處理器 | Cortex A72+A53+i5協處理器 |
頻率 | 4x2.3GHz+4x1.8GHz | 4x2.5GHz+4x1.8GHz |
網絡基帶 | LTE Cat6 | LTE Cat6 |
圖形處理器 | Mali-T880 MP4 | Mali-T880 MP4 |
圖形頻率 | 900MHz | 900MHz |
對于如今的智能手機,各種功能的實現更多是依賴于硬件的發展,因此硬件則顯得越來越重要。作為榮耀旗艦,V8自然依舊選擇16nm制程工藝的麒麟955(高配版)。麒麟955采用了四核A72+四核A53架構,Mali-880 MP4 900MHz。我們都知道,對于一款處理器,架構和制程決定一款處理器的性能,芯片的制程越小,在相同功耗下有著更強的運算能力,在相同的運算能力下則有著更低的功耗。麒麟955 16nm的制程工藝也依然在行業領先的位置。
▲FinFET+工藝下的形狀
麒麟955采用16nm FinFEF+工藝,FinFEF則通過改造欄柵形態來有效控制芯片欄柵的漏電率。早在麒麟950上,華為就已經參與了臺積電16nm FinFET從研發到流片再到能夠達到量產要求的整個過程。而作為升級版,麒麟955則在主頻上從2.3GHz提升至2.5GHz,增強突發事件的處理能力。架構上,麒麟955采用基于ARM A72的公版架構。ARM官方宣稱A72架構核心性能達到A15架構的3.5倍(數據基于16nmFinFET工藝A72對28nm傳統工藝A15),之前A57相比A15架構性能提升1.9倍(數據基于20nm傳統工藝A57對28nm傳統工藝A15),所以大致可以看出同頻率同工藝的A72核心性能相比A57架構性能應該有大致25%到35%左右的提升。并且還額外內置了i5處理器,其中i5協處理器的功耗僅為6.5mA,使收集待機耗電更低,此外它還負責收集各類傳感器的信息,能更精準的計算整理數據。
另外,麒麟950采用Mali-880為GPU。在官方測試中,Mali-880可以達到近乎瘋狂的MP16,出于減少晶體管數量、降低SoC封裝面積、降低功耗的考慮。麒麟955采用了高頻少核的策略,采用了主頻900MHz的Mali-T880 MP4四核心GPU。我們也對這顆GPU進行GFXBench GL測試。
在1080P曼哈頓離屏的場景下,榮耀V8得到17Fps的成績,1080P霸王龍離屏則為30Fps,這樣的成績或許直觀上看并不夠漂亮,但GPU性能的使用并不是依靠一個突發事件得到的結果,而是和CPU運算同樣為持續事件。如何能夠保證GPU長時間處于高頻率工作才能夠最終提升實際使用體驗。在這點上高頻少核的策略優勢就比較明顯,GPU能夠在更長的時間內處于功耗閥值內,從而運行在更高主頻上的時間更多。
另外,我們也用安兔兔來測試了一下麒麟955的CPU部分。可以看到,麒麟955得到95323的分數,盡管與目前跑分王動輒十幾萬的分數相比還有一些差距,但麒麟955經過多年的積累,性能方面也已經達到了第一梯隊的SoC。
雙攝像頭的體驗:
榮耀早在榮耀6Plus時就率先采用了仿生平行雙攝像頭,憑借在雙攝像頭的探索上有一定積累,相比其他還在觀望的手機廠商具有技術上的優勢,此次榮耀V8采用全新升級的第二代雙攝像頭技術,與榮耀6Plus雙攝像頭的原理不同,榮耀V8搭載雙1200萬像素平行鏡頭,采用黑白、彩色雙傳感器。官方宣稱普通拍照性能提升36%,大光圈拍照性能提升44%。究竟體驗如何,我們還需要通過實際測試來驗證。在正式體驗之前,我們先為大家簡單介紹一下榮耀V8雙攝像頭的工作原理。
榮耀V8的雙攝像頭中一枚攝像頭負責記錄被拍攝目標的顏色,另一枚負責記錄黑白信息。這樣做的好處,就在于由于傳統彩色傳感器的成像過程中,光線通過濾光片時每個像素產生一種顏色的值,必須利用相鄰的像素插值計算出丟失顏色的信息。而黑白鏡頭由于沒有濾光片,是全透光傳感器,在拍照時進光量是普通彩色傳感器進光量的4倍。因此在成像上,可以提升畫面的動態范圍,減少噪點。在拍照時,兩張照片合成為一張時,既可以有更多細節的保留,又不會對顏色有任何影響。
同時雙攝像頭還帶來了更多對焦的優越性。首先榮耀V8支持激光對焦與反差對焦兩種對焦方式,本就有著不俗的表現,而雙攝的設計又會帶來景深對焦的全新選擇,即通過計算被攝物體與兩個鏡頭的夾角,輔以雙鏡頭間的距離,就可以準確算出被攝物體的距離,從而簡化對焦步驟,迅速一次到位。針對不同拍攝環境及拍攝對象,榮耀V8會自動選擇最適合、最快速的對焦方式。究竟最終效果如何,我們通過樣片來一探究竟。
大光圈模式
大光圈帶來的背景虛化效果令人印象深刻,此次榮耀V8帶來全新升級的大光圈模式,官方宣稱大光圈性能提升44%,支持F0.95-F16的光圈調節。在開啟了大光圈模式后,雙攝像頭不僅會對對焦物體進行測距、記錄景深,還會對畫面上各個距離上的物體進行對焦識別,從而可根據選擇不同對焦點獲取不同的背景虛化效果,對于一些前后距離明顯的景物十分奏效。
通過與iPhone 6s Plus的樣張對比我們可以看出,榮耀V8在大光圈模式下獲得了更好地背景虛化效果,畫面主體更加凸出。同時在大光圈模式下已經拍攝的照片還可重新選擇焦點,隨意調節虛化程度,靈活性與可玩性更高。
夜景拍攝
夜景拍攝同樣是采用雙攝像頭而帶來的另一大優勢。其中彩色鏡頭負責記錄色彩,而黑白鏡頭負責輪廓、細節、亮度,ISP將兩者收集的圖像信息進行合成,合成后肉眼幾乎看不到涂抹同時暗部細節更加豐富,同時由于黑白鏡頭沒有濾光片,因此合成后的畫面整體亮度更高、噪點更少、畫面純凈度更高,達到優秀的夜間成像效果。通過樣張我們可以在100細節也能有比較不錯的表現。
▲點擊查看視頻
3D動態全景
此次榮耀V8與Fyuse合作,在相機中內置3D動態全景功能,開啟后能夠使拍攝的圖片具有立體感,借助運動感能為觀看者帶來立體視覺的原理。通過在手機屏幕上滑動或者移動手機即可從不同角度觀看照片,使照片變得動態。同時整個拍攝過程非常簡單,按住拍攝頁面紅色區域,沿著一條弧線移動手機,圍繞物體,或是以自己為中心環拍周邊景物,記錄你想展示的部分即可。當然這個看起來很酷的照片也支持微信、QQ等社交平臺的超鏈接分享。
還有一些你想知道的問題:
榮耀V8有幾個版本?
榮耀V8是榮耀的最新旗艦,共有三個版本,分別是4G+64G全網通版,4G+32G全網通版和4G+32G運營商版。4GB+64GB全網通版本擁有香檳金、玫瑰金、陶瓷白、典雅灰共4種顏色;4GB+32GB全網通版和運營商版,有鉑光金、冰河銀共2種顏色。
榮耀V8配備2K屏幕會影響手機使用效率嗎?
了解手機的人都知道,2K屏的最大難題就是會給手機帶來發熱大、功耗高、續航急劇下降等問題,之前手機行業技術并不成熟,和有些廠商提前使用,影響到了用戶體驗。榮耀V8在2K屏的技術上取得了突破性進展。在發布會上,據官方宣稱:在2K屏情況下,榮耀V8依然可以刷11小時微信,連續看11小時電視劇和玩6小時游戲;普通用戶使用1.78天、重度用戶使用1.21天。在FHD情況下,榮耀V8可以持續使用12小時微信,追14小時電視劇,玩7小時游戲,普通互聯網用戶使用也增加到了1.94天;重度互聯網用戶使用1.35天。達到真正的充一次,玩一天的超爽感覺。
榮耀V8的雙攝像頭設計帶來了怎樣的優勢?
榮耀V8采用了雙1200萬像素平行鏡頭,擁有黑白彩色雙傳感器、雙ISP(圖像處理芯片),帶來高達2倍的進光量與感光面積,并采用第二代雙攝像頭技術,使普通拍照性能提升36%,大光圈拍照性能提升44%。激光對焦、景深對焦與反差對焦三種相互輔助,可實現更快準確對焦。榮耀V8支持F0.95-F16的光圈調節,深度ISP芯片,實現大光圈實時預覽,雙鏡頭加HDR技術可實現更好的逆光拍攝效果,同步迭代曝光、多幀降噪算法和Vision Camera技術處理,可使夜拍更清晰。雙鏡頭同時實現極為豐富的高頻細節,拍細節較多的對象如毛發、小動物、毛絨玩具時,更清晰。此外,得益于法國美妝專家調教的美顏算法,自拍時能實現更精準的膚色還原;再加上暗光麗影和魅我功能,自拍體驗大幅升級。
榮耀V8的購買渠道:
目前榮耀V8已在華為商城、京東商城、百度VIP線下專賣店等多個渠道開啟預約,榮耀V8的4G+64G全網通版售價2799元,4G+32G全網通版售價2499元,4G+32G運營商版售價2299元,預約時間為5月10日21:00至5月16日晚20:00,網友可選擇0元預約或99元預約兩種方式。5月17日10:08將在華為商城(VMALL)、京東正式開售,僅面向限預約用戶,非預約用戶將無法購買。目前仍采用預約購買的方式,當然也可通過線下渠道或第三方平臺購買,初期或存在增值購買的情況,隨著產能的進一步擴充,相信并不需要多久即可原價入手。而關于這款產品值不值的問題,客觀來說,在線下渠道市場的同價位手機中,配有雙攝像頭和2K屏的榮耀V8仍具不錯的競爭力。
直達鏈接:京東商城預約 榮耀V8 雙攝像頭+2K屏【點擊查看詳情】
華為商城 榮耀V8 雙攝像頭+2K屏【點擊查看詳情】
總結:
自榮耀獨立運營之后再梳理榮耀的產品,可以看到,在短短的兩年時間內,榮耀先后在僅僅兩代產品上就開發了雙攝像頭、智靈鍵、翻轉攝像頭,這樣的產品策略看起來甚至略微有些激進。但這樣的策略卻也給榮耀的產品印上自己獨特的記號。2K屏、雙攝像頭、結合VR,當這些技術同時賦予到一款手機的身上時,毫無疑問可以刺激到消費者的購買欲望。而在互聯網手機市場的拐點,作為以技術為導向的公司,在榮耀V8身上可以看到榮耀針對市場細分的靈活變動以更好的應對用戶的需求。
耀V8是今年夏天發布的一款雙攝像頭安卓旗艦,12月初榮耀官方已經正式開啟了榮耀V8的EMUI5.0系統的公測,這一系統版本基于全新的Android7.0操作系統核心,帶來了很多的變化,因此推薦廣大榮耀V8用戶搶先體驗。
榮耀V8升級EMUI5.0公測版的方法也十分簡單,只需要先升級到官方最新固件(版本號B160),然后在系統內置的“手機服務”中提交申請,隨后就可以在系統更新中看到EMUI5.0(版本號B336)的升級提醒。由于是大版本更新,這次的升級包大小達到了2.59GB,升級所需時間在20分鐘左右,升級之前需保證足夠的電量。
這次榮耀V8的EMUI5.0公測版增加了許多令人欣喜的新變化,這里小編就為大家介紹幾個有明顯改變的地方:
一、全新的UI界面
這次榮耀V8的EMUI5.0采用了源于愛琴海的純凈藍白設計,界面交互簡潔靈動。相比之前的系統UI,EMUI5.0在整體外觀上更加生動活潑,更適合年輕人使用。當然如果在升級后仍然想要使用舊的UI界面,可以在系統自帶的主題應用中進行設置。
升級后榮耀V8的主屏UI界面并沒有太大的改變,上方仍然是時間、天氣、地點三合一的小部件,官方應用APP的圖標則進行了全新的設計。系統設置界面的升級則十分明顯,在可視范圍最明顯的地方加入了常用快捷設置和建議,比如當手機流量關閉的時候,打開系統設置就可以看到“移動數據已關閉”的提示,點擊后就可以開啟數據流量功能;如果沒有設置鎖屏密碼,系統也會增加“使用指紋解鎖”的建議。這是一個非常人性化的改動。
另外,EMUI的“指關節截屏”也加入了“錄屏”功能,只需要用雙指關鍵敲擊屏幕,就可以在彈出的下拉菜單中選擇“錄屏”。
錄屏功能不僅可以將手機屏幕內容錄制成視頻,還可以通過麥克風同步保存音頻,比較適合用來錄制手機游戲視頻。
二、功能更加全面的負一屏
所謂“負一屏”就是指主屏向左活動后所看到的第一屏。榮耀V8公測版EMUI5.0的負一屏得到了明顯的強化,顯示內容也更加全面。
通過負一屏里可以快速找到常用四個的應用,大大節省了操作步驟。EMUI5.0自帶的“運動健康”也會在負一屏中展示詳細的每日行走步數,以及換算得到的卡路里數值。如果安裝了“生活服務”應用,還可以在負一屏中快速查找周圍的美食、電影院,并使用打車和手機充值等功能。繼續下拉負一屏還可以看到當日最新的新聞資訊和生活指南。
三、智能的云圖庫
雖然現在不少手機廠商都關閉了云存儲功能,但是EMUI5.0依然支持將手機中的照片保存到云端,大大節省了手機的存儲空間。不僅如此,在EMUI5.0版本中還推出了一個“云圖庫”功能,可以自動將上傳至服務器端的照片分門別類,方便查找。
打開系統自帶相冊的“云圖庫”中的“照片智能識別”功能之后,云端就會按照“人像”、“地點”、“事物”等類別,將服務器中的照片自動分類,其中“人像”可以按照不同的拍照者面孔進行區分,“地點”也可以按照拍照所在的地點進行分類。這一功能在手機照片過多時非常好用。
四、好玩的相機插件
榮耀V8配備了一枚1200萬像素黑白鏡頭和一枚1200萬像素的彩色鏡頭,拍照也正是這款手機的一大賣點。升級到EMUI5.0之后,榮耀V8的自帶相機也增加了安裝插件的功能。用戶可以根據不同的需求來安裝不同的插件。
目前榮耀V8的相機支持5種插件,其中“美食”、“水印”、“有聲照片”、“文檔校正”是系統自帶的,每一款插件也都注明了實際的使用效果?!懊朗场笨梢宰屌臄z的食物色彩更加鮮艷;“文檔校正”可以自動將拍攝的文字檔案調整到正確的角度;“智能識物”插件則需要手動下載安裝,使用這一插件之后,可以將拍攝的物體上傳到百度圖庫進行比對,并且搜索到最相近的圖片結果。
五、續航有一定提升
由于Android7.0加入了全新的后臺管理機制,基于該核心的EMUI5.0也變得更加省電。以2K分辨率的榮耀V8全網通為例,升級之前大概不到一天半的使用時間就要充電。升級后堅持兩天一次充電完全沒有問題。
續航的提升可以說是這次榮耀V8升級到EMUI5.0之后的最大亮點,不僅標準版續航時間進一步延長,全網通高配版用戶也可以毫無顧忌的在日常使用2K分辨率了。
六、支付更加安全
這次EMUI5.0增加了一個“支付保護中心”應用,開啟這一應用之后,系統會自動將支付寶等支付APP添加到其中,確保這些敏感的APP不會被惡意程序修改,最大程度的保護用戶的支付安全!
另外根據需要,你可以開啟在“支付保護中心”里開啟“深度隔離”功能,使你的APP能杜絕信息互相訪問及共享數據。
總結
這次榮耀V8升級到EMUI5.0不僅帶來了很多功能上的改變和細節的完善,手機性能和續航時間也有一定的提升。雖然目前還只是公測版本,但正常使用是完全沒有問題的。想要搶先體驗Android7.0的榮耀V8用戶不妨嘗試一下!
者 | Fundebug
最近,JavaScript生態系統又多了2個非常硬核的項目。
大神Fabrice Bellard發布了一個新的JS引擎QuickJS,可以將JavaScript源碼轉換為C語言代碼,然后再使用系統編譯器(gcc或者clang)生成可執行文件。
Facebook為React Native開發了新的JS引擎Hermes,用于優化安卓端的性能。它可以在構建APP的時候將JavaScript源碼編譯為Bytecode,從而減少APK大小、減少內存使用,提高APP啟動速度。
作為JavaScript程序員,只有極少數人有機會和能力去實現一個JS引擎,但是理解JS引擎還是很有必要的。本文將介紹一下V8引擎的原理,希望可以給大家一些幫助。
JavaScript引擎
我們寫的JavaScript代碼直接交給瀏覽器或者Node執行時,底層的CPU是不認識的,也沒法執行。CPU只認識自己的指令集,指令集對應的是匯編代碼。寫匯編代碼是一件很痛苦的事情,比如,我們要計算N階乘的話,只需要7行的遞歸函數:
function factorial(N) {
if (N===1) {
return 1;
} else {
return N * factorial(N - 1);
}
}
代碼邏輯也非常清晰,與階乘的數學定義完美吻合,哪怕不會寫代碼的人也能看懂。
但是,如果使用匯編語言來寫N階乘的話,要300+行代碼n-factorial.s:
這個N階乘的匯編代碼是我大學時期寫的,已經是N年前的事情了,它需要處理10進制與2進制的轉換,需要使用多個字節保存大整數,最多可以計算大概500左右的N階乘。
還有一點,不同類型的CPU的指令集是不一樣的,那就意味著得給每一種CPU重寫匯編代碼,這就很崩潰了。
還好,JavaScirpt引擎可以將JS代碼編譯為不同CPU(Intel, ARM以及MIPS等)對應的匯編代碼,這樣我們才不要去翻閱每個CPU的指令集手冊。當然,JavaScript引擎的工作也不只是編譯代碼,它還要負責執行代碼、分配內存以及垃圾回收。
雖然瀏覽器非常多,但是主流的JavaScirpt引擎其實很少,畢竟開發一個JavaScript引擎是一件非常復雜的事情。比較出名的JS引擎有這些:
V8 (Google)
SpiderMonkey (Mozilla)
JavaScriptCore (Apple)
Chakra (Microsoft)
IOT:duktape、JerryScript
還有,最近發布QuickJS與Hermes也是JS引擎,它們都超越了瀏覽器范疇,Atwood’s Law再次得到了證明:
Any application that can be written in JavaScript, will eventually be written in JavaScript.
V8:強大的JavaScript引擎
在為數不多JavaScript引擎中,V8無疑是最流行的,Chrome與Node.js都使用了V8引擎,Chrome的市場占有率高達60%,而Node.js是JS后端編程的事實標準。國內的眾多瀏覽器,其實都是基于Chromium瀏覽器開發,而Chromium相當于開源版本的Chrome,自然也是基于V8引擎的。神奇的是,就連瀏覽器界的獨樹一幟的Microsoft也投靠了Chromium陣營。另外,Electron是基于Node.js與Chromium開發桌面應用,也是基于V8的。
V8引擎是2008年發布的,它的命名靈感來自超級性能車的V8引擎,敢于這樣命名確實需要一些實力,它性能確實一直在穩步提高,下面是使用Speedometer benchmark的測試結果:
圖片來源:https://v8.dev/
V8在工業界已經非常成功了,同時它還獲得了學術界的肯定,拿到了ACM SIGPLAN的Programming Languages Software Award:
V8’s success is in large part due to the efficient machine code it generates.
Because JavaScript is a highly dynamic object-oriented language, many experts believed that this level of performance could not be achieved.
V8’s performance breakthrough has had a major impact on the adoption of JavaScript, which is nowadays used on the browser, the server, and probably tomorrow on the small devices of the internet-of-things.
JavaScript是一門動態類型語言,這會給編譯器增加很大難度,因此專家們覺得它的性能很難提高,但是V8居然做到了,生成了非常高效的machine code(其實是匯編代碼),這使得JS可以應用在各個領域,比如Web、APP、桌面端、服務端以及IOT。
嚴格來講,V8所生成的代碼是匯編代碼而非機器代碼,但是V8相關的文檔、博客以及其他資料都把V8生成的代碼稱作machine code。匯編代碼與機器代碼很多是一一對應的,也很容易互相轉換,這也是反編譯的原理,因此他們把V8生成的代碼稱為Machine Code也未嘗不可,但是并不嚴謹。
V8引擎的內部結構
V8是一個非常復雜的項目,使用cloc統計可知,它竟然有超過100萬行C++代碼。
V8由許多子模塊構成,其中這4個模塊是最重要的:
Parser:負責將JavaScript源碼轉換為Abstract Syntax Tree (AST)
Ignition:interpreter,即解釋器,負責將AST轉換為Bytecode,解釋執行Bytecode;同時收集TurboFan優化編譯所需的信息,比如函數參數的類型;
TurboFan:compiler,即編譯器,利用Ignitio所收集的類型信息,將Bytecode轉換為優化的匯編代碼;
Orinoco:garbage collector,垃圾回收模塊,負責將程序不再需要的內存空間回收;
其中,Parser,Ignition以及TurboFan可以將JS源碼編譯為匯編代碼,其流程圖如下:
簡單地說,Parser將JS源碼轉換為AST,然后Ignition將AST轉換為Bytecode,最后TurboFan將Bytecode轉換為經過優化的Machine Code(實際上是匯編代碼)。
如果函數沒有被調用,則V8不會去編譯它。
如果函數只被調用1次,則Ignition將其編譯Bytecode就直接解釋執行了。TurboFan不會進行優化編譯,因為它需要Ignition收集函數執行時的類型信息。這就要求函數至少需要執行1次,TurboFan才有可能進行優化編譯。
如果函數被調用多次,則它有可能會被識別為熱點函數,且Ignition收集的類型信息證明可以進行優化編譯的話,這時TurboFan則會將Bytecode編譯為Optimized Machine Code,以提高代碼的執行性能。
圖片中的紅線是逆向的,這的確有點奇怪,Optimized Machine Code會被還原為Bytecode,這個過程叫做Deoptimization。這是因為Ignition收集的信息可能是錯誤的,比如add函數的參數之前是整數,后來又變成了字符串。生成的Optimized Machine Code已經假定add函數的參數是整數,那當然是錯誤的,于是需要進行Deoptimization。
function add(x, y) {
return x + y;
}
add(1, 2);
add("1", "2");
在運行C、C++以及Java等程序之前,需要進行編譯,不能直接執行源碼;但對于JavaScript來說,我們可以直接執行源碼(比如:node server.js),它是在運行的時候先編譯再執行,這種方式被稱為即時編譯(Just-in-time compilation),簡稱為JIT。因此,V8也屬于JIT編譯器。
Ignition:解釋器
Node.js是基于V8引擎實現的,因此node命令提供了很多V8引擎的選項,使用node的--print-bytecode選項,可以打印出Ignition生成的Bytecode。
factorial.js如下,由于V8不會編譯沒有被調用的函數,因此需要在最后一行調用factorial函數。
function factorial(N) {
if (N===1) {
return 1;
} else {
return N * factorial(N - 1);
}
}
factorial(10); // V8不會編譯沒有被調用的函數,因此這一行不能省略
使用node命令(node版本為12.6.0)的--print-bytecode選項,打印出Ignition生成的Bytecode:
node --print-bytecode factorial.js
控制臺輸出的內容非常多,最后一部分是factorial函數的Bytecode:
生成的Bytecode其實挺簡單的:
使用LdaSmi命令將整數1保存到寄存器;
使用TestEqualStrict命令比較參數a0與1的大?。?/p>
如果a0與1相等,則JumpIfFalse命令不會跳轉,繼續執行下一行代碼;
如果a0與1不相等,則JumpIfFalse命令會跳轉到內存地址0x3541c2da1139
…
不難發現,Bytecode某種程度上就是匯編語言,只是它沒有對應特定的CPU,或者說它對應的是虛擬的CPU。這樣的話,生成Bytecode時簡單很多,無需為不同的CPU生產不同的代碼。要知道,V8支持9種不同的CPU,引入一個中間層Bytecode,可以簡化V8的編譯流程,提高可擴展性。
如果我們在不同硬件上去生成Bytecode,會發現生成代碼的指令是一樣的:
圖片來源:Ross McIlroy
TurboFan:編譯器
使用node命令的--print-code以及--print-opt-code選項,打印出TurboFan生成的匯編代碼:
node --print-code --print-opt-code factorial.js
我是在Mac上運行的,結果如下圖所示:
比起Bytecode,正真的匯編代碼可讀性差很多。而且,機器的CPU類型不一樣的話,生成的匯編代碼也不一樣。
這些匯編代碼就不用去管它了,因為最重要的是理解TurboFan是如何優化所生成的匯編代碼的。我們可以通過add函數來梳理整個優化過程。
function add(x, y) {
return x + y;
}
add(1, 2);
add(3, 4);
add(5, 6);
add("7", "8");
由于JS的變量是沒有類型的,所以add函數的參數可以是任意類型:Number、String、Boolean等,這就意味著add函數可能是數字相加(V8還會區分整數和浮點數),可能是字符串拼接,也可能是其他更復雜的操作。如果直接編譯的話,生成的代碼比如會有很多if…else分支,偽代碼如下:
if (isInteger(x) && isInteger(y)) {
// 整數相加
} else if (isFloat(x) && isFloat(y)) {
// 浮點數相加
} else if (isString(x) && isString(y)) {
// 字符串拼接
} else {
// 各種其他情況
}
我只寫了4個分支,實際上的分支其實更多,比如當參數類型不一致時還得進行類型轉換,大家不妨看看ECMASCript對加法是如何定義的:12.8.3The Addition Operator ( + )。
如果直接按照偽代碼去生成匯編代碼,那生成的代碼必然非常冗長,這樣會占用很多內存空間。
Ignition在執行add(1, 2)時,已經知道add函數的兩個參數都是整數,那么TurboFan在編譯Bytecode時,就可以假定add函數的參數是整數,這樣可以極大地簡化生成的匯編代碼,偽代碼如下:
if (isInteger(x) && isInteger(y)) {
// 整數相加
} else {
// Deoptimization
}
當然這樣做也是有風險的,因為如果add函數參數不是整數,那么生成的匯編代碼也沒法執行,只能Deoptimize為Bytecode來執行。
也就是說,如果TurboFan對add函數進行編譯優化的話,則add(3, 4)與add(3, 4)可以執行優化的匯編代碼,但是add("7", "8")只能Deoptimize為Bytecode來執行。
當然,TurboFan所做的也不只是根據類型信息來簡化代碼執行流程,它還會進行其他優化,比如減少冗余代碼等更復雜的事情。
由這個簡單的例子可知,如果我們的JS代碼中變量的類型變來變去,是會給V8引擎增加不少麻煩的,為了提高性能,我們可以盡量不要去改變變量的類型。
對于性能要求比較高的項目,使用TypeScript也是不錯的選擇,理論上,如果嚴格遵守類型化的編程方式,也是可以提高性能的,類型化的代碼有利于V8引擎優化編譯的匯編代碼,當然這一點還需要測試數據來證明。
Orinoco:垃圾回收
強大的垃圾回收功能是V8實現提高性能的關鍵之一,因為它可以在避免影響JS代碼執行的情況下,同時回收內存空間,提高內存利用效率。
關于垃圾回收,我在JavaScript深入淺出第3課:什么是垃圾回收算法?中有詳細介紹,這里就不再贅述了。
JS引擎的未來
V8引擎確實很強大,但是它也不是無所不能的,簡單地分析都可以發現一些可以優化的點。
我有一個新的想法,還沒想好名字,不妨稱作Optimized TypeScript Engine:
使用TypeScript編程,遵循嚴格的類型化編程規則,不要寫成AnyScript了;
構建的時候將TypeScript直接編譯為Bytecode,而不是生成JS文件,這樣運行的時候就省去了Parse以及生成Bytecode的過程;
運行的時候,需要先將Bytecode編譯為對應CPU的匯編代碼;
由于采用了類型化的編程方式,有利于編譯器優化所生成的匯編代碼,省去了很多額外的操作;
這個想法其實可以基于V8引擎來實現,技術上應該是可行的:
將Parser以及Ignition拆分出來,用于構建階段;
刪掉TurboFan處理JS動態特性的相關代碼;
這樣做,可以將JS引擎簡化很多,一方面不再需要parse以及生成bytecode,另一方面編譯器不再需要因為JavaScript動態特性做很多額外的工作。因此可以減少CPU、內存以及電量的使用,優化性能,唯一的問題可能是必須使用嚴格的TS語法進行編程。
為啥要這樣做呢?因為對于IOT硬件來說,CPU、內存、電量都是需要省著點用的,不是每一個智能家電都需要裝一個驍龍855,如果希望把JS應用到IOT領域,必然需要從JS引擎角度去進行優化,只是去做上層的框架是沒有用的。
其實,Facebook的Hermes差不多就是這么干的,只是它沒有要求用TS編程。
這應該是JS引擎的未來,大家會看到越來越多這樣的趨勢。
參考
Celebrating 10 years of V8
Launching Ignition and TurboFan
JavaScript engines - how do they even?
An Introduction to Speculative Optimization in V8
2018年,JavaScript都經歷了什么?
JavaScript深入淺出第3課:什么是垃圾回收算法?
Fabrice Bellard 是個什么水平的程序員?
如何評價 Fabrice Bellard 發布 QuickJS JS 引擎?