Project

General

Profile

其他 #453

Updated by Xihua Fan about 2 months ago

*Background* 
 # 记录在开发OTS4.0过程中需要讨论的特殊处理 

 *Task Details (Optimizations) %{color:red}To-Do%*  
 * *1. 不同设备的差异* 
      1.1 *IOS:* 
      - Order list will scroll in two directions.(IOS较为明显) 
      - Current filter中的setup new filter未focus到filter name上(只有第一次加载My-filter时未focus到filter name)。 

      1.2 *Android:* 
      - Edge中的icon默认实心(fill:1)。Chrome没有此类问题。 

 * *2. Order List / Detail的优化* 
      2.1 SQL优化(List速度较慢,需要排查慢查询的原因) 
      2.2 v3的历史订单独立表(因为不是活跃的数据)ots_order_product_history(数据大的extra info, v3 legacy_info的优化 ots_order_product.legacy_info → ots_order_product_legacy [独立v3 legacy info 等都可以独立出去) Table] 
          另外:legacy_info字段text → VARCHAR (512) 我猜这里数据不再有变化。SQL查询如下: 
          <pre> 
            -- 如果 legacy_info 内容“短且可控”,TEXT → VARCHAR 不但能省空间,还更快、更好索引、更友好 
            SELECT 
              MAX(CHAR_LENGTH(legacy_info)) AS max_len, 
              AVG(CHAR_LENGTH(legacy_info)) AS avg_len, 
              SUM(CHAR_LENGTH(legacy_info) > 512) AS over_512_cnt 
            FROM ots_order_product; 

            -- 结果 
            -- max_len = 407 
            -- avg_len = 299.9318 
            -- over_512_cnt = 0 
          

          </pre>  

 * *3. 移动端打印方案优化* #491  
      3.1 打印代理服务器polling(3s轮询是否有打印任务) -> 阻塞式消息订阅(Redis Stream) 

 * *4. 页面加载优化* 
      4.1 *DONE* Image的懒加载机制(loading="lazy" decoding="async") 
      4.2 *To-do* prefetch + prerender + speculation rules等等 
      4.3 *To-do* 最小化加载css,js, 比如:html2canvas.min.js 只在mobile中加载,并统一添加版本号(可以cache) 

 * *9. UI 优化(优先级最低)* 
      9.1 *手机端order list中长按功能:* 科参考一些"App":https://redmine.easydingzhi.com/attachments/241 的做法,长按后突出显示当前选中内容, 
          在当前行的上方、下方显示可操作的下拉列表(取代当前简易版的Popover)。 需调研web端是否能够实现。 


 *Task Details (Optimizations) Done* 
 * *1. 添加DOM对象的时候,先隐藏然后复制* 
      1.1 web/catalog/model/account/order_filters_v3.php    row 78 
      1.2 web/catalog/model/account/order_v3.php    row 233 

      *Niko:*  
      1. 避免DOM元素提前加载,保持PHP model数据层数据整洁。修改原来JS clone新增元素的方式为JS动态创建。 
      2. 动态加载元素的语言包:各自定义在各自的twig中,共通的则写在footer.twig中 

 * *2. 不同设备的差异* 
      2.1 *IOS:* 
      - Date类型在IOS中的显示问题 
        1)默认水平居中(期待值:和Android一样,左对齐) 
        2)默认垂直偏上(期待值:和Android一样,居中对齐) 
        3)点击Reset, 期待为清空, 当前恢复为初始值日期 

 * *3. Session机制: file -> redis* 
      3.1 _*error.log*_ session相关的两个问题: 
      <pre> 
      - PHP Notice:    Error: session file size is 0 : /var/www/html/storage/session/sess_ed565225ec4097c33086dd03eb in /var/www/html/ots4.0/system/library/session/file.php on line 28 
      - PHP Unknown:    Automatic conversion of false to array is deprecated in /var/www/html/ots4.0/catalog/controller/startup/startup.php on line 94 
      </pre>  


 *v4 coding standard:* 
 # Git提交 
   #xxx(redmine number): xxx(redmine title) - xxx(任意:补充内容) 
    
 # 代码规范 
  2.1: 结构:Public -> Protected -> Private 
  2.2: 其他代码规范同SBX 
    
 # MVCL的v3/v4物理分割 
  3.1: v3/v4的代码分为两个文件,比如: order.php, order_v3.php 
  3.2: system也分为两个文件,暂时只有一个user_v3 
     - Note: front的$this->user在v4中会替换为$this->customer, 即v4中需要清除$this->user 
  3.3: 代码中,区分v3/v4的调用,比如:new User_V3 
   
 # 前台代码 
   twig, js, css (js, css尽量写在单独的css文件中) 
     
 # 后台代码 
   MVCL    (L:en,cn) 
     
 # 注释 
 ## 类名: 
 <pre> 
 /** 
  * xxx 
  * 
  * @copyright RedBlue-OTS 2024 
  * @version v4 
  * 
  */ 
 </pre> 
 ## 函数名:参数类型 + 返回值类型 
 <pre> 
	 /** 
	  * xxx 
	  * 
	  * @param    xxx $xxx 
	  * @param    xxx $xxx 
	  * @return xxx 
	  */ 
 </pre> 

 *Output* 
 * Report and Solution 

 *Others*

Back