偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

PHP能創(chuàng)造成功:舊代碼不一定是遺留代碼

開發(fā) 后端
過去的一年里,Vimeo開發(fā)人員用多種編程語言編寫了后端代碼——PHP、Go、Ruby、Python、NodeJS、Java、C語言、C++和Rust。

 本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)

過去的一年里,Vimeo開發(fā)人員用多種編程語言編寫了后端代碼——PHP、Go、Ruby、Python、NodeJS、Java、C語言、C++和Rust。

[[377033]]

2004年,Vimeo開始使用PHP。對(duì)于像Vimeo這樣的初創(chuàng)公司來說,PHP無疑是一種理想編程語言。PHP的解釋器使企業(yè)家可以快速開發(fā)原型,它附帶一個(gè)大型標(biāo)準(zhǔn)庫,可以省去一些常見任務(wù)步驟,如發(fā)送電子郵件、訪問數(shù)據(jù)庫等。

大多數(shù)初創(chuàng)公司都中道崩殂,但一些基于PHP的創(chuàng)業(yè)公司在十年后依然屹立不倒,有些甚至增長(zhǎng)飛速、躍居前列。其中有的公司(最著名的當(dāng)屬Facebook)認(rèn)為PHP是阻礙公司發(fā)展的瓶頸,開始從PHP遷移出去。這種小規(guī)模遷移的主要原因有兩個(gè):一是PHP的性能不佳,二是維護(hù)大型PHP代碼庫困難較大。

2014年開始,PHP的性能發(fā)展?jié)u漸跟不上所需,數(shù)組內(nèi)存的消耗超出必要。由于缺少可以大規(guī)模檢測(cè)錯(cuò)誤的靜態(tài)分析工具,維護(hù)大型PHP代碼庫變得愈發(fā)困難。

自2004年以來的十年中,Vimeo的規(guī)模已經(jīng)擴(kuò)大了很多倍,PHP代碼庫也隨之?dāng)U充,但是還沒有大到妨礙自身發(fā)展的程度。但當(dāng)Facebook公開放棄PHP時(shí),一些開發(fā)人員就認(rèn)為PHP即將成為互聯(lián)網(wǎng)時(shí)代的FORTRAN。新一波后端工程師計(jì)劃如何將50萬行PHP分解成一系列設(shè)計(jì)更好、速度更快、可測(cè)試性更高的Go服務(wù)。

一時(shí)間,此事似乎迫在眉睫,但實(shí)際上我們從未放棄PHP。原因顯而易見——重寫整個(gè)代碼庫會(huì)占用大量資源并且容易出錯(cuò);但也有一個(gè)不太明顯的原因,那就是PHP變得更好了。

 

在過去的六年里,PHP執(zhí)行時(shí)間減少了一半以上,社群發(fā)展迅速,現(xiàn)在有一種流行的驅(qū)動(dòng)程序可以利用靜態(tài)分析獲得的見解來改進(jìn)PHP代碼庫(舊的和新的)。

PHP的改進(jìn)花了一段時(shí)間才在Vimeo應(yīng)用。首先,我們必須棄用舊版本PHP5.4,該版本在過期多年后仍在生產(chǎn)。遷移到PHP 7可以使后端響應(yīng)速度更快,除此以外,PHP 7改進(jìn)后的語法使開發(fā)人員編寫代碼更簡(jiǎn)潔,并對(duì)返回和參數(shù)類型提供全面的語言級(jí)支持。

PHP一直在創(chuàng)新——不久前發(fā)布的8版本在語言級(jí)別方面做了諸多改進(jìn),使開發(fā)人員可以更簡(jiǎn)潔地表達(dá)業(yè)務(wù)邏輯。我們期待明年年初的升級(jí)。

PHP入門非常容易,但是“好上手”并不能保證無反噬。多年來,無數(shù)開發(fā)者嘗試過速成PHP,不小心就搬起石頭砸了腳,然后就放棄了。我也偶爾被PHP折磨的痛不欲生,但我沒有放棄,而是決定構(gòu)建一個(gè)可以提高準(zhǔn)頭的工具。就這樣,Psalm(PHP的靜態(tài)分析類型檢查器)誕生了。

Psalm的核心功能與TypeScript檢查器大致相似,借鑒了Facebook Hack語言(源自PHP的)的一些想法。當(dāng)PHP代碼在生產(chǎn)中導(dǎo)致類型錯(cuò)誤以及語言邏輯不通時(shí),PHP會(huì)發(fā)送通知。Psalm增加了一些額外功能,如未使用的類和方法檢測(cè),同時(shí)可以自動(dòng)修復(fù)檢測(cè)到的許多問題。

