您的位置: 首頁 >互聯(lián)網 >

WordPress開發(fā)要避免這5個常見的陷阱

2020-06-15 15:34:16 編輯: 來源:
導讀 作為開發(fā)人員,我們在職業(yè)生涯的不同階段會犯不同類型的錯誤。特別是在WordPress開發(fā)中,隨著我們對WordPress代碼庫熟悉程度的增加,我們會犯不同類型的錯誤。 幾年前,我聽馬特·穆倫維格說過一句話:大多數人都會重復他們的錯誤,更聰明的人會從他們的錯誤中學習,而最聰明的人則會從別人的錯誤中學習。我很喜歡這個,我再加上一個推論:每個人都會犯錯誤,謙虛的人會私下分享這些錯誤,最大膽的人會把它

作為開發(fā)人員,我們在職業(yè)生涯的不同階段會犯不同類型的錯誤。特別是在WordPress開發(fā)中,隨著我們對WordPress代碼庫熟悉程度的增加,我們會犯不同類型的錯誤。

幾年前,我聽馬特·穆倫維格說過一句話:大多數人都會重復他們的錯誤,更聰明的人會從他們的錯誤中學習,而最聰明的人則會從別人的錯誤中學習。我很喜歡這個,我再加上一個推論:每個人都會犯錯誤,謙虛的人會私下分享這些錯誤,最大膽的人會把它們寫下來并在博客上發(fā)表!

但是以后還有時間思考。你讀這篇文章是因為你想知道火車相撞的事,而我是工程師。沒有更多的序言,和我一起回顧一下我作為一個WordPress開發(fā)者所犯的五個最尷尬的錯誤。

那時我剛從CraigsList網站上一個非常不起眼的編碼工作中畢業(yè),在一個真正的廣告公司工作。我已經到了!在沙發(fā)以外的地方工作,穿著睡衣以外的衣服,這讓我很緊張。但即便如此,我還是知道WordPress做錯了還是對的,而且我發(fā)現(xiàn)吹噓WordPress的最佳實踐是一件很愉快的事,就像從來沒有“侵入核心”一樣。

我在這個機構的第一項wordpress開發(fā)任務是恢復一個停滯的項目——對我當時的技能來說,這是一個相當復雜的項目。它涉及到WordPress注冊和登錄流程的大量定制。前一位開發(fā)人員通過簡單地編輯corewp-loginfile就取得了顯著的進展。

我知道這是不可持續(xù)的,所以我的第一件事就是安裝一個備份/恢復插件,用一個新下載的版本替換WordPress核心。我很有信心,到目前為止,在這個項目中沒有任何令人印象深刻的東西被執(zhí)行,而且我可以通過過濾器來模仿現(xiàn)有的特性集。

在那個時候,無論我是否具備編程能力,很快就變得無關緊要了,因為我的新雇主非常生氣。她不理解“hacking core”的意義,而我也不夠成熟,無法用一種容易理解的方式來解釋。我向她保證,我可以通過我安裝的備份/恢復插件來恢復,這讓她的額頭暫時涼了下來。

你能猜到這是怎么回事嗎?

那個插件,就像命運所希望的那樣,只備份了wp-contentfolder。不管核心文件中的WordPress hack是什么,都永遠消失了。我還記得我給她的電子郵件(那時她早已把我趕回了家里的辦公室):

我真的準備好了通過過濾器和動作來完成她想要的功能設置,但是她不聽。她當場就把我解雇了,還威脅說要告我,而且她連我兩周辛苦工作的工錢都沒有付。我感到很丟臉。

[閱讀:這是每個開發(fā)人員應該知道的關于設計的東西]

從這次經歷中,我可以學到很多東西(現(xiàn)在很明顯了)。一個普遍的教訓是,只有經過演練和確認,備份才算備份,這是一個很好的教訓。但更讓我印象深刻的是關于如何在WordPress中進行備份的具體教訓——尤其是在WordPress核心中。

我已經學會了真正珍惜像WP-Engine這樣具有健壯備份/恢復系統(tǒng)的托管環(huán)境。許多精品主機都有各種命令行工具和其他針對開發(fā)人員的用于執(zhí)行備份的特性,但WP-Engine是我的最愛。它非常快,除非你有一個非常大的網絡。UI很簡單。所有知道如何使用WordPress的人都可以使用它。即。與一些可能更快的CLI方法或隱藏在Plesk中的一些晦澀的東西相比,我的客戶可以使用它、理解它、監(jiān)視它并驗證我正在使用它。我是你的超級粉絲。

當時我還不太熟悉專業(yè)的工作環(huán)境,而且一直都是Windows操作系統(tǒng)的忠實用戶。然而,我的新工作是在一家Mac商店,我很快就愛上了它的一切。嗯,幾乎一切。我似乎在使用“魔法鼠標”時遇到了很多麻煩。“我有可能會失去藍牙連接,導致在重新連接后出現(xiàn)意外的拖放操作。不僅如此,我只是對一項新的精細的運動技能笨手笨腳。

