整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          收藏學(xué)習(xí)|《政務(wù)服務(wù)“一網(wǎng)通辦”電子文件歸檔管理技術(shù)規(guī)范》

          上海市檔案局、上海信聯(lián)信息發(fā)展股份有限公司(原上海中信信息發(fā)展股份有限公司 光典信息發(fā)展有限公司母公司)共同起草的上海市《政務(wù)服務(wù)“一網(wǎng)通辦”電子文件歸檔管理技術(shù)規(guī)范》地方標(biāo)準(zhǔn),為政務(wù)服務(wù) “一網(wǎng)通辦”電子文件歸檔管理提供了規(guī)范指導(dǎo)。

          政務(wù)服務(wù)“一網(wǎng)通辦”電子文件歸檔管理技術(shù)規(guī)范

          DB31/T 1152—2019

          歸檔范圍

          本標(biāo)準(zhǔn)適用于納入上海市“一網(wǎng)通辦”政務(wù)服務(wù)事項(xiàng)所形成的、具有保存價(jià)值的各種類型電子文件的歸檔管理。

          一、總則

          “一網(wǎng)通辦”電子文件歸檔管理原則:

          遵循保留形成原貌、保持有機(jī)聯(lián)系、保證長期可用的原則。

          “一網(wǎng)通辦”電子文件歸檔管理的主體責(zé)任:

          公共管理和服務(wù)機(jī)構(gòu)承擔(dān),按照“誰形成、誰歸檔”的原則,指定專人負(fù)責(zé)電子文件歸檔。

          電子文件的歸檔范圍和保管期限:

          根據(jù)本單位職能,結(jié)合實(shí)際業(yè)務(wù)需要制定各類政務(wù)服務(wù)事項(xiàng)(包括行政權(quán)力事項(xiàng)和公共服務(wù)事項(xiàng)),可根據(jù)實(shí)際情況進(jìn)行調(diào)整。

          電子文件的歸檔時(shí)間:

          辦結(jié)的電子文件按照歸檔范圍要求即時(shí)歸檔,定期導(dǎo)入相應(yīng)的電子檔案管理系統(tǒng),并由本單位檔案部門負(fù)責(zé)管理。

          收集歸檔的電子文件類型:

          完整收集本單位在政務(wù)服務(wù)“一網(wǎng)通辦”中形成、辦理文本、圖像、圖形、音頻、視頻、多媒體等不同形式的應(yīng)歸檔電子文件。

          電子文件的歸檔方式:

          采用計(jì)算機(jī)系統(tǒng)對歸檔過程進(jìn)行自動化管理。

          二、歸檔流程要求

          政務(wù)服務(wù)“一網(wǎng)通辦”電子文件歸檔管理流程按照文件收集、整理組件、數(shù)據(jù)封裝、數(shù)據(jù)固化、歸檔檢測、歸檔登記、接收檢測、接收登記、接收入庫9步完成。

          文檔收集:政務(wù)服務(wù)事項(xiàng)辦理結(jié)束后,業(yè)務(wù)部門根據(jù)歸檔范圍對電子文件進(jìn)行收集,自動捕獲歸檔電子文件內(nèi)容數(shù)據(jù)及其元數(shù)據(jù)信息,無法自動捕獲時(shí)人工錄入。

          整理組件:業(yè)務(wù)部門對收集的電子文件進(jìn)行整理組件,并進(jìn)行必要的信息補(bǔ)錄、材料補(bǔ)充等操作。

          數(shù)據(jù)封裝:按照歸檔信息包組織結(jié)構(gòu)對整理完畢的電子文件進(jìn)行數(shù)據(jù)封裝,形成歸檔信息包

          數(shù)據(jù)固化:使用數(shù)字簽名、時(shí)間戳等技術(shù)手段,對歸檔信息包進(jìn)行固化。

          歸檔檢測:在歸檔登記前,按照要求對歸檔信息包進(jìn)行真實(shí)性、完整性、可用性和安全性檢測。

          歸檔登記:業(yè)務(wù)部門清點(diǎn)、核實(shí)電子文件的保管期限、數(shù)量等信息,登記《電子文件歸檔登記表》,形成歸檔目錄清單,將歸檔信息包連同登記表一起向檔案部門提交歸檔。

          接收檢測:檔案部門接收歸檔信息包之前應(yīng)對信息包的真實(shí)性、完整性、可用性和安全性進(jìn)行檢測,對于不符合要求的信息包予以退回,并注明退回原因。

          接收登記:檔案部門接收歸檔信息包時(shí),應(yīng)清點(diǎn)、核實(shí)電子文件的保管期限、數(shù)量等信息,并根據(jù)清點(diǎn)和檢測結(jié)果登記《電子文件歸檔登記表》。

          接收入庫:檔案部門接收符合要求的歸檔信息包,完成電子文件歸檔管理流程。


          三、歸檔數(shù)據(jù)組織要求

          歸檔信息包組織結(jié)構(gòu):

          電子文件歸檔應(yīng)采用規(guī)范的信息包組織結(jié)構(gòu),包括“歸檔事項(xiàng)基本信息.XML”、“辦理流程基本信息.XML”、“電子文件基本信息.XML”以及電子文件夾。歸檔事項(xiàng)基本信息.XML,描述歸檔事項(xiàng)的基本信息,辦理流程基本信息.XML,描述歸檔事項(xiàng)的辦理流程信息,電子文件基本信息.XML,描述歸檔事項(xiàng)下的電子文件材料的基本信息,以上XML文件的編碼格式均為utf-8

          電子文件夾應(yīng)按照歸檔范圍中的文件材料排列順序進(jìn)行命名。

          歸檔信息包命名規(guī)則:

          歸檔信息包采用電子檔案號作為命名標(biāo)識。電子檔案號實(shí)行全市統(tǒng)一編號規(guī)則:區(qū)域代碼·部門代碼-事項(xiàng)類型代碼·主項(xiàng)代碼·子項(xiàng)代碼·年度-保管期限-事項(xiàng)流水號,例如:00·SHFGSH-01·00001·001·2018-D30-00000006。

          四、歸檔格式要求

          政務(wù)服務(wù)“一網(wǎng)通辦”所形成的電子文件及格式要求:

          電子文件構(gòu)成

          示例

          歸檔格式

          政務(wù)服務(wù)事項(xiàng)辦理過程中形成的電子文件材料

          受理通知單、審批單等

          OFD、PDF

          政務(wù)服務(wù)事項(xiàng)結(jié)論性文件

          行政許可決定書、行政許可證件、電子證照等

          OFD、PDF

          以附件形式獲取的電子文件材料

          申請經(jīng)辦人上傳的申請材料

          文本類:OFD、PDF

          圖像類:JPEG、TIFF

          圖形類:DWG、PDF、STEP、SVG

          音頻類:WAV、MP3

          視頻類:AVI、MP4、MPG

          媒體社交類:HTML、MHT

          五、歸檔接口要求

          歸檔信息包通過電子文件歸檔接口歸檔至電子檔案管理系統(tǒng)中,電子文件歸檔接口根據(jù)雙方請求發(fā)起方式的不同分為“推送”和“捕獲”兩種接口方式,采用Web Service服務(wù)調(diào)用的方式來實(shí)現(xiàn)。

          推送接口:

          推送是指由“一網(wǎng)通辦”系統(tǒng)發(fā)起請求,電子檔案管理系統(tǒng)接收數(shù)據(jù)的方法與過程。


          捕獲接口:

          捕獲是指由電子檔案管理系統(tǒng)發(fā)起請求,從“一網(wǎng)通辦”系統(tǒng)的某個(gè)目錄下獲取數(shù)據(jù)的方法與過程。


          推薦閱讀:

          【一網(wǎng)通辦】電子文件歸檔管理系統(tǒng) 破解“一網(wǎng)通辦”電子文件歸檔難題

          【一網(wǎng)通辦】電子文件歸檔管理系統(tǒng) 提速政務(wù)服務(wù)文件歸檔腳步

          【一網(wǎng)通辦】關(guān)于“一網(wǎng)通辦”電子文件歸檔管理系統(tǒng) 你要的答案來了

          、引言

          1.1、開發(fā)目的和背景


          該系統(tǒng)的主要目的是為了提升出版社的工作效率,實(shí)現(xiàn)業(yè)務(wù)流程的數(shù)字化轉(zhuǎn)型。通過集成按時(shí)間段查詢客戶購買記錄、書籍銷售記錄等功能,出版社能夠?qū)崟r(shí)獲取銷售數(shù)據(jù),進(jìn)行快速分析,以便調(diào)整庫存策略、預(yù)測市場趨勢。查詢統(tǒng)計(jì)銷售的按年份和按月份功能,使得管理層可以深入了解銷售的周期性變化,為年度計(jì)劃和季度目標(biāo)制定提供強(qiáng)有力的數(shù)據(jù)支持。


          書籍銷售、書籍信息、員工信息、專題信息和作者信息模塊的整合,不僅便于出版社內(nèi)部信息的統(tǒng)一管理和共享,還方便了跨部門協(xié)作,如編輯部、市場部和銷售部能即時(shí)獲取所需資料,優(yōu)化工作流程,提高服務(wù)質(zhì)量。


          總的來說,《出版社信息智慧管理系統(tǒng)》的開發(fā)是為了幫助出版社在競爭激烈的市場環(huán)境中,通過利用信息技術(shù)的力量,實(shí)現(xiàn)精細(xì)化管理,提升決策效能,從而推動企業(yè)的持續(xù)發(fā)展和創(chuàng)新。

          1.2、軟件的目標(biāo)用戶


          在出版社運(yùn)營的日常管理中,"出版社信息智慧管理系統(tǒng)"扮演著至關(guān)重要的角色。例如,編輯部門可以通過系統(tǒng)實(shí)時(shí)查看和分析過去特定時(shí)間段內(nèi)的客戶購買記錄,以便了解暢銷書籍和目標(biāo)受眾,進(jìn)行有針對性的產(chǎn)品策劃和推廣。市場部門則可以利用銷售數(shù)據(jù)進(jìn)行銷售預(yù)測,優(yōu)化庫存管理和定價(jià)策略。此外,系統(tǒng)還支持按年份和月份的銷售統(tǒng)計(jì),幫助管理層識別季節(jié)性趨勢,做出更為精準(zhǔn)的業(yè)務(wù)決策。


          對于圖書銷售,系統(tǒng)提供詳細(xì)的數(shù)據(jù)支持,如書籍銷售數(shù)量、銷售額、銷售區(qū)域等,便于及時(shí)調(diào)整供應(yīng)策略和促銷活動。同樣,作者、書籍、專題和員工信息也整合在這個(gè)平臺上,方便查找和管理,提升工作效率。比如,當(dāng)需要查找某個(gè)作者的最新作品,或者為新員工分配職責(zé)時(shí),只需簡單搜索即可獲取所需信息。


          本軟件的主要目標(biāo)用戶群體包括出版社的高層管理人員、營銷人員、編輯、銷售團(tuán)隊(duì)以及圖書管理員。他們都是日常運(yùn)營中依賴數(shù)據(jù)驅(qū)動決策的關(guān)鍵人物。高層管理者通過系統(tǒng)獲得全面的業(yè)務(wù)概覽;營銷人員和編輯通過查詢功能來優(yōu)化產(chǎn)品策略;銷售人員用于跟蹤銷售業(yè)績,提高客戶滿意度;圖書管理員則可快速獲取書籍和作者信息,確保庫存和內(nèi)容更新的準(zhǔn)確性。無論是在制定戰(zhàn)略規(guī)劃,還是執(zhí)行日常任務(wù),這套智慧管理系統(tǒng)都將為出版社的運(yùn)營管理提供強(qiáng)大而便捷的支持。

          二、軟件總體設(shè)計(jì)

          2.1、系統(tǒng)概述


          出版社信息智慧管理系統(tǒng)是一款專為出版社打造的高效信息化管理工具,它采用先進(jìn)的Java技術(shù),結(jié)合SpringMVC開發(fā)框架,以MySQL作為穩(wěn)定的數(shù)據(jù)存儲平臺,旨在優(yōu)化業(yè)務(wù)流程,提升數(shù)據(jù)處理和分析能力。


          該系統(tǒng)的核心功能模塊包括:


          1. 客戶購買記錄查詢:用戶可以根據(jù)時(shí)間段靈活篩選,迅速了解各類書籍的購買趨勢,便于進(jìn)行精準(zhǔn)的市場分析和客戶維護(hù)。


          2. 書籍銷售記錄查詢:同樣支持時(shí)間范圍內(nèi)的查看,幫助管理者實(shí)時(shí)掌握各書籍的銷售情況,以便及時(shí)調(diào)整庫存策略。


          3. 銷售統(tǒng)計(jì)分析:系統(tǒng)提供按年份和月份的銷售數(shù)據(jù)匯總,以圖表形式直觀展示銷售額變化,有助于制定長期和短期的經(jīng)營計(jì)劃。


          4. 書籍銷售管理:包括新書上架、熱銷圖書追蹤等功能,方便管理員對書籍銷售活動進(jìn)行有效管理。


          5. 書籍信息管理:涵蓋了詳細(xì)豐富的書籍資料,如作者信息、專題分類等,便于查找和更新,確保信息的準(zhǔn)確性。


          6. 員工信息管理:整合員工基本信息和績效數(shù)據(jù),支持人事管理,提高工作效率。


          7. 專題信息管理:針對不同主題或系列的書籍進(jìn)行跟蹤,有助于策劃有針對性的營銷活動。


          8. 作者信息管理:收集和維護(hù)作者的專業(yè)背景和作品信息,支持作者與讀者的互動,提升作者知名度。


          通過這些功能,出版社信息智慧管理系統(tǒng)不僅簡化了日常運(yùn)營流程,還提供了強(qiáng)大的數(shù)據(jù)分析能力,助力出版社在激烈的市場競爭中取得優(yōu)勢。

          2.2、系統(tǒng)架構(gòu)

          出版社信息智慧管理系統(tǒng)是一款基于B/S架構(gòu)的高級信息管理軟件,其核心設(shè)計(jì)采用了業(yè)界領(lǐng)先的Java技術(shù)棧,即Java語言作為后端開發(fā)語言,結(jié)合Spring框架進(jìn)行模塊化設(shè)計(jì)和管理,MVVM(Model-View-ViewModel)模式則確保了代碼的清晰與高效。


          該系統(tǒng)的架構(gòu)分為以下幾個(gè)關(guān)鍵模塊:


          1. 后端模塊:由Java和Spring框架構(gòu)成,實(shí)現(xiàn)了業(yè)務(wù)邏輯和數(shù)據(jù)處理的核心部分。它包括:


          - 服務(wù)層(Service Layer):對數(shù)據(jù)庫進(jìn)行CRUD操作,封裝復(fù)雜的數(shù)據(jù)查詢和業(yè)務(wù)規(guī)則。


          - 領(lǐng)域模型(Domain Model):定義各類實(shí)體對象,如客戶、書籍、銷售等,遵循數(shù)據(jù)持久化和事務(wù)管理原則。


          - 控制層(Controller Layer):接收前端請求,調(diào)用服務(wù)層進(jìn)行數(shù)據(jù)處理,然后將結(jié)果返回給前端。


          2. 數(shù)據(jù)庫模塊:使用關(guān)系型數(shù)據(jù)庫(如MySQL或Oracle),存儲所有的信息,如客戶購買記錄、書籍銷售數(shù)據(jù)、員工信息等。


          3. 前端模塊:采用HTML、CSS和JavaScript構(gòu)建,通過瀏覽器與服務(wù)器交互。用戶界面包括:


          - 頁面管理:展示各個(gè)功能模塊,如按時(shí)間段查詢歷史記錄、銷售統(tǒng)計(jì)等。


          - 表格和圖表:用于可視化查詢結(jié)果,如銷售額月度/年度趨勢圖。


          - 表單:用于添加、編輯和刪除書籍、員工等信息。


          4. API模塊:為其他系統(tǒng)或外部應(yīng)用提供標(biāo)準(zhǔn)化接口,方便數(shù)據(jù)交換和集成。


          5. 安全模塊:實(shí)現(xiàn)用戶身份驗(yàn)證和授權(quán),保護(hù)敏感信息不被非法訪問。


          整個(gè)架構(gòu)設(shè)計(jì)強(qiáng)調(diào)了模塊間的松耦合,以及前后端分離,使得系統(tǒng)易于擴(kuò)展和維護(hù)。同時(shí),通過B/S架構(gòu),用戶可以在任何支持Web瀏覽器的設(shè)備上輕松訪問和管理出版社的信息,提高了工作效率和靈活性。

          三、軟件操作說明

          3.1、系統(tǒng)登錄


          在瀏覽器中輸入系統(tǒng)網(wǎng)址,打開登錄界面后輸入登錄賬號、登錄密碼、驗(yàn)證碼即可登錄。

          3.2、工作臺


          工作臺包含:按時(shí)間段查詢客戶購買記錄、按時(shí)間段查詢書籍銷售記錄、查詢統(tǒng)計(jì)銷售(按年份)、查詢統(tǒng)計(jì)銷售(按月份)、書籍銷售、書籍信息、員工信息、專題信息、作者信息,根據(jù)不同角色權(quán)限菜單展示會有所區(qū)別。

          3.2.1、按時(shí)間段查詢客戶購買記錄


          按時(shí)間段查詢客戶購買記錄管理功能主要字段信息包含:編碼、銷售單號、銷售日期、客戶名稱、聯(lián)系電話、書籍編號、書籍名稱、版號、定價(jià)、數(shù)量、折扣、實(shí)收金額、備注、年、月等。使用表格形式展示這些信息,方便用戶查看和編輯,方便用戶進(jìn)行按時(shí)間段查詢客戶購買記錄信息的管理。


          為滿足按時(shí)間段查詢客戶購買記錄管理的多元需求,系統(tǒng)配置了一系列操作功能:新增、編輯、刪除、導(dǎo)出、搜索、詳情。用戶在實(shí)際操作中,僅需按照頁面上直觀且詳盡的操作提示,即可輕松駕馭各項(xiàng)流程。系統(tǒng)界面設(shè)計(jì)簡約清爽,操作邏輯清晰明了,旨在讓用戶在高效管理數(shù)據(jù)的同時(shí),盡享流暢、無壓力的操作體驗(yàn),大幅提升工作效率與滿意度。

          3.2.2、按時(shí)間段查詢書籍銷售記錄


          按時(shí)間段查詢書籍銷售記錄管理功能主要字段信息包含:編碼、銷售單號、銷售日期、客戶名稱、聯(lián)系電話、書籍編號、書籍名稱、版號、定價(jià)、數(shù)量、折扣、實(shí)收金額、備注、年、月等。使用表格形式展示這些信息,方便用戶查看和編輯,方便用戶進(jìn)行按時(shí)間段查詢書籍銷售記錄信息的管理。


          按時(shí)間段查詢書籍銷售記錄管理設(shè)置新增、編輯、刪除、條件搜索、查看詳情等操作,可按照頁面提示進(jìn)行操作執(zhí)行,界面結(jié)構(gòu)設(shè)計(jì)簡單,操作流程簡潔明了,可提升用戶操作體驗(yàn)。

          3.2.3、查詢統(tǒng)計(jì)銷售(按年份)


          查詢統(tǒng)計(jì)銷售(按年份)管理功能主要字段信息包含:編碼、年、月、銷售日期、書籍編號、書籍名稱、版號、定價(jià)、數(shù)量、折扣、實(shí)收金額等。使用表格形式展示這些信息,方便用戶查看和編輯,方便用戶進(jìn)行查詢統(tǒng)計(jì)銷售(按年份)信息的管理。


          系統(tǒng)為查詢統(tǒng)計(jì)銷售(按年份)管理提供了全面支持,包括新增記錄、編輯信息、刪除條目、數(shù)據(jù)導(dǎo)出、條件檢索及詳情查看等功能。用戶只需遵循頁面清晰的操作指引,即可輕松完成各項(xiàng)任務(wù)。界面設(shè)計(jì)遵循極簡原則,布局直觀,交互流暢,旨在營造無負(fù)擔(dān)的操作環(huán)境,顯著提升用戶的使用體驗(yàn)與工作效率。

          3.2.4、查詢統(tǒng)計(jì)銷售(按月份)


          查詢統(tǒng)計(jì)銷售(按月份)管理功能主要字段信息包含:編碼、年、月、銷售日期、書籍編號、書籍名稱、版號、定價(jià)、數(shù)量、折扣、實(shí)收金額等。使用表格形式展示這些信息,方便用戶查看和編輯,方便用戶進(jìn)行查詢統(tǒng)計(jì)銷售(按月份)信息的管理。


          針對查詢統(tǒng)計(jì)銷售(按月份)管理,系統(tǒng)精心設(shè)置了全方位功能模塊,涵蓋新增、編輯、刪除、導(dǎo)出、條件檢索以及查看詳情等核心操作。用戶在使用過程中,僅需緊密跟隨頁面內(nèi)直觀且詳盡的操作提示,即可輕松駕馭各項(xiàng)流程。我們秉持化繁為簡的理念,打造出簡約明快的界面風(fēng)格與邏輯清晰的操作流程,旨在讓用戶在高效管理數(shù)據(jù),享受到愉悅、無壓力的操作體驗(yàn)。

          3.2.5、書籍銷售


          書籍銷售管理功能主要字段信息包含:編碼、銷售單號、銷售日期、客戶名稱、聯(lián)系電話、書籍編號、書籍名稱、版號、定價(jià)、數(shù)量、折扣、實(shí)收金額、備注、年、月等。使用表格形式展示這些信息,方便用戶查看和編輯,方便用戶進(jìn)行書籍銷售信息的管理。


          為實(shí)現(xiàn)對書籍銷售管理,系統(tǒng)精心配備了豐富的功能組件,包括新增、編輯、刪除、導(dǎo)出、條件搜以及詳情查看等實(shí)用操作。用戶在操作過程中,只需遵循頁面上清晰易懂的引導(dǎo)提示,即可順暢地完成各項(xiàng)任務(wù)。我們注重用戶體驗(yàn),以簡約而不失專業(yè)的界面設(shè)計(jì),輔以直觀且高效的流程布局,旨在助力用戶在輕松管理數(shù)據(jù)同時(shí),全面提升操作滿意度與工作效率。

          3.2.6、書籍信息


          書籍管理功能主要字段信息包含:書籍編碼、書籍編號、書籍名稱、專題編號、專題名稱、定價(jià)、出版日期、版號、作者編號、作者姓名、備注等。使用表格形式展示這些信息,方便用戶查看和編輯,方便用戶進(jìn)行書籍信息的管理。


          為滿足書籍管理的多元需求,系統(tǒng)配置了一系列操作功能:新增、編輯、刪除、導(dǎo)出、搜索、詳情。用戶在實(shí)際操作中,僅需按照頁面上直觀且詳盡的操作提示,即可輕松駕馭各項(xiàng)流程。系統(tǒng)界面設(shè)計(jì)簡約清爽,操作邏輯清晰明了,旨在讓用戶在高效管理數(shù)據(jù)的同時(shí),盡享流暢、無壓力的操作體驗(yàn),大幅提升工作效率與滿意度。

          3.2.7、員工信息


          員工管理功能主要字段信息包含:員工編碼、員工編號、姓名、性別、職位、入職日期、月工資、聯(lián)系電話、地址、備注等。使用表格形式展示這些信息,方便用戶查看和編輯,方便用戶進(jìn)行員工信息的管理。


          員工管理設(shè)置新增、編輯、刪除、條件搜索、查看詳情等操作,可按照頁面提示進(jìn)行操作執(zhí)行,界面結(jié)構(gòu)設(shè)計(jì)簡單,操作流程簡潔明了,可提升用戶操作體驗(yàn)。

          3.2.8、專題信息


          專題管理功能主要字段信息包含:專題編碼、專題編號、專題名稱等。使用表格形式展示這些信息,方便用戶查看和編輯,方便用戶進(jìn)行專題信息的管理。


          系統(tǒng)為專題管理提供了全面支持,包括新增記錄、編輯信息、刪除條目、數(shù)據(jù)導(dǎo)出、條件檢索及詳情查看等功能。用戶只需遵循頁面清晰的操作指引,即可輕松完成各項(xiàng)任務(wù)。界面設(shè)計(jì)遵循極簡原則,布局直觀,交互流暢,旨在營造無負(fù)擔(dān)的操作環(huán)境,顯著提升用戶的使用體驗(yàn)與工作效率。

          3.2.9、作者信息


          作者管理功能主要字段信息包含:作者編碼、作者編號、作者姓名、聯(lián)系電話、地址、是否簽訂合同、備注等。使用表格形式展示這些信息,方便用戶查看和編輯,方便用戶進(jìn)行作者信息的管理。


          針對作者管理,系統(tǒng)精心設(shè)置了全方位功能模塊,涵蓋新增、編輯、刪除、導(dǎo)出、條件檢索以及查看詳情等核心操作。用戶在使用過程中,僅需緊密跟隨頁面內(nèi)直觀且詳盡的操作提示,即可輕松駕馭各項(xiàng)流程。我們秉持化繁為簡的理念,打造出簡約明快的界面風(fēng)格與邏輯清晰的操作流程,旨在讓用戶在高效管理數(shù)據(jù),享受到愉悅、無壓力的操作體驗(yàn)。

          四、注意事項(xiàng)


          系統(tǒng)支持唯一登錄,一個(gè)賬號同時(shí)只能由一人使用。信息展示順序如果特殊說明,按照排序索引值從大到小進(jìn)行排序。數(shù)據(jù)刪除之后,其關(guān)聯(lián)的數(shù)據(jù)將不可用使用,或無法正常顯示。內(nèi)容狀態(tài)一般為正常時(shí),表示數(shù)據(jù)可正常使用操作,如果為異常或者未審核,則表示在關(guān)聯(lián)數(shù)據(jù)調(diào)用時(shí),不會顯示。

          在c語言中,我們需要手動分配和釋放對象的內(nèi)存,但是在java中,所有的內(nèi)存管理都交給了java虛擬機(jī),程序員不需要在手動進(jìn)程內(nèi)存的分配和釋放,大大的減少了程序編寫的難度。

          同樣的,在javascript中,內(nèi)存管理也是自動進(jìn)行的,雖然有自動的內(nèi)存管理措施,但是這并不意味著程序員就不需要關(guān)心內(nèi)存管理了。

          本文將會進(jìn)行詳細(xì)的介紹javascript中的內(nèi)存管理策略。

          內(nèi)存生命周期

          對于任何程序來說,內(nèi)存的生命周期通常都是一樣的。

          可以分為三步:

          1. 在可用空間分配內(nèi)存
          2. 使用該內(nèi)存空間
          3. 在使用完畢之后,釋放該內(nèi)存空間

          所有的程序都需要手動執(zhí)行第二步,對于javascript來說,第1,3兩步是隱式實(shí)現(xiàn)的。

          我們看下javascript中分配內(nèi)存空間的例子。

          通過初始化分配內(nèi)存空間:

          var n = 123; // 為數(shù)字分配內(nèi)存
          var s = 'azerty'; // 為String分配內(nèi)存
          
          var o = {
            a: 1,
            b: null
          }; // 為對象分配內(nèi)存
          
          // 為數(shù)組分配內(nèi)存
          var a = [1, null, 'abra']; 
          
          function f(a) {
            return a + 2;
          } // 為函數(shù)分配內(nèi)存
          

          通過函數(shù)調(diào)用分配內(nèi)存空間:

          var d = new Date(); // 通過new分配date對象
          
          var e = document.createElement('div'); // 分配一個(gè)DOM對象
          
          var s = 'azerty';
          var s2 = s.substr(0, 3); // 因?yàn)閖s中字符串是不可變的,所以substr的操作將會創(chuàng)建新的字符串
          
          var a = ['ouais ouais', 'nan nan'];
          var a2 = ['generation', 'nan nan'];
          var a3 = a.concat(a2); 
          // 同樣的,concat操作也會創(chuàng)建新的字符串
          

          釋放空間最難的部分就是需要判斷空間什么時(shí)候不再被使用。在javascript中這個(gè)操作是由GC垃圾回收器來執(zhí)行的。

          垃圾回收器的作用就是在對象不再被使用的時(shí)候進(jìn)行回收。

          JS中的垃圾回收器

          判斷一個(gè)對象是否可以被回收的一個(gè)非常重要的標(biāo)準(zhǔn)就是引用。

          如果一個(gè)對象被另外一個(gè)對象所引用,那么這個(gè)對象肯定是不能夠被回收的。

          引用計(jì)數(shù)垃圾回收算法

          引用計(jì)數(shù)垃圾回收算法是一種比較簡單和簡潔的垃圾回收算法。他把對象是否能夠被回收轉(zhuǎn)換成了對象是否仍然被其他對象所引用。

          如果對象沒有被引用,那么這個(gè)對象就是可以被垃圾回收的。

          我們舉一個(gè)引用計(jì)數(shù)的例子:

          var x = { 
            a: {
              b: 2
            }
          }; 
          //我們創(chuàng)建了兩個(gè)對象,a對象和a外面用大括號創(chuàng)建的對象。
          // 我們將大括號創(chuàng)建的對象引用賦值給了x變量,所以x擁有大括號創(chuàng)建對象的引用,該對象不能夠被回收。
          // 同時(shí),因?yàn)閍對象是創(chuàng)建在大括號對象內(nèi)部的,所以大括號對象默認(rèn)擁有a對象的引用
          // 因?yàn)閮蓚€(gè)對象都有引用,所以都不能夠被垃圾回收
          
          var y = x;  //我們將x賦值給y,大括號對象現(xiàn)在擁有兩個(gè)引用
          
          x = 1;   // 我們將1賦值給x,這樣只有y引用了大括號的對象
          
          var z = y.a;  // 將y中的a對象引用賦值給z,a對象擁有兩個(gè)引用
          
          y = 'flydean';  // 重新賦值給y,大括號對象的引用數(shù)為0,大括號對象可以被回收了,但是因?yàn)槠鋬?nèi)部的a對象還有一個(gè)z在被引用
                          // 所以暫時(shí)不能被回收
          
          z = null;       // z引用也被重新賦值,a對象的引用數(shù)為0,兩個(gè)對象都可以被回收了
          

          引用計(jì)數(shù)的一個(gè)缺點(diǎn)就是可能會出現(xiàn)循環(huán)引用的情況。

          考慮下面的一個(gè)例子:

          function f() {
            var x = {};
            var y = {};
            x.a = y;        // x references y
            y.a = x;        // y references x
          
            return 'flydean';
          }
          
          f();
          

          在上面的例子中,x中的a屬性引用了y。而y中的a屬性又引用了x。

          從而導(dǎo)致循環(huán)引用的情況,最終導(dǎo)致內(nèi)存泄露。

          在實(shí)際的應(yīng)用中,IE6 和IE7 對DOM對象使用的就是引用計(jì)數(shù)的垃圾回收算法,所以可能會出現(xiàn)內(nèi)存泄露的情況。

          var div;
          window.onload = function() {
            div = document.getElementById('myDivElement');
            div.circularReference = div;
            div.lotsOfData = new Array(10000).join('*');
          };
          

          上面的例子中,DOM中的myDivElement元素使用circularReference引用了他本身,如果在引用計(jì)數(shù)的情況下,myDivElement是不會被回收的。

          當(dāng)myDivElement中包含了大量的數(shù)據(jù)的時(shí)候,即使myDivElement從DOM tree中刪除了,myDivElement也不會被垃圾回收,從而導(dǎo)致內(nèi)存泄露。

          Mark-and-sweep回收算法

          講到這里,大家是不是覺得JS的垃圾回收算法和java中的很類似,java中也有引用計(jì)數(shù)和mark-and-sweep清除算法。

          這種回收算法的判斷標(biāo)準(zhǔn)是對象不可達(dá)。

          在javascript中,通過掃描root對象(JS中的root對象那些全局對象),然后找到這些root對象的引用對象,然后再找到這些被引用對象的引用對象,一層一層的往后查找。

          最后垃圾回收器會找到所有的可達(dá)的對象和不可達(dá)的對象。

          使用不可達(dá)來標(biāo)記不再被使用的對象可以有效的解決引用計(jì)數(shù)法中出現(xiàn)的循環(huán)引用的問題。

          事實(shí)上,現(xiàn)在基本上所有的現(xiàn)代瀏覽器都支持Mark-and-sweep回收算法。

          調(diào)試內(nèi)存問題

          如果發(fā)送了內(nèi)存泄露,我們該怎么調(diào)試和發(fā)現(xiàn)這個(gè)問題呢?

          在nodejs中我們可以添加–inspect,然后借助Chrome Debugger來完成這個(gè)工作:

          node --expose-gc --inspect index.js
          

          上面的代碼將會開啟nodejs的調(diào)試功能。

          我們看下輸出結(jié)果:

          Debugger listening on ws://127.0.0.1:9229/88c23ae3-9081-41cd-98b0-d0f7ebceab5a
          For help, see: https://nodejs.org/en/docs/inspector
          

          結(jié)果告訴了我們兩件事情,第一件事情就是debugger監(jiān)聽的端口。默認(rèn)情況下將會開啟127.0.0.1的9229端口。并且分配了一個(gè)唯一的UUID以供區(qū)分。

          第二件事情就是告訴我們nodejs使用的調(diào)試器是Inspector。

          使用Chrome devTools進(jìn)行調(diào)試的前提是我們已經(jīng)開啟了 –inspect模式。

          在chrome中輸入chrome://inspect:

          我們可看到chrome inspect的界面,如果你本地已經(jīng)有開啟inspect的nodejs程序的話,在Remote Target中就可以直接看到。

          選中你要調(diào)試的target,點(diǎn)擊inspect,即可開啟Chrome devTools調(diào)試工具:

          你可以對程序進(jìn)行profile,也可以進(jìn)行調(diào)試。

          閉包Closures中的內(nèi)存泄露

          所謂閉包就是指函數(shù)中的函數(shù),內(nèi)部函數(shù)可以訪問外部函數(shù)的參數(shù)或者變量,從而導(dǎo)致外部函數(shù)內(nèi)部變量的引用。

          我們看一個(gè)簡單閉包的例子:

           function parentFunction(paramA)
           {
           var a = paramA;
           function childFunction()
           {
           return a + 2;
           }
           return childFunction();
           }
          

          上面的例子中,childFunction引用了parentFunction的變量a。只要childFunction還在被使用,a就無法被釋放,從而導(dǎo)致parentFunction無法被垃圾回收。事實(shí)上Closure默認(rèn)就包含了對父function的引用。

          我們看下面的例子:

           <html>
           <body>
           <script type="text/javascript">
           document.write("Program to illustrate memory leak via closure");
           window.onload=function outerFunction(){
           var obj = document.getElementById("element");
           obj.onclick=function innerFunction(){
           alert("Hi! I will leak");
           };
           obj.bigString=new Array(1000).join(new Array(2000).join("XXXXX"));
           // This is used to make the leak significant
           };
           </script>
           <button id="element">Click Me</button>
           </body>
           </html>
          

          上面的例子中,obj引用了 DOM 對象element,而element的onclick是outerFunction的內(nèi)部函數(shù),從而導(dǎo)致了對外部函數(shù)的引用,從而引用了obj。

          這樣最終導(dǎo)致循環(huán)引用,造成內(nèi)存泄露。

          怎么解決這個(gè)問題呢?

          一個(gè)簡單的辦法就是在使用完obj之后,將其賦值為null,從而中斷循環(huán)引用的關(guān)系:

           <html>
           <body>
           <script type="text/javascript">
           document.write("Avoiding memory leak via closure by breaking the circular
           reference");
           window.onload=function outerFunction(){
           var obj = document.getElementById("element");
           obj.onclick=function innerFunction()
           {
           alert("Hi! I have avoided the leak");
           // Some logic here
           };
           obj.bigString=new Array(1000).join(new Array(2000).join("XXXXX"));
           obj = null; //This breaks the circular reference
           };
           </script>
           <button id="element">"Click Here"</button>
           </body>
           </html>
          

          還有一種很簡潔的辦法就是不要使用閉包,將其分成兩個(gè)獨(dú)立的函數(shù):

           <html>
           <head>
           <script type="text/javascript">
           document.write("Avoid leaks by avoiding closures!");
           window.onload=function()
           {
           var obj = document.getElementById("element");
           obj.onclick = doesNotLeak;
           }
           function doesNotLeak()
           {
           //Your Logic here
           alert("Hi! I have avoided the leak");
           }
           </script>
           </head>
           <body>
           <button id="element">"Click Here"</button>
           </body>
           </html>
          

          本文作者:flydean程序那些事

          本文鏈接:http://www.flydean.com/js-memory-management/

          本文來源:flydean的博客

          歡迎關(guān)注我的公眾號:「程序那些事」最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發(fā)現(xiàn)!


          主站蜘蛛池模板: 波多野结衣在线观看一区二区三区| 97精品国产福利一区二区三区| 国产成人久久精品麻豆一区| 国偷自产Av一区二区三区吞精| 夜色福利一区二区三区| 亚洲大尺度无码无码专线一区| 国产精品无圣光一区二区| 国产在线观看一区二区三区| 亚洲视频在线一区二区三区| 日韩精品一区二区三区在线观看| 无码播放一区二区三区| 无码一区二区三区老色鬼| 免费观看日本污污ww网站一区| 欧洲无码一区二区三区在线观看| 国产精品一区二区三区99| 午夜视频一区二区三区| 亚洲一区二区三区精品视频| 色狠狠一区二区三区香蕉蜜桃| 国产伦精品一区二区三区四区 | 日本不卡在线一区二区三区视频| 精品免费国产一区二区三区| 91国偷自产一区二区三区| 国产av一区二区三区日韩| 久久精品国产亚洲一区二区三区 | 亚洲福利一区二区| 国产成人一区二区三区视频免费 | 国产综合精品一区二区三区| 一区二区三区视频免费| 无码日韩AV一区二区三区| 中文字幕AV一区二区三区人妻少妇| 久久精品国产第一区二区三区| 亚洲乱码日产一区三区| 国产精品无码一区二区三级| 亚洲中文字幕无码一区| 精品国产日产一区二区三区 | 久久久久人妻一区二区三区 | 国产福利一区二区在线视频| 亚洲精品日韩一区二区小说| 韩国福利影视一区二区三区| 亚洲国产精品一区二区久| 亚洲国产情侣一区二区三区|