LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

PHP到底有多糟糕?

admin
2024年7月25日 0:27 本文熱度 1193
我來(lái)回答這個(gè)問(wèn)題是告訴各位開(kāi)發(fā)者:你們根本不會(huì)用PHP

這是個(gè)非常有趣的問(wèn)題

無(wú)論是提問(wèn)者還是回答者,無(wú)論是支持者還是反對(duì)者,都沒(méi)有聊技術(shù)上的事,都只是觀(guān)念的碰撞.

這很好理解,因?yàn)镻HP已經(jīng)流行了那么多年了,技術(shù)上沒(méi)有那么多糟糕的地方,本質(zhì)上還是開(kāi)發(fā)人員觀(guān)念的問(wèn)題,這是一個(gè)我們必須要承認(rèn)的事實(shí),不同的開(kāi)發(fā)人員的觀(guān)念是不一樣的,比如:

有的人認(rèn)為代碼是給人看的,他們狂熱的推崇ORM,

有的人認(rèn)為代碼是給機(jī)器跑的,拼接的SQL比什么都快;

學(xué)院派認(rèn)為一個(gè)語(yǔ)言需要有健壯的設(shè)計(jì),所以狂熱地推崇GO之類(lèi)的語(yǔ)言,

實(shí)用派則認(rèn)為語(yǔ)言的任何發(fā)展方向都要為開(kāi)發(fā)人員服務(wù),所以兼容性/實(shí)用性/穩(wěn)定性處于不可撼動(dòng)的地位.

激進(jìn)的人總是想拋棄糟糕的,引入更酷的,

保守的人老是想著保留能用的,只引入不可或缺的.

注重長(zhǎng)遠(yuǎn)架構(gòu)設(shè)計(jì)的人會(huì)對(duì)業(yè)務(wù)做出層層分層,

需要快速實(shí)現(xiàn)的人做個(gè)MVC就已經(jīng)謝天謝地了.

這種沖突很有意思,沒(méi)什么對(duì)錯(cuò),但我不是和事佬,我來(lái)回答這個(gè)問(wèn)題是告訴各位開(kāi)發(fā)者:你們根本不會(huì)用PHP(狗頭).

當(dāng)然,開(kāi)個(gè)玩笑.

PHP有很多打開(kāi)方式,所以當(dāng)我們聊PHP時(shí),最好說(shuō)清楚自己在說(shuō)什么,比如:

  • PHP-FPM:傳統(tǒng)的經(jīng)典的動(dòng)態(tài)語(yǔ)言使用方式

  • PHP-CLI:普遍的強(qiáng)大的高性能的使用方式

  • PHP-擴(kuò)展:C/C++級(jí)別的擴(kuò)展能力

以上三種打開(kāi)方式大家可能都或多或少的了解一些:

PHP-FPM最流行的代表無(wú)疑是Wordpress,還有一大堆普遍常見(jiàn)的開(kāi)發(fā)框架和開(kāi)源產(chǎn)品,如ThinkPHP,Laravel,各類(lèi)shop.

PHP-CLI也是最近流行起來(lái)的開(kāi)發(fā)方式,比如Workerman/Swoole/React-PHP,能夠獲得更高的性能(相對(duì)PHP-FPM,主要是頻繁加載等環(huán)節(jié)),類(lèi)似Java和Go的部署模式,更多的網(wǎng)絡(luò)開(kāi)發(fā)能力,比如長(zhǎng)鏈接/微服務(wù),也有更安全的加載方式,比如以前的掛馬方式就廢了,PHP不再以動(dòng)態(tài)加載的方式運(yùn)行.

PHP-擴(kuò)展卻不是一個(gè)輕松地事,復(fù)雜的Zend-API讓人望而卻步,每個(gè)開(kāi)發(fā)者都勸自己,不要搞擴(kuò)展,好好活著,沒(méi)必要深入C/C++,還不如學(xué)GO了.實(shí)際上PHP的擴(kuò)展也有很多開(kāi)發(fā)方式,比如swoole作者的PHP-X,和我介紹過(guò)的一個(gè)項(xiàng)目:PHP-CPP,他們把復(fù)雜的Zend-API抽象封裝,讓擴(kuò)展的開(kāi)發(fā)就像寫(xiě)PHP那樣簡(jiǎn)單(真的,使用PHP-CPP寫(xiě)擴(kuò)展真的跟PHP一樣簡(jiǎn)單,強(qiáng)烈推薦)