現(xiàn)在,我們的WordPress開發(fā)流程仍然包括通過FTP部署到產品中。對我來說,花上整個工作日來寫代碼、聊天、回復電子郵件、通過我的新魔法鼠標來來回回的情況并不少見,而Cyberduck則在我的桌面上開放生產。天哪,這聽起來糟透了!但事情就是這樣。

有一天我們的整個平臺都不見了。我們的系統(tǒng)管理員很快就假設它是某種DDoS,或者通常在他的級別上的東西。至于我們開發(fā)人員,我們相信他的直覺,并認為他很快就會明白的。

幾個小時過去了。這一天來了又去。仍然下降。

第二天早上,一切都恢復了,我們的首席技術官溫柔地邀請我去會議室和她一起開會。我們的系統(tǒng)管理員已經發(fā)現(xiàn)了問題。他拉出FTP日志,發(fā)現(xiàn)我的用戶將我們的整個平臺移動到一個兄弟目錄中。也就是說,wp-contenthad嵌套在wp-include之下。

我很沮喪,但我們的CTO很棒。她可以看出,我基本上是一個樂于助人、負責任的員工,但她要求我不僅僅是悔悟,還要想辦法防止這種情況再次發(fā)生。我發(fā)現(xiàn)了兩件非常有用的事情。

第一個是定位一個CLI命令來阻止Cyberduck允許遠程到遠程的文件移動。這是一個很好的安全措施,我們立即將其作為公司的政策。

其次,我對通過Git進行部署非常感興趣。最后,我編寫了一個WordPress插件,將Bitbucket版本編入正常的wp-adminupdate流程中。從那時起,我們幾乎沒有任何理由不去接觸生產。這個插件是我最喜歡的專業(yè)成就之一。當然,對Git的親和力是當今開發(fā)人員的先決條件。

到目前為止,我真的認為我已經很聰明地使用了WordPress。該請求是在某一類別的文章上附加一個“徽章”。出于某種原因,我想到只有新手才會在模板文件中添加這樣的條件,所以我很自豪地實現(xiàn)了以下過濾器:

這有什么不對嗎?我在階段測試中快速測試了它,以確認必要的帖子獲得了他們的徽章。然后我部署了它,把工作留給了今天。你可能猜到了,宇宙爆炸了。

具體來說,結果就是沒有徽章的帖子會被渲染到沒有任何內容的前端!你知道為什么嗎?問題是,我沒有返回$contentin我的保護條件,而是返回false。但這里確實有很多層次的錯誤。

為什么我只測試帖子是否收到了徽章?為什么我沒有測試其他帖子是否完好無損?為什么我這么晚才部署到生產部門?為什么我們的質量控制完全是由我點擊和刷新頁面組成的呢?

所有這些問題的答案可以總結為成熟。在我們開始投資于諸如視覺回歸測試和單元測試之類的東西之前,只是需要一段時間來厭倦犯這種類型的錯誤。這個特殊的錯誤是數百個錯誤中的一根稻草,最終壓斷了駱駝的脊背,使我對inphpUnit和xDebug投入了很多。反過來,這些工具教會了我如何編寫可測試代碼,這可能比測試本身防止了更多的bug。

客戶請求重新格式化WordPress博客的文章,這樣日期就會變成“XYZ前”,而不是“2011年11月10日”。我不太確定如何做到這一點,但我意識到這是一種越來越流行的日期格式,谷歌博士很快就給了我一個片段。它在我的本地成功了!里面有很多數學,特別是除法。我不太清楚它為什么能工作——有很多嵌套的循環(huán)、余數、四舍五入等等。但它是在谷歌上,它似乎工作,我很高興部署到生產。

大約30分鐘后,我收到了系統(tǒng)管理員發(fā)來的不友好的Skype。生產下降。死在水里。他問我最近是不是除以了0,我不知道他指的是什么。這是發(fā)生了什么事。

信不信由你,我發(fā)現(xiàn)的不可讀的“在我的本地工作”片段,給定足夠大的樣本大小,可能會產生一些異常行為。由于提供了一些天、小時和分鐘的不幸組合,Rube Goldberg循環(huán)偶爾會嘗試將一個數字除以0?;叵敫咧袛祵W:

在普通算術中,該表達式沒有意義,因為沒有數乘以0得到a(假設a≠0),因此除0沒有定義。維基百科

那么這對計算機意味著什么呢?通常日志中只有一條錯誤消息,但在我的例子中,情況更糟:數學錯誤干擾了循環(huán)邏輯,導致嵌套循環(huán)未完成就運行——一個無限循環(huán)導致白屏死機。更糟的是!由于循環(huán)的每次迭代都編寫一個除以0的錯誤,因此錯誤日志增長到不可思議的比例,并開始妨礙我們的文件系統(tǒng)。這產生了DDoS攻擊的效果,盡管這是一種荒唐的自找的攻擊。

