做者:Greg Blass
翻譯:瘋狂的技術宅
說明:本文是美國的資深開發者 Greg Blass 針對對蘋果公司的激烈吐槽,
英文原文:https://medium.com/philly-dev...javascript
蘋果移動端 Safari 就是新的 Internet Explorerhtml
漸進式Web應用(Progressive Web Applications,簡稱 PWAs)是迄今爲止在Web開發中最使人興奮的創新技術之一。PWA 使你能夠用 JavaScript 來建立一個「Service Worker」,它爲你提供與原生應用相關聯的各類功能,例如推送通知,離線支持和應用的加載屏幕 —— 這一切可都是基於Web的!這真是極好的。java
不過還有一個主要問題 —— 雖然谷歌已經接受並在 Android 版的 Chrome 瀏覽器添加了這一技術的支持,可是 Apple 卻放棄了在 iOS 端的 Safari 瀏覽器中提供支持。他們所作的只是說「在考慮之中」,可是看上去卻沒有任何動做。android
我一直在等待他們對PWA的支持,可是到目前爲止一切都沒有發生。因爲人生苦短,我一直在學習React Native,這一點我們稍後再說。web
昨天我閱讀了一篇特別大膽並且直言不諱的文章。在這篇文章中,做者陳述:編程
從如今起,我將再也不編寫任何原生應用程序。我全部的應用都將會是漸進式 Web 應用。漸進式 Web 應用就是 Web 應用,一種在移動設備上比原生應用可以無縫工做的Web應用。瀏覽器
我馬上想到,「既然他作出瞭如此大膽的聲明,那麼不用iOS嗎,甚至永遠也不會用?」網絡
這是一個很高的比例,但前提是你要爲全球市場開發應用程序——至少我不是,並且大多數美國人可能也不是這樣的。這個數字極可能是因爲人口衆多的國家或貧困率較高的國家而形成的。編程語言
我_最近_完成的一個應用是爲美國內科和消費者報告委員會開發的。咱們對醫生們進行了統計,其中80%以上的人使用iOS,大約45%的人說,離線支持對他們來講是有用的,由於他們在的辦公室裏沒有可靠的無線鏈接。我原本很想開發一個PWA,可是因爲這種使用iOS的比例,致使不可行,因此咱們就React Native(這是一個了不得的決定)。
我最近還在 stack overflow 看到一個帖子,該帖還試圖聲稱蘋果不支持PWA其實也並不那麼糟糕。做者認爲Google已經創建了一個PWA的基線清單,而且其中的許多功能在移動版的 Safari 上也是支持的:
站點經過HTTPS提供服務
頁面對平板電腦和移動設備的響應
起始網址在離線時加載(在iOS上作不到)
提供添加到主屏幕的元數據
首次加載很快甚至在3G環境
網站跨瀏覽器
頁面過渡不會被網絡阻塞
每一個頁面都有一個URL
這是認真的嗎? 這不是在定義一個漸進式 Web 應用。這是定義一個標準的響應式 Web 應用,這在在至關長的時間裏已經可行了。
Service workers 可使你在PWA配合下作出全部使人驚歎和激動人心的事情,因爲移動版 Safari 缺少對他們的支持,有效地幹掉了PWA爲一半美國用戶工做的能力——這反過來又扼殺了他們統一的可能性。
如下功能是你沒法在移動版 safari 上作的事情,由於蘋果拒絕支持它們:
建立應用程序加載屏幕
使用推送通知
添加離線支持
建立一個初始的應用程序UI來實現即時加載
經過瀏覽器引導對話框,提示安裝到主屏幕
我儘量地在試着在移動端 safari 中推廣蘋果的「類原生」體驗——但它有一些嚴重的漏洞,而蘋果公司根本不關心它們。他們不但忽略了個人bug報告(在我提交它們的幾個月內都沒有任何回覆,並被標記爲「重複」),而且忽略了公共開發者論壇上全部關於它們的帖子。
我在移動版 Safari 的「全屏」或「Web應用」模式中發現的一些bug包括:
加載屏幕不起做用(惡劣——已經超過18000次點擊,沒有獲得蘋果的迴應 )。
固定標題閃爍(我最大的心病,這就是爲何我最終在本身的產品 上禁用它的緣由)
300ms 延遲後終於從移動版 Safari 中移除,卻沒有在全屏模式下移除(Apple沒有迴應。
我永遠不會忘記本身是怎樣花費大量的時間來實現這些特性,這些特性被清楚地記錄下來(如今仍然如此,直到最後才意識到它們實際上並無在iOS的後續版本中起做用。
蘋果在開發者論壇上的迴應?毛也沒有!文字版的無線電靜默。這是我在處理早期版本的IE瀏覽器以後遇到的最使人沮喪的事情之一。 並且很容易找出緣由:
蘋果對待Web應用就像二等公民同樣,由於它們不會在 app store 中像原生應用那樣賺錢。
必須明確告訴用戶如何將你的應用程序添加到主屏幕上,這是一件可怕的事情。事實上,在作了幾回以後,我就放棄了,由於這讓你的應用看起來更像一個品質低劣的產品。
你以爲呢?我對它從不感冒。這感受就像是把個人應用運行在一個 webview/native 包裝器上同樣。我曾經嘗試學習並使用 Ionic/Angular,但始終對它沒有什麼感受。當看到那些在 Ionic 生態體系中花費時間的開發公司時,我以爲他們可能搭錯了車。(說句良心話, 在幾年前尚未 React Native 這個選擇)
一旦引入了一個包裝器,你仍然須要經過 app store發佈本身的應用。你仍然須要參與蘋果的遊戲,須要支付100美圓才能進入蘋果應用商店,還包括30%的稅——然而你仍然只只是運行在webview中。
不過,你還有另一種選擇,這是一個使人驚喜的選擇,來自於 Facebook 的工程師們:React Native。
做爲一個開發人員,你要作的最重要的事情之一就是:決定把本身的時間用在哪裏,因此在這裏我就不建議你學 React Native 了。不過它已經爲我帶來了許多新的職業機會,還有與聰明和成功人士交談的機會。
在最近的6個月裏,我一直在爲了完成最近這個客戶的項目而學習並使用它,這絕對是難以想象的。學習 Angular 的感受就像是我在與語言抗爭,而 React 卻使我可以當即上手。我還歷來沒有這麼興奮過……嗯,實際上,也歷來沒有過,並且支撐它的社區真的很棒。navigation 是流暢的,和原生的意義,整個應用的感受就像一個真正的iOS應用——由於它是一個總體。
我認爲,未來咱們將會看到 PWA 和 React Native 都會有很好的發展前景。
蘋果認爲你應該學習一種徹底不一樣和更復雜的編程語言(Objective-C / Swift),併爲iOS維護徹底獨立的代碼庫。這實際上傷害了小型開發商,扼殺了創新,使創業公司的更加難走。
初創公司和小型開發商應該集中精力學習蘋果特有的編程語言,忽視(或最好延遲)Android版本的發佈,這種毫無底線的想法簡直是荒謬至極。
須要說明的是,即便是我剛剛發泄完以後 —— 我並非反蘋果的一切。我天天都會使用iPhone而且在 MacBook Pro 上開發。我仍然認爲實用他們的產品是一種享受,永遠也不會回到使用 PC/Windows 的狀態。
我也並不認爲大多數的蘋果公司員工都在故意忽視這一點:
可能會有一些高層或董事會成員告訴你們,不要把時間浪費在不符合應用商店盈利模式的技術上。
這僅僅是資本主義特點嗎?只是謀求他們本身的好處嗎?不!蘋果是最最骯髒的。我尚未看到蘋果對這篇文章的任何迴應,我甚至懷疑它會很快發生。這篇文章不會改變他們的想法,但我但願它能鼓勵人們討論這個話題,並可以幫助傳播。
但有一件事是確定的:咱們不能一跳上PWA的火車,就把原生應用徹底仍在腦後。還記得咱們把這種行爲稱做什麼嗎——有損Web的將來。
歡迎掃描二維碼關注公衆號,天天推送我翻譯的技術文章。