如何開(kāi)發(fā) PHP 擴(kuò)展?PHP 擴(kuò)展應(yīng)該注意些什么? - PHP武器庫(kù)的回答 - 知乎 zhihu.com/question/2001

幾個(gè)有趣的打開(kāi)方式

以上幾種用法算是"官方的","標(biāo)配的","兼容的"用法,就是說(shuō)你在PHP-FPM可以運(yùn)行的代碼,在PHP-CLI也能運(yùn)行,在PHP-擴(kuò)展中也能調(diào)用成功.

但是這里我要介紹幾個(gè)其他的打開(kāi)方式,他們或許不能完全兼容原來(lái)代碼的運(yùn)行方式,但也為我們的一些業(yè)務(wù)提供了一些新的開(kāi)發(fā)方式,滿(mǎn)足我們一些特殊的要求.

KPHP

KPHP是一個(gè)PHP編譯器,能夠?qū)HP代碼編譯成本地二進(jìn)制文件.

KPHP會(huì)將PHP的代碼轉(zhuǎn)換成等效的C++代碼,然后編譯生成的C++代碼并以嵌入式HTTP的方式運(yùn)行.可以把它認(rèn)為是PHP的"轉(zhuǎn)譯",因?yàn)樗前裀HP的代碼"翻譯"成C++的代碼,但最終效果來(lái)看,也算是一個(gè)PHP的"編譯器".

KPHP不是面向JIT的,所有的了類(lèi)型都是在編譯時(shí)(翻譯成C++時(shí))推斷的,不存在"慢啟動(dòng)"階段.

但是:

KPHP并不是一個(gè)萬(wàn)能的項(xiàng)目,他不是PHP的一個(gè)分支,也不是PHP的一個(gè)擴(kuò)展,它是一個(gè)全新的獨(dú)立的運(yùn)行PHP代碼的方式,他有很多的限制,你可能沒(méi)辦法編譯你現(xiàn)有的項(xiàng)目(比如ThinkPHP).

KPHP的諸多限制:

  • 不能編譯本身就不能編譯的功能,不能比如變量名調(diào)用函數(shù):$fname()

  • 不能編譯破壞系統(tǒng)類(lèi)型的代碼,比如數(shù)組中混合數(shù)字和對(duì)象

  • 一些PHP的細(xì)節(jié)特性,比如生成器和匿名類(lèi)

KPHP和PHP本身有很多差異,比如在PHP中,運(yùn)行時(shí)才會(huì)報(bào)錯(cuò),而在KPHP中,必須修復(fù)所有錯(cuò)誤才能運(yùn)行,再比如在KPHP中所有的代碼都是內(nèi)聯(lián)的,如果a文件需要b文件的函數(shù),那就require引入b文件,這時(shí)其他文件不需要引入b文件也能調(diào)用到那個(gè)函數(shù),同時(shí)KPHP不支持evel,反射,數(shù)組指針等等特性.

由于以上諸多限制,一般情況下你并不能將你現(xiàn)有的業(yè)務(wù)直接使用KPHP編譯成二進(jìn)制.

但是這并不代表他一無(wú)是處,你可以按照KPHP的規(guī)范標(biāo)準(zhǔn)去寫(xiě)代碼,比如你系統(tǒng)中的某一個(gè)獨(dú)立的小模塊,然后把他編譯成二進(jìn)制文件,至少這部分系統(tǒng)不需要擔(dān)心代碼泄露的問(wèn)題.

性能,你肯定想了解它的性能.

實(shí)際上對(duì)于密集的算法邏輯,比如冒泡排序,在網(wǎng)站給出的 測(cè)試中:

  • PHP7.4 花費(fèi) 2100毫秒,

  • KPHP 花費(fèi) 480毫秒,

  • 只有四分之一的時(shí)間

如果將冒泡排序使用跟多的數(shù)組函數(shù)進(jìn)行優(yōu)化,

  • KPHP花費(fèi)270毫秒

  • C++花費(fèi)220毫秒

  • KPHP的性能幾乎和C++一樣

