new Fn(...) vs. Object.create(P)

這篇翻譯自 mraleph文章,順便當作是自己的memo

V8裡物件設計的基礎

在V8裡每個JavaScript物件長的都像這樣

js object

有些重要的事項要先紀錄在這裡:

  • 物件可以有0個物件內屬性空間(in-object property slots)並用字典來處理物件外屬性儲存空間(out-of-object property storage)。這是很普通且慢的一種JavaScript物件表現方式(又稱為字典模式)。快速模式的JavaScript則有0個或以上的物件內屬性空間及利用陣列來處理物件外屬性儲存空間。
  • 越多屬性存在物件內屬性空間越好:他將減少間接存取這些屬性,也不會浪費記憶體空間來處理物件外屬性儲存空間的陣列標頭。
  • 一旦物件被配置後就不可能再增加物件內屬性空間屬性的數量。若程式持續加屬性到一個已經沒有物件內屬性空間的物件,則新增的屬性將會被動態的加到物件外屬性儲存空間 ー 當然,動態增加也消耗很大。這就是為什麽有個好的關於估算一個物件將總共擁有多少屬性的方法非常重要。
  • 隱藏類別(Hidden Class)(又稱為 map)完全描繪了物件的樣板:該物件多大,有哪些屬性,有多少物件內屬性空間已經使用及已使用在哪(對於快速模式的物件)等等。隱藏類別基本上無法變更,每次有新屬性加到該物件時,該物件就會換到新的隱藏類別。

Read More

Manage **env with anyenv

由於現在的開發者可能需要用到多種語言來進行開發,但每次都必須安裝各個語言的**env來管理其語言的版本實在有點麻煩,不過現在有了讓大家更方便的anyenv,就不用每次都裝好幾個**env了!

按照以下步驟安裝即可。(基本上就和Readme裡一樣)

  1. Install
1
$ git clone https://github.com/riywo/anyenv ~/.anyenv

Read More

Promises in AngularJS, Explained as a Cartoon(翻譯)

有天早上,爸爸跟兒子:「兒子啊,去預測天氣看看!」

每個星期天早上,爸爸都會叫兒子帶著他的超強望遠鏡到較高的山丘上去預測下午天氣如何。兒子答應(promise)爸爸他會去預測天氣。他在離開門前創造了一個 承諾(promise)。

此時,爸爸決定若是好天氣,明天將準備去釣個魚。若是壞天氣則不去。還有,若兒子沒有預測天氣的話,他們也將留在家裡。

大約三十分鐘左右後,兒子回來了。每周每周都發生著不一樣的結果:

Read More

Setup SVN on Ubuntu

因為這次期末作業是 Team Project,所以想說架個 SVN 讓大家一起用,至於為什麼不用 git,是因為想說大家比較習慣用 windows。接著,我就照著 stackoverflow 這篇回答一步一步走,但會打這篇的原因是照著走還是有錯誤 XD 接下來就把每個步驟照著打上來之外,我也會把我遇到的問題還有解決方式都放上。(遇到的問題及解決方式會放在 quote 裡)

Read More

Truthy and Falsy: When All is Not Equal in Javascript (翻譯)

就像很多程式語言,JavaScript 也支援 Boolean 資料型態;值可被設為 true 或 false。此外,JavaScript 所有的物件或變數皆有一個繼承的 Boolean 值,一般稱為 truthyfalsy。在處理 truthyfalsy 值時會變得有點奇怪,尤其是在比較變數時。多了解寫有關這奇怪的規則會有助於在 debug 負責的 client-side 應用程式。

Read More