過去幾年,我們將Psalm用作CI管道的一部分,這對(duì)我們?cè)赩imeo編寫PHP的方式產(chǎn)生了變革性的影響:Psalm使我們有信心進(jìn)行大規(guī)模更改,而不用擔(dān)心會(huì)破壞所有內(nèi)容。這些更改(將現(xiàn)代PHP編碼標(biāo)準(zhǔn)引入了我們的代碼庫)有助于消除舊代碼的痕跡:當(dāng)可以安全地更改代碼時(shí),它就不再是真正的遺留代碼了。

我創(chuàng)建Psalm是為了解決我自己的問題,但現(xiàn)在Psalm已經(jīng)開源,它也幫助解決了許多其他人的問題。Psalm最近還幫助我們識(shí)別了代碼庫中大量的安全漏洞,以免被惡意利用。

順便說一下,如果你害怕對(duì)一個(gè)大型遺留PHP項(xiàng)目進(jìn)行較大更改,那么我強(qiáng)烈建議使用靜態(tài)分析類型檢查工具。Psalm(及其他類似工具)可以解決代碼庫中的現(xiàn)有問題,幫你慢慢提高代碼質(zhì)量。

在20世紀(jì)中期,還沒有完善的PHP ORMs,所以我們建立了自己的PHP ORM。PHP提供了大量構(gòu)建基塊,用于創(chuàng)建簡(jiǎn)單的ActiveRecord風(fēng)格的ORM,包括MySQL支持、查詢參數(shù)綁定以及神奇的獲取器和設(shè)置器,而這也有助于我們聚集一批優(yōu)秀工程師來完成這項(xiàng)任務(wù)。

我們的ORM最后一次重大升級(jí)是在十年前。進(jìn)行了一些小的改進(jìn)——Bug修復(fù)、類型升級(jí)以及一些新特性——但基本結(jié)構(gòu)沒有改變。多年來,我們也嘗試過使用不同類型的ORM,但這些嘗試提議都不是為了響應(yīng)新的業(yè)務(wù)需求,而是出于對(duì)ActiveRecord模式的不滿。

 

最終,這些提議都沒有得到落實(shí)。事實(shí)證明,如果舊代碼能夠有以下優(yōu)點(diǎn),那它們比新代碼更好:

  • 工作高效
  • 靜態(tài)分析簡(jiǎn)潔
  • 測(cè)試運(yùn)行良好
  • 是常用代碼

謝天謝地,我們現(xiàn)有的ORM滿足上述四個(gè)要求。

保留可靠的舊代碼也讓我們有機(jī)會(huì)將精力集中在為業(yè)務(wù)帶來實(shí)質(zhì)利益的事情上。而且我負(fù)責(zé)任地說,Vimeo近來一直不斷發(fā)展,有大量像Vimeo Record這樣很棒的新產(chǎn)品。

十年前,許多開發(fā)人員編寫了一部分PHP后就轉(zhuǎn)向了其他更受歡迎的語言。他們經(jīng)常熱切地告訴別人不要再編寫PHP。我想告訴大家,PHP可以成功。Vimeo在PHP上的持續(xù)成功證明了它是2020年公司快速發(fā)展的一大利器。

PHP的崛起至少讓一個(gè)反對(duì)者改變了看法。我的一位同事,之前一直批評(píng)PHP,有一天他把我拉到一邊,非常真誠(chéng)地感謝我告訴了他“用PHP工作并不一定很糟糕”。

 

責(zé)任編輯:華軒 來源: 讀芯術(shù)
相關(guān)推薦

2009-11-25 09:20:31

Windows 7網(wǎng)絡(luò)掉線

2021-06-18 10:29:17

物聯(lián)網(wǎng)安全互聯(lián)網(wǎng)IoT

2019-08-19 07:54:20

2021-07-19 10:15:53

Java絕對(duì)值代碼

2020-08-30 14:31:40

Python編程語言開發(fā)

2016-10-17 18:00:46

WIFIWIFI信號(hào)

2024-07-22 08:15:30

2025-03-12 06:55:00

2013-05-14 10:41:16

Palo AltoNGFWUTM

2021-02-26 09:04:22

數(shù)組ArrayListHashMap

2010-11-17 11:11:44

跳槽

2021-01-29 09:17:00

深度學(xué)習(xí)AI人工智能

2022-03-21 09:47:02

深度學(xué)習(xí)模型人工智能

2022-08-15 13:59:10

XaaS云計(jì)算

2022-12-26 09:16:45

Guava架構(gòu)模型

2016-11-28 11:19:48

術(shù)語神秘

2018-01-18 05:20:59

2015-06-29 11:38:47

物聯(lián)網(wǎng)

2022-04-26 06:53:37

HBaseMD5RowKey

2018-03-09 10:34:48

顯卡參數(shù)超頻
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)