A. 前端常用的框架有哪些
web前端的主流框架,下面,我給大傢具體介紹一下:
1.Angular:Angular是一個優秀的前端JS框架。Angular有很多特性,核心是MVW(Model-View-Whatever)、模塊化、自動雙向數據綁定、語義標注、依賴注入等。Angular是一個比較完整的前端框架,包含了服務、模板、雙向數據綁定、模塊化、路由、過濾器、依賴注入等所有功能。自定義指令後可以在項目中多次使用。
2.React:React可以非常容易地創建用戶界面。為應用程序的每個狀態設計簡潔的視圖,React還可以在數據發生變化時高效地更新渲染界面。React為你的程序編寫獨立的模塊化UI組件,這樣當一個或一些組件出現問題時,可以很容易地隔離出來。
3.Vue:最近幾年最火的前端框架是Vue.js,這是一個構建數據驅動Web界面的漸進式框架。Vue.js的目標是通過盡可能簡單的API實現響應和組合視圖組件的數據綁定。Vue是模塊友好的,可以通過NPM、鮑爾或Duo安裝。它不會強制你所有的代碼都遵循Angular的各種規定,使用場景更加靈活。
以上三個是我給大家介紹的web前端主流框架。希望我的回答對你有幫助。
B. 後台只提供json數據,頁面全靠前端渲染,交互,需要用到哪些框架,有
dojo可以做到,並且特別好用。希望採納。放一個例子給你看看。
使用很簡單:
<!-- 顯示待辦視圖 -->
<xsl:variable name="todoRequestUrl">http://xxxx.xxxx.xxxx.xxxx/public/tcwmain.nsf/AG_GetUndo_Mobile?OpenAgent&UserName=<xsl:value-of select="$DaiBanUserName"/>&temp</xsl:variable>
<div
data-dojo-type="moa/TodoScrollableView"
id="todoPage"
data-dojo-props="
requestData:'{$todoRequestUrl}',
labelName:'待辦文件',
heading:'todoHeading',
refresh:'todoRefresh',
fixedHeader:'todoHeading'
"
>
<!--
<div data-dojo-type="dojox/mobile/Heading" data-dojo-props="label:'待辦工作',fixed:'top'" id="todoHeading">
<span data-dojo-type="dojox/mobile/ToolBarButton" style="float:left" data-dojo-props="moveTo:'homePage'">首 頁</span>
<span data-dojo-type="dojox/mobile/ToolBarButton" style="float:right" id="todoRefresh">刷 新</span>
</div>
-->
<div data-dojo-type="dojox/mobile/Heading" data-dojo-props="label:'待辦文件',fixed:'top'" id="todoHeading">
<span
data-dojo-type="dojox/mobile/ToolBarButton"
style="float:left"
data-dojo-props="moveTo:'documentSystemPage',clickable:true,onClick:onHomeReturnClick"
>返 回</span>
<span data-dojo-type="dojox/mobile/ToolBarButton" style="float:right" id="todoRefresh">刷 新</span>
</div>
<xsl:call-template name="homeMainNavy"/>
</div>
/*
*可以自動載入數據列表的視圖
*數據結構與待辦相同的模塊使用這個視圖,非同步載入數據
*這事類對象,需要new關鍵字或直接用標簽調用
*/
define([
"dojo/_base/declare",
"dojo/request",
"dojo/store/Memory",
"dojo/_base/array",
"dojox/mobile/EdgeToEdgeStoreList",
"dojox/mobile/ScrollableView",
"dojox/mobile/ContentPane",
"./html5-session-store",
"dojo/dom",
"dojo/dom-attr",
"dojo/on",
"dojo/touch",
"./mdp-common",
"./dojo-ready-task",
"./rootUrl",
"dojo/string",
"./mdpServlet",
"dojo/date",
"dojo/date/stamp",
"dojo/topic",
"./dialog"
],function(
declare,
request,
Memory,
arrayUtil,
EdgeToEdgeStoreList,
ScrollableView,
ContentPane,
session,
dom,
domAttr,
on,
touch,
mdpCommon,
task,
rootUrl,
strUtil,
mdpServlet,
dojoDate,
dojoStamp,
topic,
dialog
){
var DataScrollView = declare([ScrollableView],{
count:0,
maxCount:100,
requestUrl:mdpServlet,
requestData:null,
labelName:"",
heading:"",
refresh:"",
progress:null,
list:null,
sessionName:function(){
var session = "globle."+this.get("id");
return session;
},
postCreate:function() {
this.inherited(arguments);
//給自定義view載入數據
this._loadData();
var self = this;
var refresh = dom.byId(this.refresh);
this.own(
on(refresh,touch.release,function(evt){
session.remove(self.sessionName());
self._loadData();
evt.preventDefault();
evt.stopPropagation();
})
);
},
//更新首頁待辦導航列表視圖數值
_publishInform:function(count)
{
topic.publish("moa/home/listcreated",{id:this.id,sessionName:this.sessionName()});
},
_loadData:function() {
//使用緩存
if(session.support()) {
var response = session.getJson(this.sessionName());
if(!!response) {
this._createList(response);
this._publishInform();
return;
}
}
//使用ajax載入
if(!this.requestUrl) {
return;
}
var self = this;
//發ajax請求,火狐會存在問題,初步估計問題是重定向造成的
request(this.requestUrl,{
method:"POST",
data:{url:this.requestData},
handleAs:"json"
}).then(function(response){
self._sort(response);
//使用session保存數據
if(session.support()) {
session.saveJson(self.sessionName(),response);
}
self._createList(response);
self._publishInform();
},function(ex){
});
},
_setHeading:function() {
var heading = dom.byId(this.heading);
if(!heading) {
return;
}
var label = this.labelName;
var style = "position:relative;top:-3px;margin-left:10px;color:red;border-radius:30px;border:1px solid #f9f9f9;padding:3px 6px;font-size:13px;";
var count = Math.min(this.count,this.maxCount);
label = label +"<span style='"+style+"'>共"+ count +"條</span>";
task.setHeadingLabel(label,this.heading);
},
//給列表排序
_sort:function(data)
{
if(!data || !data.data || data.data.length < 2) {
return;
}
//排序函數
var compare = function(a,b)
{
if(!a.rightText || !b.rightText)
{
return 0;
}
return dojoDate.difference(dojoStamp.fromISOString(a.rightText),dojoStamp.fromISOString(b.rightText),"day")
}
data.data.sort(compare);
},
_createList:function(data){
if(!!this.list){
this.list.destroy();
}
this.count = !data || !data.data?0:data.data.length;
if(this.count === 0 || !!data.data && data.data.length === 0) {
var pane = new ContentPane({content:"暫無數據",style:"width:100%;padding:15px 0;text-align:center;line-height:200%;color:red;font-weight:bold;"});
this.list = pane;
task.addViewChild(this,pane);
return;
}
var model = !data.data?{data:[],idProperty:this.label}:{data:data.data,idProperty:this.label};
var store = new Memory(model);
var self = this;
this._setHeading();
var list = new EdgeToEdgeStoreList({
store:store,
postCreate:function() {
var children = this.getChildren();
arrayUtil.forEach(children,function(item){
item.clickable=true;
item.onClick=function(evt){
evt.preventDefault();
evt.stopPropagation();
//loadadd 1028
//this.set("busy",true);
//self._requestTodo(this.moaUrl)
//console.log("loading1......");
/*
dialog.progressIndecator();
var OADocUrl = this.moaUrl;
//必須0.2s後
var timeout = window.setTimeout(function(){window.clearTimeout(timeout);self._showContent(OADocUrl);},1000);
*/
self._showContent(this.moaUrl);
//self._updateTodoList(this.moaUrl);
};
})
}
});
task.addViewChild(this,list);
this.list=list;
},
_showContent:function(url) {
//記錄一個臨時cookie,這是返回主頁的時候用的,需要定位到主頁特定視圖
var newUrl = strUtil.trim(url)+"&todo";
if(this.id === "inReadingPage") {
this._updateTodoList(newUrl);
}
session.saveString("homeShowId",this.id);
//調用眾望的介面直接打開html頁面
var ObjForm = mdpCommon.GetForm("frm");
mdpCommon.InputField("frm","url",newUrl);
mdpCommon.AccessURL(ObjForm);
ObjForm.submit();
},
//更新待辦列表
_updateTodoList:function(url) {
var regExp = /([0-9A-Za-z]{32})/gi;
var result = url.match(regExp);
var unid;
if(!!result) {
unid=result[0];
}
if(!unid) {
return;
}
var todoList = session.getJson("globle."+this.id);
var count = todoList.count;
var todoList = todoList.data;
for(var i=0,len=todoList.length;i<len;i++){
var moaUrl = todoList[i].moaUrl.toUpperCase();
if(moaUrl.indexOf(unid) > -1) {
todoList.splice(i,1);
count--;
break;
}
}
session.saveJson("globle."+this.id,{count:count,data:todoList});
},
_cacheDocUrl:function(todoUrl,docUrl) {
if(!session.support()) {
return;
}
var todoUnid = this._getTodoUnidFromUrl(todoUrl);
session.saveString(this.sessionName()+"."+todoUnid,docUrl);
},
_getDocUrl:function(todoUrl){
if(!session.support()) {
return;
}
var todoUnid = this._getTodoUnidFromUrl(todoUrl);
return session.getString(this.sessionName()+"."+todoUnid);
},
_getTodoUnidFromUrl:function(todoUrl){
//從todo url中解析todo unid
var reg = /([A-Fa-f0-9]{32})/;
var res = reg.exec(todoUrl);
if(!!res){
return res[0].toUpperCase();
}
},
_requestTodo:function(url) {
var docUrl = this._getDocUrl(url);
if(!!docUrl){
this._showContent(docUrl);
return;
}
var self = this;
request(this.requestUrl,{
method:"POST",
data:{url:url},
handleAs:"json"
}).then(function(response){
docUrl = rootUrl+"/"+response.dbname+"/0/"+response.unid+"?editdocument";
self._cacheDocUrl(url,docUrl);
self._showContent(docUrl);
},function(ex){
});
}
});
return DataScrollView;
});
C. 前端常用的框架有哪些
給你介紹Web前端三大主流框架
React:
1.聲明式設計:React採用聲明範式,可以輕松描述應用。
2.高效:React通過對DOM的模擬,最大限度地減少與DOM的交互。
3.靈活:React可以與已知的庫或框架很好地配合。
優點:
1.速度快:在UI渲染過程中,React通過在虛擬DOM中的微操作來實現對實際DOM的局部更新。
2.跨瀏覽器兼容:虛擬DOM幫助我們解決了跨瀏覽器問題,它為我們提供了標准化的API,甚至在IE8中都是沒問題的。
3.模塊化:為你程序編寫獨立的模塊化UI組件,這樣當某個或某些組件出現問題是,可以方便地進行隔離。
4.單向數據流:Flux是一個用於在JavaScript應用中創建單向數據層的架構5.同構、純粹的javascript:因為搜索引擎的爬蟲程序依賴的是服務端響應而不是JavaScript的執行,預渲染你的應用有助於搜索引擎優化。6.兼容性好:比如使用RequireJS來載入和打包,而Browserify和Webpack適用於構建大型應用。它們使得那些艱難的任務不再讓人望而生畏。缺點:React本身只是一個V而已,並不是一個完整的框架,所以如果是大型項目想要一套完整的框架的話,基本都需要加上ReactRouter和Flux才能寫大型應用。
Vue:
Vue是尤雨溪編寫的一個構建數據驅動的Web界面的庫,准確來說不是一個框架,它聚焦在V(view)視圖層。
它有以下的特性:
1.輕量級的框架
2.雙向數據綁定
3.指令
4.插件化
優點:
1.簡單:官方文檔很清晰,比Angular簡單易學。
2.快速:非同步批處理方式更新DOM。
3.組合:用解耦的、可復用的組件組合你的應用程序。
4.緊湊:~18kbmin+gzip,且無依賴。
5.強大:表達式無需聲明依賴的可推導屬性(computedproperties)。
6.對模塊友好:可以通過NPM、Bower或Duo安裝,不強迫你所有的代碼都遵循Angular的各種規定,使用場景更加靈活。
缺點:
1.新生兒:Vue.js是一個新的項目,沒有angular那麼成熟。
2.影響度不是很大:google了一下,有關於Vue.js多樣性或者說豐富性少於其他一些有名的庫。
3.不支持IE8。
Angular:
Angular是一款優秀的前端JS框架,已經被用於Google的多款產品當中。
它有以下的特性:
1.良好的應用程序結構
2.雙向數據綁定
3.指令
4.HTML模板
5.可嵌入、注入和測試
優點:
1.模板功能強大豐富,自帶了極其豐富的angular指令。
2.是一個比較完善的前端框架,包含服務,模板,數據雙向綁定,模塊化,路由,過濾器,依賴注入等所有功能;3.自定義指令,自定義指令後可以在項目中多次使用。
4.ng模塊化比較大膽的引入了Java的一些東西(依賴注入),能夠很容易的寫出可復用的代碼,對於敏捷開發的團隊來說非常有幫助。
5.angularjs是互聯網巨人谷歌開發,這也意味著他有一個堅實的基礎和社區支持。
缺點:
1.angular入門很容易但深入後概念很多,學習中較難理解。
2.文檔例子非常少,官方的文檔基本只寫了api,一個例子都沒有,很多時候具體怎麼用都是google來的,或直接問misko,angular的作者。
3.對IE6/7兼容不算特別好,就是可以用jQuery自己手寫代碼解決一些。
4.指令的應用的最佳實踐教程少,angular其實很靈活,如果不看一些作者的使用原則,很容易寫出四不像的代碼,例如js中還是像jQuery的思想有很多dom操作。
5.DI依賴注入如果代碼壓縮需要顯示聲明。
D. 前端常用的框架有哪些
在Web前端開發中,適時地使用一些框架,對於我們日常的開發,可以說是事半功倍。那麼,常用的Web前端框架有哪些呢?程序員常用的Web前端開發框架如下:
1、Bootstrap
Bootstrap流行的CSS框架,它是最早的Web前端框架,Bootstrap提供了許多實例來幫助入門。使用Bootstrap可以將不同的組件和布局組合在一起,從而創建有趣的頁面設計,還提供了大量詳細的文檔。
2、QUICK UI
QUICK UI一套完整的企業級web前端開發解決方案,由基礎框架、UI組件庫、皮膚包、示例工程和文檔等組成。使用QUICKUI開發者可以極大地減少工作量提高開發效率,快速構建功能強大、美觀、兼容的web應用系統。
3、MDC Web
Material Components for the web(MDC Web),谷歌為Web設計的全新前端框架。MDC Web幫助開發人員執行Material Design,組件由谷歌的核心工程師團隊和UX設計人員開發。這些組件可以建立可靠的開發工作流程以構建美觀且功能強大的Web項目。
4、Pure
Bootstrap,Patternfly和MDC Web功能非常強大的CSS框架,但非常繁瑣復雜。如想要一個輕量級的CSS框架建議嘗試Pure.css,本身更接近於CSS編程,但又可以幫助構建一個不錯的網頁。Pure是具有最小佔用空間的輕量級CSS框架由Yahoo開發根據BSD許可是開源。
5、Foundation
Foundation聲稱是世界上最先進的響應式前端框架。它提供了用於構建專業網站的高級功能和教程。許多公司,組織都使用該框架,並且該框架具有大量可用的文檔。
6、Bulma
Bulma基於Flexbox的開源框架可根據MIT許可證開源。一個非常輕量級的框架,只需要一個CSS文件。Bulma擁有簡潔明了的文檔可輕松選擇想要的主題。還具有許多Web組件可以在設計中使用它們。
7、Skeleton
輕量級框架Skeleton。Skeleton庫只有大約400行,且該框架僅提供一些基本的CSS框架組件。Skeleton還是提供了詳細的文檔來幫助快速上手。
8、Materialize
Materialize 是一個基於 Material Design風格的一個現代化的響應式前端框架,解決了最繁重的工作,結合的自定義組件為提供默認的樣式。Materialize的文檔頁面非常全面很容易遵循。其組件頁麵包括按鈕,卡片,導航等。
9、Bootflat
Bootflat是從Twitter的Bootstrap派生的開源CSS框架。與Bootstrap相比Bootflat更簡單更加輕量級。大部分都是圖像沒有太多的文字。
10、PatternFly
PatternFly是Red Hat的開源CSS框架,和Bootstrap不同的是Bootstrap是為那些想要創建漂亮網站的人而設計,而PatternFly主要專注於企業應用程序開發人員提供諸如條形圖、圖表、導航之類的組件,實際上Red Hat就是使用它創建了OpenShift。除了靜態HTML,PatternFly還支持ReactJS框架,這是Facebook開發的流行JavaScript框架。PatternFly具有許多適用於企業級應用程序的高級組件,如條形圖,圖表,模式和布局。
11、flex
Flex目前還在孵化階段,還不是Apache的正式項目,Flex4.8也不是一個正式的Apache版本。,該版本標志著Flex新時代的開始,Flex的未來將由社區來驅動而不是由一個公司驅動。開發者可以通過貢獻代碼來幫助改進Flex,如修復bug、增加功能等。
以上就是分享的Web前端開發常用的一些框架。程序員們可以根據自己的業務需求選擇簡潔直觀、功能強大的前端開發框架,讓自己的工作更迅速簡單,提高開發的效率。
E. 北大青鳥設計培訓:web前端多端編程開發框架結構
隨著我們對web前端編程開發技術的掌握,越來越多的框架語言和架構方式被我們所熟知。
下面四川北大青鳥http://www.kmbdqn.cn/就一起來了解一下,web前端開發的一些常見框架結構。
1.全包型這類框架大的特點就是從底層的渲染引擎、布局引擎,到中層的DSL,再到上層的框架全部由自己開發,代表框架是Qt和Flutter。
這類框架優點非常明顯:性能(的上限)高;各平台渲染結果一致。
缺點也非常明顯:需要完全重新學習DSL(QML/Dart),以及難以適配中國特色的端:小程序。
這類框架是原始也是純正的的多端開發框架,由於底層到上層每個環節都掌握在自己手裡,也能大可能地去保證開發和跨端體驗一致。
但它們的框架研發成本巨大,渲染引擎、布局引擎、DSL、上層框架每個部分都需要大量人力開發維護。
2.Web技術型這類框架把Web技術(JavaScript,CSS)帶到移動開發中,自研布局引擎處理CSS,使用JavaScript寫業務邏輯,使用流行的前端框架作為DSL,各端分別使用各自的原生組件渲染。
代表框架是ReactNative和Weex,這樣做的優點有:開發迅速;復用前端生態;易於學習上手,不管前端後端移動端,多多少少都會一點JS、CSS。
缺點有:1.交互復雜時難以寫出高性能的代碼,這類框架的設計就必然導致JS和Native之間需要通信,類似於手勢操作這樣頻繁地觸發通信就很可能使得UI無法在16ms內及時繪制。
ReactNative有一些聲明式的組件可以避免這個問題,但聲明式的寫法很難滿足復雜交互的需求。
2.由於沒有渲染引擎,使用各端的原生組件渲染,相同代碼渲染的一致性沒有一種高。
3.JavaScript編譯型這類框架就是我們這篇文章的主角們:Taro、WePY、uni-app、mpvue、chameleon,它們的原理也都大同小異:先以JavaScript作為基礎選定一個DSL框架,以這個DSL框架為標准在各端分別編譯為不同的代碼,各端分別有一個運行時框架或兼容組件庫保證代碼正確運行。
F. 為什麼現代前端框架放棄了HTML的常規用法
因為再不搞得貌似高大上,各種智能AI會讓前端全部失業啊,所以把問題復雜化,可以延長技術崗位淘汰的時間
隨著互聯網和相關技術的發展,確實現在的前端框架越來越強大了,但是並不是說現在的前端框架就放棄了HTML的常規用法,所有的前端應用依舊是建立原有的HTML,CSS,JS的基礎上的,依舊是遵照W3C標准去執行的。
畢竟最終呈現這一切的是瀏覽器,如果我們的標准和用法發生變化,首先就會從瀏覽器發生改變,但其實我們現在的瀏覽器並沒有變,我們再新的網站,用谷歌很舊版本的瀏覽器依舊可以訪問,當然兼容性上可能會存在一些些問題。
不過,HTML和JavaScript確實是在發展,HTML裡面加上了很多新的屬性,2008年的時候,HTML 5正式發布,不過當時的瀏覽器其實並不能很好的支持HTML 5,直到2012年,HTML 5的位置才算是穩定下來。JavaScript也是同樣,它的版本一直都在迭代,從1997年誕生的ECMAScript(ES) 1.0 版本,到現在已經ES10了,但是瀏覽器對於ES的兼容還停留在ES6的水平上,只是我們想了更多的方案在前端的框架上。
簡單來說,原有的渲染方式是先載入HTML,然後載入CSS進行渲染,然後載入JS進行渲染,這樣的方式開銷小,但是速度慢。而現在的渲染方式是先進行Virtual DOM(VDOM)的渲染,然後一次性將VDOM映射到DOM上,這樣來加快渲染速度,但是缺點就是開銷會變大。
不過我們計算機的性能現在已經很強大了,這么一點點的開銷其實影響並不大,因此也就讓現在的前端框架越來越喜歡新的這種渲染模式。
例如:我們原有的 標簽,使用的時候就會使用傳統的渲染方式,開銷很小,但是確實外觀上有時候不太符合現在人的審美,即使通過CSS各種美化,但是也有點不盡如人意。因此,我們現在的框架中,大多使用的方式,配合JS設計了新下拉控制項,雖然開銷大了一些,但是載入速度快,好看且功能強大。也由於這些各種自定義控制項的出現,讓原有的Form POST方式變得有點不太夠用了,所以,基於Ajax的各種交互方式也就出現了。當然,這並不是說就放棄了傳統的HTML,我們依舊使用的是傳統的HTML,只是在它之上做了加工,讓他能夠更好,更符合現在人的使用習慣和審美。而類似Vue,React,Angular這樣的前端框架,也是為開發者提供了更多的便利,讓開發者可以更專注於交互和功能,在一些簡單的技術層面處理就交給了框架。現在前端庫,框架(Vue,React,Angular)也並沒有放棄HTML常規用法,還是遵守W3C標准去執行的。但是執行這個過程是由程序自動化了也就是VDOM=>DOM的過程。傳統前端三大根基HTML,CSS,JS,CSS還有一席之地,JS被無限放大的使用,而標準的帶有語義化的HTML也並沒有被拋棄。React庫就是基於Javascript將HTML CSS都寫在一起的風格。關於標簽,各個PC端瀏覽器對input 類型為radio,checkbox默認的展示樣式不一樣。也需要我們自己模擬一下,達到用戶需求。當然還有其他人分享的類型為number的時候等等,不得不說原生計算雖然很強大,能做到庫,框架做不到的需求,也孕育了各個庫,框架。但原生js操作DOM是很痛苦的。所以這些零零散散的問題阻礙了現代化開發效率。能解決這些問題從一定程度上大家肯定是擁護的。HTML還是會用下去的,除了語言本身我們也需要考慮各個瀏覽器的兼容與發展,對語言本身的支持度。現在都是現在virtual dom中渲染完css和JS,渲染完,再從virtual dom一次映射到dom,這么做主要是為了加快渲染速度,缺點是耗費內存特別大。。常規的HTML渲染是先載入HTML,然後再渲染css,渲染css過程中會有很多HTML特性變化,之後再渲染JS,就觸發很多的HTML和css變化。這種模式,最大缺點是分三步走,大概是串列運行,花費時間較長,,另外很多元素渲染三遍才變成最終狀態(大概這么理解)。。。提問者是發現前端語言中出現了自定義標簽或者模板語法嗎?還是說vue類似的語法結構?前者說到底就一個原因:瀏覽器的兼容性!特別是IE這個不知進取的貨,前端技術被這貨一直限制,直到win10的出現才得到改善,就連現在最低兼容也要考慮到ie9!常規前端框架要負責渲染和ui效果,html標簽無法滿足現在ui層的渲染要求,不同瀏覽器下的展示結果也不同,最直觀的就是表單元素:select、radio、checkbox、button等等。所以你會看見所有前端框架都必須要有一套自己的表單組件。作為一款框架,目的就是用最簡單的語法達到最好的展示結果,語法特別重要,所以我們會發現在框架中利用js做二次渲染是最好的選擇,使用者只需一個屬性就能達到特定效果。比如我自研的框架中開關組件: ,只需對應屬性給值,其他的交給框架去渲染。
有的乾脆直接給js函數傳入對象參數:
xxx({
type : swith,
text : 開|關
})
而vue這種就屬於渲染引擎,只負責渲染,不負責ui效果,沒什麼好說的。
任何前端框架都是基於html css js這三者基礎上擴展豐富,以方便更多人去快捷高效的使用!
我前後端都搞,那會還要考慮ie6的兼容問題,那時候唯一的前端庫是jq,用起來很方便,開發思想圍繞面向過程。近些年出的react、vue、angular框架則更多是面向對象思想,前端也越來越工程化,但本質還是在js基礎上的擴展豐富。
回到題主問題,最開始的是直接js操作dom,這樣是很消耗性能的,後面出的那些框架中所提出的虛擬dom操作,本質就是用一個全局js對象維護所有的dom節點,當最終比對出dom需要更新時,再操作dom。所以就理想化而言,後者性能上更好且代碼優雅。
那是因為你看到的都是互聯網行業。傳統業務系統,電力,金融,銀行,製造業等等都在用,邏輯復雜,架構復雜,不是你互聯網搞幾個頁面查詢顯示,追求所謂的載入速度和體驗 那麼簡單。在互聯網行業,你幾乎接觸不到真正的面向對象設計的架構,只有一堆中間件,各種前後端框架。這是完全不同的兩個領域,不能混為一談。
狹隘范疇來說,任何前端框架最終都是靠html css js 三大件來實現的
沒有感覺現在前端放棄了常規寫法。
你所謂的常規用法是html舊版本。新版html 添加了太多東西 都es7es8了 是用法升級了
G. 求一款web前端框架,開發react,要同時支持spa單頁和ssr伺服器渲染,支持typescript,最好帶有完整的Demo
react-coat
react-coat 特點
集成 react、rex、react-router、history 等相關框架
僅為以上框架的糖衣外套,不改變其基本概念,無強侵入與破壞性
結構化前端工程、業務模塊化,支持按需載入
同時支持 SPA(單頁應用)和 SSR(伺服器渲染)
使用 typescript 嚴格類型,更好的靜態檢查與智能提示
開源微框架,源碼不到千行,幾乎不用學習即可上手
這款可以滿足你,帶完整Demo示例
H. 使用nodejs進行後端渲染,前端還需要框架級的工具嗎
題主自己也說了是「使用Nodejs進行後端渲染」。
目前有兩種方式,一種是後端渲染,即:伺服器生成頁面返回給前台。
另一種就是前端自行渲染,比如AngularJs這樣的框架。
至於選擇哪種,還是要看是否是重體驗交互,還是只是簡簡單單的展示內容。
所以題主你關心是否需要前端框架,主要在於你的應用場景是怎樣的?
Node做為後端其實是和PHP,Java這些做的事情差不多,還是在做後端的事。
I. 使用nodejs進行後端渲染,前端還需要框架級的工具嗎
nodejs做後端,它的功能就類似PHP等服務端語言。雖然語法是js,但不會在瀏覽器執行,所謂渲染,只是產生可被瀏覽器讀取的HTML、css、js內容。這里js是要在瀏覽器端執行的,不是nodejs執行的,所以如果你需要實現復雜功能,也可以用一些前端框架,比如jquery。
J. 微前端前言
微前端是一種多個團隊通過獨立發布功能的方式來共同構建現代化 web 應用的技術手段及方法策略。
主框架不限制接入應用的技術棧,微應用具備完全自主權
微應用倉庫獨立,前後端可獨立開發,部署完成後主框架自動完成同步更新
在面對各種復雜場景時,我們通常很難對一個已經存在的系統做全量的技術棧升級或重構,而微前端是一種非常好的實施漸進式重構的手段和策略
每個微應用之間狀態隔離,運行時狀態不共享
微前端架構旨在解決單體應用在一個相對長的時間跨度下,由於參與的人員、團隊的增多、變遷,從一個普通應用演變成一個巨石應用後,隨之而來的應用不可維護的問題。這類問題在企業級 Web 應用中尤其常見。
1.url 不同步。瀏覽器刷新 iframe url 狀態丟失、後退前進按鈕無法使用。
2.UI 不同步,DOM 結構不共享。想像一下屏幕右下角 1/4 的 iframe 里來一個帶遮罩層的彈框,同時我們要求這個彈框要瀏覽器居中顯示,還要瀏覽器 resize 時自動居中。
3.全局上下文完全隔離,內存變數不共享。iframe 內外系統的通信、數據同步等需求,主應用的 cookie 要透傳到根域名都不同的子應用中實現免登效果。
4.慢。每次子應用進入都是一次瀏覽器上下文重建、資源重新載入的過程。
通過監聽 url change 事件,在路由變化時匹配到渲染的子應用並進行渲染,這個思路也是目前實現微前端的主流方式。同時single-spa要求子應用修改渲染邏輯並暴露出三個方法:bootstrap、mount、unmount,分別對應初始化、渲染和卸載,這也導致子應用需要對入口文件進行修改。過於基礎,成本太高,不建議。
qiankun是阿里推出的一個基於single-spa的微前端實現庫,旨在幫助大家能更簡單、無痛的構建一個生產可用微前端架構系統。因為是基於single-spa進行封裝,所以single-spa的特點也被qiankun繼承下來。成本低於single-spa,高於MicroApp。
MicroApp是京東推出的一款基於類WebComponent進行渲染的微前端框架,不同於目前流行的開源框架,它從組件化的思維實現微前端,旨在降低上手難度、提升工作效率。它是目前市面上接入微前端成本最低的框架,並且提供了JS沙箱、樣式隔離、元素隔離、預載入、資源地址補全、插件系統、數據通信等一系列完善的功能。是目前市面上接入微前端成本最低的方案。
single-spa github地址: https://github.com/single-spa/single-spa
qiankun官網: https://qiankun.umijs.org/zh
MicroApp官網: https://cang.org/micro-app/