在小編看來(lái),KPHP的性能確實(shí)不錯(cuò),不過(guò)小編認(rèn)為KPHP更棒的地方在于能夠?qū)HP代碼編譯成二進(jìn)制文件,這樣我們?cè)诜职l(fā)系統(tǒng)(產(chǎn)品)的時(shí)候,完全可以把最核心的技術(shù)和功能編譯成二進(jìn)制,避免代碼泄露.

peachpie

另一個(gè)有趣的項(xiàng)目是peachpie,它能將PHP便以為.NET,這樣就能獲得.NET的能力,比如跨平臺(tái),二進(jìn)制.

它的目標(biāo)如下:

  • 提高性能,一般的將PHP編譯成.NET之后,性能會(huì)得到一定的提升

  • 安全性.在標(biāo)準(zhǔn)化和可管理的.NET環(huán)境或.NET core環(huán)境中運(yùn)行,代碼都是編譯過(guò)的

  • 跨平臺(tái)開(kāi)發(fā),可以將PHP編譯成可移植類(lèi)庫(kù),在所有的.NET平臺(tái)中運(yùn)行

  • 完全兼容.NET,為peachpie編寫(xiě)的代碼與PHP完全兼容

  • 雙向操作,可以用C#和PHP混合編寫(xiě),通過(guò).NET框架通信

與之前介紹的KPHP而言,peachpie的目標(biāo)和定位是為PHP提供一個(gè)新的運(yùn)行平臺(tái),并且應(yīng)當(dāng)完全利用和兼容PHP的全部生態(tài),這當(dāng)然是美好的愿望.

但實(shí)際上,peachpie也并沒(méi)有實(shí)現(xiàn)百分之百的PHP的特性,不過(guò)也完成了大部分:

更完整的函數(shù)表可以參考他的官網(wǎng).

在小編看來(lái),peachpie也為我們提供了一個(gè)新的分發(fā)方式,我們可以將一些簡(jiǎn)單地核心的最有價(jià)值的一部分功能使用peachpie來(lái)分發(fā),完全可以做到保護(hù)代碼的效果.

PHP-JS

這是一個(gè)很有趣的項(xiàng)目,他能夠使用PHP來(lái)運(yùn)行JS的代碼,是的,可以在PHP中運(yùn)行JS的代碼,就好像用PHP做了一個(gè)Node一樣,當(dāng)然并沒(méi)有Node那樣的生態(tài).

他可以在PHP中運(yùn)行JS,并且和JS之間互通變量函數(shù),讓小編很激動(dòng)的是,也可以互通資源類(lèi)型和對(duì)象,比如PDO,

我們可以在PHP中實(shí)例化一個(gè)PDO資源,然后傳遞到JS代碼當(dāng)中:

$context = new JS\Context;$context->assign('print_r', function($variable) { print_r($variable); });$context->assign('database', new mysqli('example.com', 'user', 'password', 'database'));$script = <<<'EOD'    var result = database.query("SELECT id FROM test ORDER BY id ASC");    while (row = result.fetch_assoc())    {        print_r(row);    }EOD;// execute the script now$context->evaluate($script);

當(dāng)然小編多次嘗試安裝PHP-JS,但是他是一個(gè)C++擴(kuò)展,遇到了很多新手問(wèn)題,以后有機(jī)會(huì)會(huì)繼續(xù)研究.

PHP-CPP

這個(gè)項(xiàng)目在前面已經(jīng)簡(jiǎn)單介紹了一下,可以通過(guò)那個(gè)鏈接詳細(xì)查看,這里小編還是想推薦一下它.

簡(jiǎn)單來(lái)說(shuō),就是使用C++來(lái)為PHP編寫(xiě)擴(kuò)展,并且可以做到一個(gè)擴(kuò)展只在一個(gè)站點(diǎn)加載.

面對(duì)PHP的擴(kuò)展,每個(gè)人都會(huì)告訴你,ZendAPI是復(fù)雜的,混亂的,你馴服不了他,別浪費(fèi)時(shí)間了.

