首先, 大家都知道, php也是一種編譯型指令碼語言, 和其他的預編譯型語言不同, 它不是編譯成中間**, 然後發布.. 而是每次執行都需要編譯..
為此, 也就有了一些opcode cache, 比如開源的apc, eacc. 還有商業的zend o+等.
那麼為什麼php不把編譯/執行分開呢?
php雖然是一種編譯型指令碼語言, 但是它的編譯速度非常快, 它的編譯不做任何語義優化, 就是簡單的忠實的把你所寫的**翻譯成對應的opcodes. 而其他語言因為在編譯器做很多的優化工作, 會造成編譯比較重, 也一定程度上要求它們分離.
所以, 理論上來說, 通過編譯執行分離, 想達到原始碼加密, 是不會有什麼太大收效的, 因為它很容易被反向.
另外, 編譯直接分離, 並不會帶來特別大的收益, 反而會降低除錯部署的效率(想想, 修改, 編譯, 發布, 看效果), 並且apc等opcode cache工具, 已經很成熟了..
到這裡, 請大家注意這句:」它的編譯不做任何語義優化」….
這也就是我為什麼說, php對程式設計師的要求更高, 不同於其他的編譯型語言, php在編譯的時候不會幫你做一些優化, 比如對於如下的**:
$j
="laruence"
;for($i
=0;$i
<
strlen($j
);$i
++)
如果是其他預編譯語言, 它的編譯器也許會幫你做優化, 把strlen提取到前面去, 只做一次就夠了. 而對於php來說, 它在編譯的時候不做任何優化, 也就是說, 你的strlen, 會忠實的被呼叫8次.
再比如:
$table
="table"
;while($i
++<
1000
)
沒錯, 「select * from 」 . $table會被concat 1000次..
可見, php的程式設計師, 需要認真的想好, 你的**會怎麼被執行, 你怎麼寫**, 最終的執行效率才最高. 而不像其他的語言, 程式設計師可以把一部分優化工作交給編譯器.
這也就是我為什麼說:」php對程式設計師的要求更高」 的原因. 當然, 這個是好是壞, 那就是見仁見智了.
iOS程式設計師對演算法的要求
演算法和資料結構 鑑於二者的關聯,以下統稱演算法 對於程式設計師的重要性一直是個具有爭議性的話題。有一些程式設計師內心對演算法有著天然的排斥,面試當中一旦考察演算法知識,會被不少程式設計師吐槽,但有部分公司又一直在堅持這種做法。我且以乙個ios程式設計師的視角,談下自己粗淺的看法。不懂演算法並不妨礙...
高階程式設計師的要求
1 腦力勞動的人,我用的是大腦。如果是用搬運工,我去鄉下能招更便宜的 2 樓主 8年工作了,搞的 開發,介面庫 別人的,框架 別人的。資料庫 別人的。那麼,樓主你自己的東西呢?如果只是組合別人的東西,也就是個體力勞動。3 第二條你可能聽不懂,我換個方式說。你會用筷子,我也會,我還能左右手呢,有意義嗎...
VB 程式設計師 不要放鬆對自己的要求
業界一直對 vb 程式設計師有偏見,認為這個群體普遍水平不高。最近在維護 修改 vb.net 的老 時發現,這是有原因的。以 vb.net 為例,注意兩個選項 option explicit 和 option strict 前者表示,每個變數要先宣告才能使用。後者,則對隱式型別轉換有一定的要求。另外...