Web 前端與演算法的結合點在哪裡?

想知道在web前端開發中演算法的應用主要在哪方面,有沒有一個結合點?


# 對 JavaScript 原生方法的優化(不代表所有方法都會對速度有所提升)與擴展。

* 著名的 jQuery 及 Zepto.js: the aerogel-weight jQuery-compatible JavaScript library

* Underscore.js

# 數學計算

* jStat : a JavaScript statistical library 統計演算法庫

# 圖形計算

* KineticJS HTML5 Canvas Framework

更多的是對 Canvas 的介面進行封裝,不過動畫上,大量使用各類演算法。

新版本的是取自,GSAP JS – Professional-Grade JavaScript Animation ? GreenSock

* three.js - JavaScript 3D library 這個不用多說了吧,各種 Demo 已經說明了一切,這些都是演算法的應用。

…… 還有很多。

Web 前端也可以是處理大量數據的。

但是由於語言本身不算高效,還有不同平台上的性能差異(特別是移動平台上),

非常需要用演算法來優化這些數據處理過程。

另外,不能說成是演算法吧,一種工程模式,以限制 JavaScript 過分的靈活性。

使用 AMD、CommonJS 及 ES Harmony 編寫模塊化的 JavaScript

總之,前端現在是大有「木有做不到,只有想不到」的趨勢了 ……

最後,關於結合點,看自己想做成什麼樣嘛。


我想題主期待的是舉例前端演算法應用,而不是具體演算法的實現,甚至某個數學庫函。

前端由於面向的是界面及交互實現,所以演算法研究和應用確實相對較少。已知的幾個需要一定演算法應用的領域主要有遊戲,編輯器及協同辦公,GIS(地圖),閱讀器排版等。

除了這些比較複雜的前端應用之外,前端在演算法上的要求確實較少。

不過我覺得前端雖然技術問題少,但是工程問題很多,是另外一個值得研究和探索的領域。

參考 facebook靜態資源管理系統@velocity2010 http://v.youku.com/v_show/id_XMjI5OTUxMjE2.html


oldj 的文章:不用HTML5/CSS3如何在網頁上畫機器貓 討論了 DOM 畫圖的優化問題,算是一個 web 前端特有的問題吧:

雖然計算機圖形學已經非常成熟,但使用 div 在網頁上畫圖(下面稱之為「DOM 畫圖」)與傳統的計算機圖形學還是有所不同,傳統的計算機圖形學中可以利用的最小單位是一個 1px 的點,但 DOM 畫圖上可以利用的最小單位是一個 div ,或者說是一個矩形,這樣一來,對於 DOM 畫圖技術來說,畫一個小點的成本和畫一個很大的矩形的成本幾乎是一樣的(橫線或豎線也可以看成矩形)。這就為 DOM 畫圖提出了一個優化要求:如何使用儘可能少的矩形來拼成所需圖形?如下圖所示。

上圖顯示了 DOM 畫圖中一段弧線的三種優化程度。最左邊的那種用了最多的 div ,同時該約簡的地方沒有約簡,具體表現為圖像看起來會有鋸齒或者拖泥帶水;中間那種解決了約簡的問題,但用的 div 還是太多了,該合併的地方沒有合併;右邊那種在前兩者的基礎上,把同一行、同一列相鄰的 div 合併了起來,用了最少的 div 完成了圖像的繪製。我們認為,對於 DOM 繪畫來說,右邊這種方案最佳。


數據可視化 http://d3js.org/

遊戲引擎 https://html5gameengine.com/


並不是一個很 general 的庫,但是我非常喜歡。很精緻用心。當年用 Canvas 做頁面特效時用到過:

gorhill/Javascript-Voronoi - GitHub


模塊載入器中的依賴演算法。線排還是面排。

編輯器中的節點關係演算法,如何最優?

選擇器的流程優化,正則還是循環。

動畫實現原理。幾何概念等。

堆棧的應用。隊列管理。如何設計json結構,前端排序。

日期相關,地圖相關。

太多啦。只是你開發的東西太少。


我了解的就是一些廣告的投放需要用到一些演算法,前端我覺得演算法用處不大,頂多和後端協作一下。當然,那些經典的演算法還是得了解下


用js刷leetcode

https://github.com/lewis617/javascript-datastructures-algorithms


演算法應用有很多啊,比如常見的界面動畫、3D動畫、基於canvas的驗證碼識別和圖像處理


看看這個吧,用演算法來實現js版本的增量更新,讓用戶只下載更新的代碼,基本做到字元級別的精確度:mtjs/mt · GitHub


這麼說吧,JS他爹本來中意的是函數式。如果你把JS這個語言當C那麼用只能是痛不欲生,如果把他當函數式用的話,會覺得矮油不錯哦。

jQuery的作者就是看破了這一點,從函數式那邊借了點兒皮毛過來,現在一大堆的前端哭著喊著離不開jQuery了。


推薦閱讀:

CSS 優化、提高性能的方法有哪些?
前端組件化普及的今天花時間鑽研bootstrap3/AdminLTE2這些UI框架還能有多大收益?
bootstrap中有瀑布流的組件嗎?

TAG:前端開發 | CSS | JavaScript | 演算法 | HTML5 |