實(shí)際上是這樣的,但是PHP-CPP將ZendAPI封裝起來(lái),并且提供了完善的文檔和注釋,使得使用C++開(kāi)發(fā)擴(kuò)展變得非常容易和優(yōu)雅,寫(xiě)起來(lái)甚至和PHP代碼一樣簡(jiǎn)單.

并且我們都知道,使用擴(kuò)展來(lái)開(kāi)發(fā)具體業(yè)務(wù)會(huì)有幾個(gè)問(wèn)題,

  • 沒(méi)辦法動(dòng)態(tài)加載擴(kuò)展

  • 擴(kuò)展必須存儲(chǔ)在指定的目錄

  • 擴(kuò)展一旦加載,對(duì)這個(gè)服務(wù)器上所有的站點(diǎn)都生效

實(shí)際上PHP-CPP完美的解決了這些問(wèn)題,基本做法是,不要使用PHP原生的方式加載擴(kuò)展,而是先用PHP-CPP做一個(gè)加載擴(kuò)展的功能,使用C++的能力,來(lái)做動(dòng)態(tài)加載,并且可以讓你的擴(kuò)展存儲(chǔ)在任意位置,隨意分發(fā),同時(shí)也可以讓加載的擴(kuò)展只對(duì)指定站點(diǎn)生效,不存在安全問(wèn)題.


結(jié)論

小編在開(kāi)頭說(shuō)大家不會(huì)PHP,其實(shí)只是一句玩笑,但是對(duì)于國(guó)內(nèi)大多數(shù)的開(kāi)發(fā)展而言,包括PHP和其他的開(kāi)發(fā)者,都有一個(gè)錯(cuò)誤的概念:PHP=PHP-FPM。

就是說(shuō)所有人都認(rèn)為PHP-FPM就是PHP,只能做HTTP。

實(shí)際上并不是,小編介紹的這幾個(gè)項(xiàng)目可能并不是主流趨勢(shì),但是PHP-CLI的開(kāi)發(fā)方式已經(jīng)流行起來(lái)了,比如ReactPHP在國(guó)外火了很久了,WebMan是workerman近兩年推出的一個(gè)面向HTTP的一個(gè)解決方案,Swoole則被各類(lèi)培訓(xùn)機(jī)構(gòu)宣傳。

所以PHP到底有多糟糕呢?

其實(shí)沒(méi)那么糟糕,很多東西你不知道而已。


該文章在 2024/7/25 0:27:19 編輯過(guò)

全部評(píng)論1

admin
2024年7月25日 0:30
 PHP 有多糟糕,簡(jiǎn)單說(shuō),PHP 是主流工業(yè)語(yǔ)言里最糟糕的。


看看 Swoole 的作者韓天峰怎么評(píng)價(jià)的:

PHP 語(yǔ)言有 20 多年的歷史,由于一直保持向下兼容。存在很多糟糕的地方,比如:

  • 混亂的函數(shù)命名
  • 不友好的 Array/String 函數(shù),至今數(shù)組和字符串的操作都沒(méi)有實(shí)現(xiàn) OO 接口
  • 混亂的參數(shù)順序,導(dǎo)致完全記不住一個(gè)函數(shù)的用法,每次需要查手冊(cè)或借助 IDE
  • 難用的 Zend API ,導(dǎo)致了在應(yīng)用與內(nèi)核之間,很難有一個(gè)中間層。比如 Node.js 做的就很好,它提供的 C++ API 可以讓其他 C++ 程序員很方便地為 Node 編寫(xiě)擴(kuò)展模塊。而 Zend API 幾乎就是地獄模式,對(duì)開(kāi)發(fā)者要求太高了。我在今年新開(kāi)發(fā)的 PHP-X 就是為了解決這個(gè)問(wèn)題
  • 缺乏異步 IO 網(wǎng)絡(luò)層,PHP 官方只提供了 sockets、stream、select 等 IO 函數(shù),無(wú)法滿(mǎn)足現(xiàn)在大并發(fā)時(shí)代的需求。所以就有了 Swoole 這個(gè)項(xiàng)目
  • 缺乏對(duì)多線(xiàn)程的支持,雖然有一個(gè) pthreads 項(xiàng)目,但這個(gè)連玩具都算不上。多線(xiàn)程需要 PHP 語(yǔ)言底層進(jìn)行支持,而 PHP 設(shè)計(jì)之初就沒(méi)考慮過(guò)多線(xiàn)程