這個錯誤的壞處是,它導致一個高流量的網站癱瘓。這個錯誤的好處是,它極大地改變了我的工作方式。最令我羞愧的是,我愿意在沒有理解的情況下實施。我發(fā)誓再也不會在沒有盡一切努力理解每一行的情況下粘貼代碼片段,甚至在必要時還會跟蹤代碼片段的作者。

更重要的是,我發(fā)誓再也不會發(fā)布對新手開發(fā)人員可讀性不高的代碼。我開始著迷于WordPress的編碼標準、文本編輯器擴展、內聯(lián)評論和文檔塊,甚至制表符對空格,那經典的通過程序的方式!總之,我決定更關心讀代碼有多容易,而不是寫代碼有多容易。這種對沒有理解的粘貼的反叛使我對管理第三方依賴產生了濃厚的專業(yè)興趣,這個主題在接下來的十年里為我提供了各種寫作和演講機會。

我完成了一個非常吸引人的項目。我將是技術主管和WordPress開發(fā)工程師,我將有一個亞馬遜AWS Lambda開發(fā)人員和一個在JavaScript方面的專家向我報告。這是我第一次有多人向我匯報工作,也是迄今為止我參與過的最復雜的項目。即使把它稱為一個WordPress項目也大大低估了它的重要性,但是WordPress是將整個項目結合在一起的粘合劑,所以我作為技術領導者是很有意義的。

因為我的主要角色是嚴格意義上的技術人員,也因為我喜歡極簡主義,我從來沒有想過實現(xiàn)像Jira或Basecamp或任何真正的任務管理平臺。項目的第一次迭代進展得相當順利。我們能夠開發(fā)自己的獨立組件,將客戶規(guī)范文檔作為產品路線圖,并且在需要將東西組合在一起時通過Slack相互聯(lián)系。

當我們開始向客戶展示進展并執(zhí)行他的反饋時,問題就出現(xiàn)了。剛開始的這個三人團隊立刻感覺自己被帶到了一個新的數量級:不清楚誰負責哪一點反饋,不清楚執(zhí)行反饋的狀態(tài),甚至不清楚誰在和誰交談。我們多次超過了Gmail的限制,每個線程回復100個!

事情開始變得不舒服了。我認為客戶感覺他失去了對項目方向的控制,同樣重要的是,他感覺他失去了對項目狀態(tài)的可見性。我的亞馬遜開發(fā)人員有一天提到,“我想知道我們是否應該使用Trello。”

嗯,我想。一個三人團隊需要這樣的平臺嗎?同樣,我通常傾向于使用更少的工具,更少的開銷,更少的復雜性。但是這個項目已經把我們都拖下水了,那么嘗試一下有什么害處呢?

我梳理了我們所有的電子郵件,所有的規(guī)范文檔,所有不同的評論線程,并把它們都映射到Trello板上。很快,這個項目就從它的數字墳墓中復活了,因為我們可以用更少的腦力開銷進行交流。我們沒有在我的電子郵件收件箱或過時的規(guī)范文檔中搜索文本,而是使用了可愛的板、列表和卡片??梢院苋菀椎乜吹饺魏翁匦缘臓顟B(tài)、包含反饋和分配新任務。感覺就像我們漸漸失明了,速度如此之慢以至于我們都沒有注意到,然后突然又能看見了。

當然,代碼不是自己編寫的,它仍然是一個非常具有挑戰(zhàn)性的項目,我們仍然必須使用我們的每一分技術技能。但這就是重點:因為我們終于有了一個理解項目的基礎設施,我們現(xiàn)在可以自由地應用我們的技術技能了。

我很高興地說,那個項目的完成讓客戶非常滿意。現(xiàn)在,我認為Trello或Jira是兩個或更多團隊的實際需求。

這是我在軍隊里聽到的最聰明的事情之一:“中尉犯中尉的錯誤沒關系,上尉犯上尉的錯誤也沒關系?!鄙衔痉钢形镜腻e誤,或者中尉犯私人的錯誤,都是不對的?!?/p>

換句話說,就你目前的責任水平而言,犯一些常見的錯誤是理所當然的。更重要的是你如何從中成長。

我希望我們作為開發(fā)人員,能夠在別人犯錯時學會同情他們,希望別人也能這樣對待我們。我希望在我犯錯誤的時候保持好奇心和責任感,這樣我就可以繼續(xù)創(chuàng)新。我希望身邊總是有一群鼓舞人心的wordpress專家,我可以從他們的錯誤中吸取教訓,避免犯同樣的錯誤。最重要的是,我希望其他人能從我的經驗中學習,比如我在這里分享的WordPress錯誤。


免責聲明:本文由用戶上傳,如有侵權請聯(lián)系刪除!

精彩推薦

圖文推薦

點擊排行

2016-2022 All Rights Reserved.平安財經網.復制必究 聯(lián)系QQ280 715 8082   備案號:閩ICP備19027007號-6

本站除標明“本站原創(chuàng)”外所有信息均轉載自互聯(lián)網 版權歸原作者所有。