• 省创暨srdp项目复盘


    welab实验室小管家(省创)

    项目时间:2022.7.13——2023.???

    背景

    学校实验室预约方式一直停留在线下纸质申请或者人工电话联系的阶段,预约流程繁琐费时,不便于学生快速高效地使用校内实验室资源。同时,他人预约信息不透明,很难作出合理的自己的预约安排,这在某种程度上也浪费了校内实验室的资源。
    针对这种情况,我们设计了一款实验室预约小程序,旨在为学生提供便捷、高效、透明的实验资源预约服务,让学生可以方便地预约自己需要使用的资源。

    技术路线(选型)

    1. 框架:微信小程序官方框架【逻辑层( J S JS JS)、视图层( w x m l wxml wxml w x s s wxss wxss)】
    2. 数据库:与云开发结合。常规的设计【学生(学号姓名等)、仪器(名称地点等)】,获取表中的数据用云数据库数据库自带的 i d id id 进行搜索,并借助云函数实现一些后台逻辑
    3. UI设计:借助 vant Weapp 组件库辅助进行交互界面的设计

    问题

    同步异步问题:

    j s js js是一门单线程语言。所以当 f u n 1 ( ) fun1() fun1()中存在一些访问接口并操作获取的返回数据这一类花费一定时间的代码时, f u n 2 ( ) fun2() fun2()可以不等 f u n 1 ( ) fun1() fun1()完全执行完就开始执行。即挂起 f u n 1 ( ) fun1() fun1()先运行 f u n 2 ( ) fun2() fun2(),等到 f u n 1 ( ) fun1() fun1()得到结果后,再执行。

    同步任务是指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务,当我们打开网站时,网站的渲染过程,比如元素的渲染,其实就是一个同步任务

    异步任务是指不进入主线程,而进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程,当我们打开网站时,像图片的加载,音乐的加载,其实就是一个异步任务

    异步机制通过事件循环实现的。
    JavaScript是单线程运行的语言,也就是说,它只有一个主线程来执行所有的代码。当需要执行异步操作时,如进行网络请求、文件读写等,主线程无法立即获得结果,因此会将这些操作放在任务队列中,等待异步操作完成后再进行处理。


    事件循环就是负责处理任务队列中的任务,并将任务分配给主线程执行的机制。事件循环从任务队列中取出一个任务,将其分配给主线程执行,直到执行完毕或者遇到I/O等异步操作,然后再去取下一个任务执行。在执行异步操作时,主线程会将回调函数放入队列中,等待事件循环机制执行完主线程当前的任务后,再从队列中取出回调函数执行。

    而在我的开发过程中就经常遇到fun1();fun2(); f u n 2 ( ) fun2() fun2()要用到 f u n 1 ( ) fun1() fun1()网络请求得到的数据。

    我的解决方法:

    1. 回调函数:回调函数是异步编程最基本的形式。通过将一个函数作为参数传递给另一个函数,在异步操作完成后调用该函数来处理结果。例如,可以使用回调函数在异步请求完成后执行某些操作。
    function asyncOperation(callback) {
      // 异步操作
      setTimeout(function() {
        callback('操作完成');
      }, 2000);
    }
    
    asyncOperation(function(result) {
      console.log(result);
    });
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    1. Promise对象:Promise对象是对回调函数的封装和管理,用于更好地处理异步操作。Promise有三个状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。通过使用then()和catch()方法,可以在异步操作完成后执行相应的操作。
    function asyncOperation() {
      return new Promise(function(resolve, reject) {
        // 异步操作
        setTimeout(function() {
          resolve('操作完成');
        }, 2000);
      });
    }
    
    asyncOperation().then(function(result) {
      console.log(result);
    }).catch(function(error) {
      console.error(error);
    });
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    1. async/await:async/await是ES2017引入的一种更直观、更简洁的异步编程方式。async函数返回一个Promise对象,其中可以使用await关键字来等待异步操作完成,并以同步的方式编写代码。
    async function asyncOperation() {
      return new Promise(function(resolve, reject) {
        // 异步操作
        setTimeout(function() {
          resolve('操作完成');
        }, 2000);
      });
    }
    
    async function main() {
      try {
        const result = await asyncOperation();
        console.log(result);
      } catch (error) {
        console.error(error);
      }
    }
    
    main();
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    团队协作

    作为团队成员,担任小程序的开发工作

    1. 使用协同工具:使用微信群方便团队成员之间的即时沟通,创建不同的频道或群组,按主题或任务进行分组。
    2. 敏捷管理:根据业务需求进行灵活性和快速决策的项目管理方法,通过产品回顾和持续改进来驱动项目的成功具体的例子:我首先根据团队成员的要求进行了设计,但在实际推广后,我们发现一些功能缺失和冗余。比如,在设计预约仪器的预约表时,最初我们只考虑了预约人的学号和姓名。然而,当我们将这个小程序实际推广到现场时,相关老师提出了额外的需求,要求预约时还需要填写预约原因和预约人数
    3. 开放的沟通氛围:建立鼓励团队成员积极交流和提出新想法的环境。保持开放的沟通氛围,有助于发现潜在问题并促进创新。在开发过程中,遇到一些程序开发或者设计方面的问题会直接和其他团队成员沟通,聆听别人的思路。

    优点

    1. 提高预约效率:小程序可以提供方便快捷的预约功能,用户可以通过手机随时随地提交预约请求,避免了传统预约方式中需要亲自前往或通过电话预约的麻烦。
    2. 自动化管理:小程序可以通过后台管理系统实现对预约信息的自动化处理和管理。实验室管理员可以轻松查看、审核和安排预约,减少了人工操作和纸质记录的成本和错误率。
    3. 提供实时反馈:小程序可以向用户提供实时的预约状态更新和通知,例如预约成功确认、预约时间变更等。这样用户可以更加方便地掌握预约进展情况,减少沟通和误解。
    4. 数据统计和分析:小程序后端可以收集和分析大量的预约数据,帮助管理者更好地了解实验室使用情况、研究热点、用户需求等,从而进行资源合理分配和决策。

    缺点

    1. 安全与隐私考虑:小程序需要用户提供个人信息用于预约,因此需要确保数据的安全和隐私保护。我们在开发过程中对此考虑得比较少(解决方法:开发团队可以招募网络安全相关专业的同学)
    2. 代码优化:在开发过程中,对于时间空间开销的优化,加强系统稳定性方面考虑得比较少。(解决方法:通过对代码进行性能分析,找出存在性能瓶颈的部分,并进行相应的优化。)

    创新创业管理平台(srdp)

    基本同上,我在这部分主要讲讲额外的、特别的

    背景

    同上
    相比省创增加了一个网页和后端

    技术路线

    1. 框架:python flask轻量级的 Web 框架
    2. 架构设计:根据项目需求设计服务端软件架构,包括路由设计、框架设计、数据库设计等。可以采用 M V C MVC MVC 模型来组织代码逻辑,分层实现业务逻辑和数据操作,并且根据实际情况选择 m y s q l mysql mysql
    3. 数据库:设计数据库表结构、定义索引和关系等,使用 ORM 框架( SQLAlchemy)简化数据库操作
    4. 前端:HTML,CSS,JS

    问题

    如上

    优点

    如上

    缺点

    如上

  • 相关阅读:
    【CAN总线】从数字设计的角度分析CAN协议1—CAN概述
    4、Linux:如何在zip压缩文件中搜索指定内容
    unknown type name FILE
    如何使用 Fail2ban 防止对 Linux 的暴力攻击?
    【译】.NET 7 中的性能改进(四)
    日常学习记录随笔-大数据之日志(hadoop)收集实战
    css样式之浮动、定位,显示与隐藏
    FPGA数字电子技术复习笔记(一)verilog语法规则补充
    如何实现丝滑转码?
    spring事务里面开启线程插入,报错了是否会回滚?
  • 原文地址:https://blog.csdn.net/qq_61786525/article/details/133777520