當(dāng)然,PHP 也有明顯的優(yōu)點(diǎn),比如其部署對(duì)于虛擬主機(jī)的友好超過(guò)(除了古老的 ASP 之外的)所有其他主流語(yǔ)言,因此在互聯(lián)網(wǎng)應(yīng)用爆發(fā)初期就占領(lǐng)了巨大市場(chǎng),一些世界上最大的網(wǎng)站最初(甚至至今)都是 PHP 寫(xiě)的,這是其至今屹立不倒的核心原因。


如韓天峰所言,PHP 的糟糕主要源自于歷史包袱。

或曰,其他語(yǔ)言也有歷史包袱呀?確實(shí),但是 PHP 的歷史包袱特別嚴(yán)重。


這有幾個(gè)原因。

第一,PHP 最初設(shè)計(jì)(相比其他編程語(yǔ)言)就很不專(zhuān)業(yè)。盡管 Rasmus 是個(gè)很優(yōu)秀的程序員,但是語(yǔ)言設(shè)計(jì)方面不是他所專(zhuān)長(zhǎng),而且一開(kāi)始他根本沒(méi)有打算做個(gè)語(yǔ)言,而只是給自己個(gè)人使用的簡(jiǎn)單工具集。這些歷史可以自行查閱 Rasmus 的訪(fǎng)談。這導(dǎo)致從設(shè)計(jì)到實(shí)現(xiàn)都有很多臨時(shí)性的舉措。奇怪的大小寫(xiě)設(shè)定(PHP黑系列之一:PHP 為什么大小寫(xiě)規(guī)則是如此不規(guī)則?),函數(shù)命名不一致(PHP黑系列之二:PHP 為什么函數(shù)命名是如此不一致?)等的根源都是這些未經(jīng)設(shè)計(jì)的偶然因素。即使底層代碼在PHP3之后就基本重寫(xiě)了,但由于后面提到的原因遺毒至今。

第二,PHP 的后續(xù)開(kāi)發(fā)(相比其他編程語(yǔ)言)也缺乏語(yǔ)言設(shè)計(jì)專(zhuān)家的參與。一些借鑒其他編程語(yǔ)言的新特性雖然總體上還是可用的,但是可能存在微妙的語(yǔ)義問(wèn)題或?qū)崿F(xiàn)限制。一些設(shè)計(jì)錯(cuò)誤并沒(méi)有被修復(fù),反而被延續(xù)和擴(kuò)大。最典型的比如允許函數(shù)、常量同名,本來(lái)在PHP引入類(lèi)、接口的時(shí)候就應(yīng)該修正,但結(jié)果是允許類(lèi)、函數(shù)、常量同名。這導(dǎo)致當(dāng) PHP 發(fā)展到今天,常量不能是閉包Why PHP doesn't allow anonymous functions inside CONST?),導(dǎo)致命名空間必須用 use const/function 這樣脫褲子放屁的語(yǔ)法(這個(gè)問(wèn)題以后我有空會(huì)在《PHP黑系列》中單獨(dú)講一講)。一些常用庫(kù)的設(shè)計(jì)和改進(jìn)也全憑運(yùn)氣。比如 JSON 相關(guān)的 API 的擴(kuò)展和變更中出現(xiàn)了明顯的失誤(主要是由于后續(xù)維護(hù)者沒(méi)能理解和保持最初 API 的隱含約束,以后我有空會(huì)在《PHP黑系列》中單獨(dú)講一講)。

