摘要:也可以接入項目打包測試流程做代碼檢測。擴展替換以后廢棄了和擴展,項目中使用的使用的類使用的是已經(jīng)廢棄的擴展使用擴展做兼容替換。測試方案和大部分公司差不多,項目組劃分了線下開發(fā)環(huán)境預發(fā)布環(huán)境和生產(chǎn)環(huán)境三個環(huán)境。
項目由PHP5.5切換至PHP7.1.15
背景
從2015年鳥哥的技術分享,我們知道PHP7是對底層實現(xiàn)得一次完全重構,函數(shù)調用機制和內(nèi)存管理等很多方便做了優(yōu)化,使PHP性能有了很大的提升,至今PHP7經(jīng)歷了多個版本的迭代,常用的擴展和插件也基本做到兼容了PHP7,升級PHP7的難度越來越低。
隨著閃貸業(yè)務的快速發(fā)展,推廣業(yè)務和API接口的代碼變得越來越復雜,頁面響應時間變得越來越慢,一定程度上影響到用戶的訪問體驗。因此最近花費了很多精力在優(yōu)化網(wǎng)站的性能上,力求使用戶得到更好的體驗。升級 PHP 7 作為其中一個重要環(huán)節(jié),取得了可觀的效果,后端 web 服務器的負載和核心頁面的響應時間都降低了很多。
PHP代碼升級
從PHP官方升級文來看,PHP7相較于PHP5語法基本改變不大,做到了向后99%的兼容,但是項目中還是有很多編碼不規(guī)范或者使用建議廢除的函數(shù)導致的不兼容,使用的ThinkPHP3.1框架也有很多不兼容的地方:
preg_replace的e修正符的棄用,使用preg_replace_callback函數(shù)替代,例如:
preg_replace("/_([a-zA-Z])/e", "strtoupper("1")", $name);替換為
preg_replace_callback("/_([a-zA-Z])/", function($r) {return strtoupper($r[1]);},$name)
eregi函數(shù)的棄用,使用preg_match函數(shù)配合/i修正符替換
ereg函數(shù)使用preg_match
類名稱和方法名同名會被解析為構造函數(shù),PHP7以后會報錯,使用__construct替換
方法中必傳參數(shù)沒有傳,PHP5會報警告,但是項目會繼續(xù)執(zhí)行,但是PHP7會直接報錯誤終止程序運行
PHP7對間接變量的解析順序和PHP5的解析順序不一致,若想保持一致使用{}保證解析順序
$foo->$bar["baz"] // 解釋為 ($foo->$bar)["baz"] 替換為$foo->{$bar["baz"]}
$foo->$bar["baz"]() // 解釋為 ($foo->$bar)["baz"]() 替換為$foo->{$bar["baz"]}()
Foo::$bar["baz"]() // 解釋為 (Foo::$bar)["baz"]() 替換為Foo::{$bar["baz"]}()
使用 php7cc 輔助進行代碼檢查,php7cc 可以檢查出來項目中大部分代碼不兼容的情況,然后輸出到文本中逐個文件做兼容處理。也可以接入項目打包測試流程做代碼檢測。
擴展替換
PHP7以后廢棄了mysql和mongo擴展,項目中使用的ucenter使用的db類使用的是已經(jīng)廢棄的mysql擴展,使用msyqli擴展做兼容替換。
因為mongo擴展在項目中使用太多,而且和mongodb擴展的API一點都不兼容,若是切換必須重寫整個底層訪問接口,工程量太大,所以使用了 mongo-php-adapter,它是基于 ext-mongodb 的 API 寫的 ext-mongo 的適配器,可以不對代碼進行任何修改,就遷移到 ext-mongodb 上,遷移成本低了很多。
測試方案
和大部分公司差不多,項目組劃分了線下開發(fā)環(huán)境、預發(fā)布環(huán)境和生產(chǎn)環(huán)境三個環(huán)境。一個需求從開發(fā)到上線,一般經(jīng)過幾個步驟:工程師在統(tǒng)一的線下開發(fā)環(huán)境完成開發(fā)和簡單的測試;再部署到預發(fā)布環(huán)境,由 測試進行統(tǒng)一的測試和回歸;最后,再正式部署到生產(chǎn)環(huán)境上。我們在升級部署 PHP 7 時,也是按這樣的順序遞進的:
升級線下開發(fā)環(huán)境,包括擴展升級和代碼升級,進行測試;
升級預發(fā)布環(huán)境,測試;
灰度測試生產(chǎn)環(huán)境,抓取錯誤日志分析,穩(wěn)定運行一段時間,再全量升級生產(chǎn)環(huán)境。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28420.html
摘要:最近在做一個英語答題項目項目需求是通過答題取的成績答題的題型是分為聽音選圖看圖選詞和填空題項目總共分為了個頁面開始頁答題頁和結束頁面答題頁關于每種題型我做了相應的組件每次切換題目的時候顯示對應的的組件要求聽音選圖的時候會自動播放音頻慣例下的 最近在做一個英語答題項目 , 項目需求是通過答題取的成績 , 答題的題型是分為 , 聽音選圖 , 看圖選詞 , 和填空題 . 項目總共分為了3個頁...
摘要:好了,閑話不多說今天要說的時利用監(jiān)聽路由的方式,實現(xiàn)同個頁面不同狀態(tài)的切換。只要等于,那么頁面就是待確認回款頁面進入待確認回款頁面中,回款狀態(tài)的篩選標簽要加上。 1.前言 今天發(fā)完這一篇,就要這個系列告一段落了!以后如果有什么要補充的會繼續(xù)補充!因為在后臺管理項目上,搭建的話,主要就是這樣了!還有的一些是具體到交互的處理,那個是要根據(jù)后端的需求,來進來比較細化的工作,我在這里就不說了!...
摘要:解決辦法可以在使用完切換數(shù)據(jù)庫的方法拿到需要的數(shù)據(jù)后,再次調用方法切換回接下來需要用到的數(shù)據(jù)庫。 1、首先配置兩個數(shù)據(jù)源(數(shù)據(jù)庫)以及一個動態(tài)數(shù)據(jù)庫: ...
閱讀 2831·2021-11-25 09:43
閱讀 980·2021-10-11 10:57
閱讀 2482·2020-12-03 17:20
閱讀 3724·2019-08-30 14:05
閱讀 2428·2019-08-29 14:00
閱讀 1996·2019-08-29 12:37
閱讀 1670·2019-08-26 11:34
閱讀 3209·2019-08-26 10:27