2010-09-03 117 views
6

我正確的說,如果有人爲Web瀏覽器編寫了一個Ruby插件,並且用戶安裝了該插件,那麼可以用前端的ruby替換javascript。用於Web瀏覽器的Ruby插件?

這個沒有任何插件嗎?或甚至在瀏覽器端使用JavaScript以外的其他語言?

回答

5

您可以在Silverlight插件中使用http://ironruby.net/,但我不知道如何輕鬆進行DOM交互。

但我BEG YOU不這樣做!請使用Open Web Stack解決您的問題。
如果你不離開你的Ruby世界的舒適,你不僅會傷害你的用戶體驗「跆拳道?爲什麼我需要Silverlight的這個網頁?」但是你也會陷入你的小小的Ruby世界,而沒有學習任何新的和令人興奮的東西。

如果你只是繼續學習JavaScript,那對你們倆都會更好。

因爲記住:「學習是件好事!」

+1

插件會引入巨大的安全漏洞和性能問題。以閃存插件爲例,這個插件的處理器密集度過高,無法在手機上正常運行,並定期發佈補丁程序以關閉危險的安全漏洞。 JavaScript是瀏覽器的語言,如果有的話,尋找一個Ruby to JavaScript編譯器。 – BGerrissen 2010-09-03 12:51:13

0

從技術上講,這是正確的,假設瀏覽器/插件還提供了一個廣泛的API來處理DOM等。我不知道有任何插件可以實現這一點,但這是一個有趣的想法。

1

可能有間接的方法。 Here is the original presentation在RubyConf 2008.主題:

這個講座講述了在Web瀏覽器中運行ruby的許多途徑。我會先談談爲什麼這是一個好主意。然後,我會簡要地談談我調查過的每種方法以及我遇到的每種FAIL的不同數量。接下來,我將重點討論最有前途的競爭者rubyjs,它是一個輸出javascript的ruby編譯器。

項目rubyjs still exists,但它似乎已經死了。這個想法可能有點太瘋狂了。

2

有一件事情是事實:截至2010年,JavaScript沒有線程停止「睡眠」功能(僅僅是燒掉CPU週期的功能)。

在發表此評論之前,我一直在使用JavaScript至少一年,並且我得出結論:缺少線程停止休眠功能對於線程相關代碼是一個真正的顯示屏。

缺乏sleep函數的一個後果就是無法模擬Ruby/C#/ C++ /等。例如JavaScript中的線程模型,這意味着不能將任何啓用線程的語言轉換爲JavaScript,無論這種語言是做什麼的,除非JavaScript補充了一個(最好是非CPU週期燒錄)睡眠功能。

如果有人在周圍徘徊,那麼可以找到很多評論,說明睡眠函數甚至不是必需的,setTimeout足夠等等,但是我猜那些聲明的人沒有試圖實現JavaScript中的線程框架。 (考慮互斥體,關鍵部分我拒絕討論關鍵部分/同步對於案例而言不是必需的,其中小部件內容由形成「原子整體」的多個數據組件組成。)

整個DOM模型的第二個show-stopper是在後臺線程中呈現DOM元素的實現。

這裏的,會發生什麼:

在Javascript中: create_my_awsome_widget_in_DOM(); edit_my_awsome_widget_by_editing_DOM_inside_it() if_we_are_lucky_we_reach_here_without_crashing_the_app()

由於DOM在後臺(讀:在一個單獨的線程)呈現,會有發起DOM編輯,通過調用到create_my_awsome_widget_in_DOM線程之間的競爭條件()和DOM渲染。如果渲染線程「足夠快」以在JavasSript線程調用edit_my_awsome_widget_by_editing_DOM_inside_it()之前渲染DOM,則一切正常,但是如果相反,則JavaScript開始修改DOM的區域(尚未)存在。

本質上,它意味着由於背景DOM渲染create_my_awsome_widget_in_DOM()和edit_my_awsome_widget_by_editing_DOM_inside_it()以隨機的順序執行,顯然應用程序崩潰,如果edit_my_awsome_widget_by_editing_DOM_inside_it()是create_my_awsome_widget_in_DOM之前()調用。

+0

實際上,可能有一種方法可以在JavaScript中模擬合適的sleep()。 截至2011年1月,我不知道,如果它有效,但可能是,如果一個「覆蓋函數類」,比方說,通過將所有應用程序級函數調用包裝到自己設計的實例,並使用「自制的虛擬線程「,人們可能會獲得適當的sleep()模擬,而不會燒燬CPU週期。 但是,它可能是一個噱頭,因爲,正如我所說,截至2011年1月,我還沒有嘗試過。 – 2011-01-11 18:11:23