第三,PHP 社區(qū)信奉實(shí)用主義。實(shí)用主義不是不好,但是過(guò)度的實(shí)用主義導(dǎo)致 PHP 社區(qū)普遍低估其他因素(如編程體驗(yàn))的重要性。PHP 歷史上的巨大成功加劇了這種心理傾向,進(jìn)一步削弱了改善動(dòng)力。這可能也造成了對(duì)語(yǔ)言改善有想法的人(包括語(yǔ)言設(shè)計(jì)專(zhuān)家)與 PHP 社區(qū)的互相排斥。這反過(guò)來(lái)惡化了第二點(diǎn)。另一方面,由于 Rasmus 本人并沒(méi)有領(lǐng)導(dǎo) PHP 后續(xù)開(kāi)發(fā),也沒(méi)有像 Python/Ruby/Perl 等語(yǔ)言的創(chuàng)造者那樣保留對(duì)語(yǔ)言發(fā)展關(guān)鍵問(wèn)題的最后的『仁慈獨(dú)裁』權(quán)力,使得 PHP 后續(xù)發(fā)展歷史上缺少敢于拍板做革命性修正的靈魂人物(所謂革命性修正,如 python3、perl6、ES6 等,注意這里不討論革命性修正的具體得失)。


其實(shí)自從 PHP 5.4 之后,PHP 核心社區(qū)在語(yǔ)言改善上是有很多進(jìn)步的,包括敢于做一些破壞兼容性的修改,開(kāi)發(fā)節(jié)奏也比以前要快很多。PHP 7 更是一個(gè)非常巨大的改進(jìn)。我們也看到了很多致力于提升開(kāi)發(fā)體驗(yàn)和解決歷史問(wèn)題的 aggressive 的提案。但是更廣泛的 PHP 開(kāi)發(fā)者社區(qū)心態(tài)上還是沒(méi)有跟上(此處國(guó)外了解不多,主要談國(guó)內(nèi))。舉個(gè)例子來(lái)說(shuō),本問(wèn)題下的某個(gè)認(rèn)為『PHP 談不上有多糟糕』的高贊答主,之前在許多其他涉及 PHP 的問(wèn)題發(fā)出『JIT 也不見(jiàn)得快』的評(píng)論。PHP 7 沒(méi)有做 JIT 的原因,鳥(niǎo)哥解釋過(guò)。糟糕的是,一些人把鳥(niǎo)哥的解釋理解為『PHP 不需要 JIT』,或者『JIT 沒(méi)用』,并且反以(沒(méi)有JIT)為榮。實(shí)際上真正的原因是 PHP 以前的實(shí)現(xiàn)太糟糕了,以至于上了 JIT 也沒(méi)卵用。在 PHP 7 重寫(xiě)了底層的 zval 之后,現(xiàn)在已經(jīng)重新上了 JIT 并體現(xiàn)出了可觀(guān)的性能提升。當(dāng)然,我是不指望這些人能承認(rèn)打臉的,他們只會(huì)繼續(xù)拿這些事情來(lái)宣揚(yáng) PHP 是『最好的語(yǔ)言』。

PHP 社區(qū)的問(wèn)題還表現(xiàn)在缺乏生態(tài)多樣性。同樣是引入靜態(tài)類(lèi)型的方言,Hack 的接受程度遠(yuǎn)遠(yuǎn)小于 TypeScript(之于 JavaScript)。注意,我不是在討論 PHP 是否應(yīng)該引入靜態(tài)類(lèi)型,而是在探討一個(gè)世界頂級(jí)技術(shù)公司對(duì)其核心技術(shù)資產(chǎn)的推動(dòng)力。PHP 領(lǐng)域,facebook 已經(jīng)是頂級(jí)玩家。JS 領(lǐng)域,像 facebook 這個(gè)等級(jí)的,就多得去了。但是 facebook 對(duì) PHP 社區(qū)的影響力居然遠(yuǎn)遠(yuǎn)不如其對(duì) JS 社區(qū)的影響力。可見(jiàn) PHP 社區(qū)的糟糕。我要是 facebook 的技術(shù)決策者,早晚是要拋棄 PHP 的(實(shí)際上已經(jīng)開(kāi)始拋棄了)。


總之,PHP 的糟糕最主要在于很難擺脫歷史包袱。糟糕中的糟糕則是,盡管 PHP 核心開(kāi)發(fā)團(tuán)隊(duì)確實(shí)在不斷改進(jìn),但更廣泛的社區(qū)似乎仍然心態(tài)保守。


該評(píng)論在 2024/7/25 0:30:30 編輯過(guò)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲精品尤物视频在线观看 | 久久久久久久亚洲精品中文 | 亚洲精品嫩草影院久久 | 亚洲性爱女色在线视频 | 另类专区亚洲色 | 亚洲国产色福利网 |