2013-08-07 44 views
4

PHP嵌入了V8 JavaScript引擎,http://www.php.net/manual/en/book.v8js.php。我想知道什麼是可能的用例,尤其是。考慮到PHP是同步的並且JavaScript是異步的。PHP中用於V8的用例是什麼?

+0

此鏈接可能會幫助您瞭解您的問題http://www.developerknowhow.com/why-the-v8-javascript-engine-is-so-good/ – krishna

+2

不確定您說JavaScript是異步的意思 - 不是。我能想到的唯一用例是卸載一些複雜的數學計算,因爲V8生成/ JITs機器代碼,並且將比本地PHP更快地運行代碼。 – Sim

+0

@Sim我想象OP在想Node.js。儘管節點是連續的,但幾乎所有的API都是異步的(http,文件系統等)。 –

回答

0

PHP和Javascript是語言,說一個是同步的而另一個不是同義的。非正式地說,這意味着圍繞該語言使用I/O的大多數庫都使用異步/同步IO。

在覈心語言和V8中,沒有什麼是異步的。

爲什麼要使用它? V8上的Javascript的速度比規範的PHP實現要快上幾個數量級(注意,還有其他PHP實現,like Facebook's HHVM),同時仍然是功能強大的腳本語言。通常情況下,您將被迫爲PHP編寫C擴展來獲得原始性能。

4

此擴展的一個強大功能是可以在客戶端和服務器端使用相同的代碼,在服務器端和js客戶端重複使用PHP中相同代碼的實現。

一個可能的用例是使用相同的JS代碼提供服務器端和客戶端驗證。客戶端,代碼將在瀏覽器中運行,服務器端則使用V8JS執行。

其他潛在用途可能是模板或客戶端和服務器端都需要的任何其他業務邏輯。

雖然這似乎仍然處於未知領域。我還沒有看到任何類似這樣的庫使用V8JS。

+1

我從此建立了一個使用V8JS的驗證庫。但是,它並沒有離開原型車庫。在幾個項目中實現它之後,我意識到PHP開發人員不一定要混合後端和前端邏輯,即使它們在兩個方面都被重用。代碼混合不好。此外,後端和前端開發通常由不同的團隊完成,前端開發人員可能會對驗證庫有自己的偏好。後端驗證比整個驗證邏輯更容易提取規則名稱。 – Gajus

+1

我一直在想如何使用V8JS驗證系統工作,並想知道爲什麼還沒有一個半流行的尚未。我的猜測是,它不能很好地工作。 雖然有幾個項目使用V8JS: React.js渲染器:https://github.com/reactjs/react-php-v8js Handlebars渲染器:https://github.com/SinisterMinister/php -barly 和BEM渲染器:https://github.com/zxqfox/php-bem –

3

我在PHP中使用JS集成的一種方式是爲最終用戶在基於PHP的應用程序內安全執行用戶提供的代碼(a.k.a.腳本)提供一種簡單的方式。通過隱式隔離,可以限制可用的輸入和功能,以保護用戶隱私和系統安全,同時允許在服務器上下文中進行各種用戶定義的腳本操作。

我必須承認,在數據庫記錄中看到可執行的JavaScript代碼有時會有點不安!儘管如此,你還是可以克服的。 :)

-1

對不起碰到/添加到一個古老的問題,但Web 2.0/3.0時代的一個相當明顯的用例將是「當file_get_contents()只是不會削減它。」

雖然它可能不是最好的選擇,但對於漫遊器,蜘蛛,刮板等,PHP也不是最好的選擇。越來越多的網頁不完整,除非它們上的JavaScript被執行/呈現。

+0

你在暗示什麼?使用V8獲取Web資源不會使其執行實際的腳本。我想,這是可能的。儘管如此,更好的選擇將是一個無熱量的瀏覽器,例如phantomjs。 – Gajus

1

一個用例可能是用於JavaScript模板或框架的服務器端呈現,簡稱SSR。

人們可以用像Vue.js這樣的javascript框架來編寫他們的模板,或者用v8js來做出反應和渲染。

一旦php已經呈現模板並將其發送到瀏覽器,javascript框架可以選擇它並使其交互。

這裏有兩個好處是更快的加載web應用程序和沒有惱人的javascript頁面閃爍。

0

對於構建爬蟲從HTML模擬Javascript運行時提取有用的數據特別有用,因爲一些HTML數據可能被Javascript代碼隱藏/損壞。所以除非你自己想在PHP中編寫JavaScript解析器 - 唯一的選擇是使用已經構建的V8引擎。