diff options
| author | muqiuhan <[email protected]> | 2025-07-08 07:58:31 +0000 |
|---|---|---|
| committer | muqiuhan <[email protected]> | 2025-07-08 07:58:31 +0000 |
| commit | 4653200961d82af7e4c290b3d7815ca4139d5ec5 (patch) | |
| tree | 5d350b8fd5a32eef1c87d8ef10ba91cf331d0641 /search.xml | |
| parent | e86d7f26c11f9d1521856a9d74c597ec037c0a5d (diff) | |
| download | blog-4653200961d82af7e4c290b3d7815ca4139d5ec5.tar.gz | |
deploy: 2882652e4e6f0c471aa8525aa078902afd1ba0d1
Diffstat (limited to 'search.xml')
| -rw-r--r-- | search.xml | 138 |
1 files changed, 78 insertions, 60 deletions
@@ -2510,6 +2510,24 @@ await prisma.$transaction(async tx => { </tags> </entry> <entry> + <title>DADGAD 定弦</title> + <url>/2025/07/08/dadgad/</url> + <content><![CDATA[<p>模态定弦的空弦音不直接构成传统意义上的大调或小调和弦,而是形成一种听感上更为空灵、悬浮的“挂留和弦”(Suspended Chord)效果。</p> +<p><strong>DADGAD (发音为 “dad-gad”):</strong> 这是凯尔特音乐(Celtic Music)中最具代表性的定弦。它的空弦音给人一种既非大调也非小调的模糊感,充满了神秘和悠远的色彩,非常适合营造氛围音乐和复杂的指弹旋律。</p> +<p>挂留和弦(Suspended Chord),通常简写为 <strong>“sus”<strong>,是一种在传统和弦结构上进行了巧妙“修改”的和弦。它的核心特点是:</strong>用一个非三度的音,去“替代”或“悬挂”了原本决定和弦大/小调色彩的三度音</strong>,从而创造出一种独特的声音效果。</p> +<p>想象一个标准的大三和弦或小三和弦,它由<strong>根音、三度音和五度音</strong>构成。其中,<strong>三度音</strong>是决定这个和弦听起来是明亮、开心的“大调”,还是忧郁、伤感的“小调”的关键。</p> +<p>而挂留和弦,就是把这个关键的“三度音”暂时拿掉,换上别的音。最常见的替代者有两个:<br>一是**纯四度音 (Perfect 4th)<strong>,二是</strong>大二度音 (Major 2nd)**。</p> +<p><strong>sus4 和弦 (挂四和弦)</strong> 由 <strong>根音 (1) + 纯四度音 (4) + 纯五度音 (5)</strong> 构成,即用<strong>四度音</strong>替代了原本的三度音。听感上,这是最常见的挂留和弦。它创造出一种<strong>强烈而悬浮的张力感</strong>,声音既不属于大调也不属于小调,听起来非常“开阔”。例如,一个 <strong>Csus4</strong> 和弦,就是由 C、F、G 三个音构成,取代了标准C大调和弦(C-E-G)中的 E 音。</p> +<p><strong>sus2 和弦 (挂二和弦)</strong> 由 <strong>根音 (1) + 大二度音 (2) + 纯五度音 (5)</strong> 构成,特点是用二度音替代了原本的三度音。听感上,sus2和弦的声音比sus4更柔和、更明亮一些。它同样具有开放、模糊的色彩,但张力感稍弱,听起来更像是一种平静、梦幻的色彩和弦。例如,一个 <strong>Csus2</strong> 和弦,就是由 C、D、G 三个音构成,取代了标准C大调和弦(C-E-G)中的 E 音。</p> +<p>而 DADGAD 定弦方式的空弦音,其核心就是一个挂留和弦,具体来说是一个 Dsus4 和弦。当你弹响 DADGAD 的所有空弦时,你实际上听到的就是 <strong>D、G、A</strong> 这三个音在不同八度上的叠加和共鸣。这三个音不多不少,正好构成了 <strong>Dsus4</strong> 和弦。</p> +<p>DADGAD 定弦的精髓,就在于它将整个吉他的开放状态变成了一个巨大的、共鸣丰富的 <strong>Dsus4</strong> 挂留和弦。</p> +<p>这正是为什么它能产生那种“既非大调也非小调的模糊感”和“空灵、悬浮”的听感。因为三度音(F# 或 F)的缺失,和弦的“身份”被悬挂了起来,没有明确地告诉你它是快乐的(大调)还是悲伤的(小调),而是创造出一种充满想象空间、广阔而悠远的音景。</p> +]]></content> + <tags> + <tag>Life</tag> + </tags> + </entry> + <entry> <title>肠易激综合征 (IBS) 的病理学与药物治疗</title> <url>/2025/06/30/ibs/</url> <content><![CDATA[<p>肠易激综合征 (Irritable Bowel Syndrome, IBS) 是一种常见的功能性胃肠病。其核心特征是在没有发现任何器质性病变(如炎症、溃疡或肿瘤)的情况下,患者长期经历腹痛、腹胀,并伴有排便习惯的改变(腹泻、便秘或两者交替)。</p> @@ -2667,6 +2685,18 @@ await prisma.$transaction(async tx => { </tags> </entry> <entry> + <title>tick thread在Multicore OCaml中的作用</title> + <url>/2023/08/15/tick-thread%E5%9C%A8Multicore-OCaml%E4%B8%AD%E7%9A%84%E4%BD%9C%E7%94%A8/</url> + <content><![CDATA[<p>Multicore OCaml的程序在启动时会运行一个 tick thread,其实现如下:</p> +<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="comment">/* The tick thread: posts a SIGPREEMPTION signal periodically */</span></span><br><span class="line"></span><br><span class="line"><span class="type">static</span> <span class="type">void</span> * <span class="title function_">caml_thread_tick</span><span class="params">(<span class="type">void</span> * arg)</span></span><br><span class="line">{</span><br><span class="line"> <span class="class"><span class="keyword">struct</span> <span class="title">timeval</span> <span class="title">timeout</span>;</span></span><br><span class="line"> <span class="type">sigset_t</span> mask;</span><br><span class="line"></span><br><span class="line"> <span class="comment">/* Block all signals so that we don't try to execute an OCaml signal handler*/</span></span><br><span class="line"> sigfillset(&mask);</span><br><span class="line"> pthread_sigmask(SIG_BLOCK, &mask, <span class="literal">NULL</span>);</span><br><span class="line"> <span class="keyword">while</span>(! caml_tick_thread_stop) {</span><br><span class="line"> <span class="comment">/* select() seems to be the most efficient way to suspend the</span></span><br><span class="line"><span class="comment"> thread for sub-second intervals */</span></span><br><span class="line"> timeout.tv_sec = <span class="number">0</span>;</span><br><span class="line"> timeout.tv_usec = Thread_timeout * <span class="number">1000</span>;</span><br><span class="line"> select(<span class="number">0</span>, <span class="literal">NULL</span>, <span class="literal">NULL</span>, <span class="literal">NULL</span>, &timeout);</span><br><span class="line"> <span class="comment">/* The preemption signal should never cause a callback, so don't</span></span><br><span class="line"><span class="comment"> go through caml_handle_signal(), just record signal delivery via</span></span><br><span class="line"><span class="comment"> caml_record_signal(). */</span></span><br><span class="line"> caml_record_signal(SIGPREEMPTION);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">NULL</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure> + +<p>这是因为Multicore OCaml的GC目前需要一个进程(或一个Domain)中的所有线程一起参与以避免并发访问。如果一个线程在system call上被阻塞,那么整个Domain就会被卡住,直到该线程可以参与当前的垃圾收集。为了避免这个问题,tick 线程可以代替被阻塞的线程执行垃圾收集操作。</p> +]]></content> + <tags> + <tag>Technique</tag> + </tags> + </entry> + <entry> <title>UUID v7 是如何加快 RDBMS 索引速度的</title> <url>/2025/04/13/uuidv7-rdbms/</url> <content><![CDATA[<p>UUID v7 之所以能显著提升关系型数据库(尤其是采用聚集索引的 MySQL InnoDB)在插入和查询速度,主要归功于它在 ID 中引入了“可排序的时间戳前缀”,从而大幅减少了 B-Tree 索引页分裂(page split)和数据碎片化。这里分几点来说:</p> @@ -3225,18 +3255,6 @@ await prisma.$transaction(async tx => { </categories> </entry> <entry> - <title>tick thread在Multicore OCaml中的作用</title> - <url>/2023/08/15/tick-thread%E5%9C%A8Multicore-OCaml%E4%B8%AD%E7%9A%84%E4%BD%9C%E7%94%A8/</url> - <content><![CDATA[<p>Multicore OCaml的程序在启动时会运行一个 tick thread,其实现如下:</p> -<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="comment">/* The tick thread: posts a SIGPREEMPTION signal periodically */</span></span><br><span class="line"></span><br><span class="line"><span class="type">static</span> <span class="type">void</span> * <span class="title function_">caml_thread_tick</span><span class="params">(<span class="type">void</span> * arg)</span></span><br><span class="line">{</span><br><span class="line"> <span class="class"><span class="keyword">struct</span> <span class="title">timeval</span> <span class="title">timeout</span>;</span></span><br><span class="line"> <span class="type">sigset_t</span> mask;</span><br><span class="line"></span><br><span class="line"> <span class="comment">/* Block all signals so that we don't try to execute an OCaml signal handler*/</span></span><br><span class="line"> sigfillset(&mask);</span><br><span class="line"> pthread_sigmask(SIG_BLOCK, &mask, <span class="literal">NULL</span>);</span><br><span class="line"> <span class="keyword">while</span>(! caml_tick_thread_stop) {</span><br><span class="line"> <span class="comment">/* select() seems to be the most efficient way to suspend the</span></span><br><span class="line"><span class="comment"> thread for sub-second intervals */</span></span><br><span class="line"> timeout.tv_sec = <span class="number">0</span>;</span><br><span class="line"> timeout.tv_usec = Thread_timeout * <span class="number">1000</span>;</span><br><span class="line"> select(<span class="number">0</span>, <span class="literal">NULL</span>, <span class="literal">NULL</span>, <span class="literal">NULL</span>, &timeout);</span><br><span class="line"> <span class="comment">/* The preemption signal should never cause a callback, so don't</span></span><br><span class="line"><span class="comment"> go through caml_handle_signal(), just record signal delivery via</span></span><br><span class="line"><span class="comment"> caml_record_signal(). */</span></span><br><span class="line"> caml_record_signal(SIGPREEMPTION);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">NULL</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure> - -<p>这是因为Multicore OCaml的GC目前需要一个进程(或一个Domain)中的所有线程一起参与以避免并发访问。如果一个线程在system call上被阻塞,那么整个Domain就会被卡住,直到该线程可以参与当前的垃圾收集。为了避免这个问题,tick 线程可以代替被阻塞的线程执行垃圾收集操作。</p> -]]></content> - <tags> - <tag>Technique</tag> - </tags> - </entry> - <entry> <title>二〇二四年四月八日</title> <url>/2024/04/08/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%9B%9B%E5%B9%B4%E5%9B%9B%E6%9C%88%E5%85%AB%E6%97%A5/</url> <content><![CDATA[<p>我不预设和任何人事物共度一生,<br>就自然的生活,<br>命运把我带到哪里就到哪里,<br>有缘的话,我会在世界中看见你,<br>无缘的话,我会看见你在世界中。</p> @@ -3581,6 +3599,18 @@ await prisma.$transaction(async tx => { </tags> </entry> <entry> + <title>儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例</title> + <url>/2023/10/25/%E5%84%BF%E7%AB%A5%E6%96%B0%E5%9E%8B%E5%86%A0%E7%8A%B6%E7%97%85%E6%AF%92Omicron%E6%A0%AA%E5%92%8C%E8%82%BA%E7%82%8E%E6%94%AF%E5%8E%9F%E4%BD%93%E6%B7%B7%E5%90%88%E6%84%9F%E6%9F%93%E9%87%8D%E7%97%87%E8%82%BA%E7%82%8E1%E4%BE%8B/</url> + <content><![CDATA[<p>患儿 男, 3 岁 10 月龄,因“间歇发热 2 周伴咳嗽、气促”入上海交通大学医学院附属仁济医院(南部院区)定点医院隔离病房。<br>患儿病初发热,确诊为新型冠状病毒肺炎(简称新冠肺炎),热退 2d 再次持续高热>3d 伴气促、吸气性凹陷,胸部 CT 示右肺下叶片状密度影,诊断“重型新冠肺炎”,行支气管镜肺泡灌洗,宏基因组病原检测确诊为混合肺炎支原体感染,治疗好转出院。<br>提示临床医生诊治重型新冠肺炎时需警惕混合感染</p> +<ul> +<li><a href="../papers/%E5%84%BF%E7%AB%A5%E6%96%B0%E5%9E%8B%E5%86%A0%E7%8A%B6%E7%97%85%E6%AF%92Omicron%E6%A0%AA%E5%92%8C%E8%82%BA%E7%82%8E%E6%94%AF%E5%8E%9F%E4%BD%93%E6%B7%B7%E5%90%88%E6%84%9F%E6%9F%93%E9%87%8D%E7%97%87%E8%82%BA%E7%82%8E1%E4%BE%8B.pdf">报告原档</a></li> +</ul> +]]></content> + <tags> + <tag>Medicine</tag> + </tags> + </entry> + <entry> <title>冬季咳嗽辨别指南</title> <url>/2023/10/22/%E5%86%AC%E5%AD%A3%E5%92%B3%E5%97%BD%E8%BE%A8%E5%88%AB%E6%8C%87%E5%8D%97/</url> <content><![CDATA[<p>这里给出一些在冬季,临床上简单诊断咳嗽的例子,仅供参考, 无论结果如何, 立刻就医.</p> @@ -3647,18 +3677,6 @@ await prisma.$transaction(async tx => { </tags> </entry> <entry> - <title>儿童新型冠状病毒Omicron株和肺炎支原体混合感染重症肺炎1例</title> - <url>/2023/10/25/%E5%84%BF%E7%AB%A5%E6%96%B0%E5%9E%8B%E5%86%A0%E7%8A%B6%E7%97%85%E6%AF%92Omicron%E6%A0%AA%E5%92%8C%E8%82%BA%E7%82%8E%E6%94%AF%E5%8E%9F%E4%BD%93%E6%B7%B7%E5%90%88%E6%84%9F%E6%9F%93%E9%87%8D%E7%97%87%E8%82%BA%E7%82%8E1%E4%BE%8B/</url> - <content><![CDATA[<p>患儿 男, 3 岁 10 月龄,因“间歇发热 2 周伴咳嗽、气促”入上海交通大学医学院附属仁济医院(南部院区)定点医院隔离病房。<br>患儿病初发热,确诊为新型冠状病毒肺炎(简称新冠肺炎),热退 2d 再次持续高热>3d 伴气促、吸气性凹陷,胸部 CT 示右肺下叶片状密度影,诊断“重型新冠肺炎”,行支气管镜肺泡灌洗,宏基因组病原检测确诊为混合肺炎支原体感染,治疗好转出院。<br>提示临床医生诊治重型新冠肺炎时需警惕混合感染</p> -<ul> -<li><a href="../papers/%E5%84%BF%E7%AB%A5%E6%96%B0%E5%9E%8B%E5%86%A0%E7%8A%B6%E7%97%85%E6%AF%92Omicron%E6%A0%AA%E5%92%8C%E8%82%BA%E7%82%8E%E6%94%AF%E5%8E%9F%E4%BD%93%E6%B7%B7%E5%90%88%E6%84%9F%E6%9F%93%E9%87%8D%E7%97%87%E8%82%BA%E7%82%8E1%E4%BE%8B.pdf">报告原档</a></li> -</ul> -]]></content> - <tags> - <tag>Medicine</tag> - </tags> - </entry> - <entry> <title>发热及超高热危象</title> <url>/2023/06/17/%E5%8F%91%E7%83%AD%E5%8F%8A%E8%B6%85%E9%AB%98%E7%83%AD%E5%8D%B1%E8%B1%A1/</url> <content><![CDATA[<p>应急诊断与处理放在开头,理论放在后面</p> @@ -3983,6 +4001,31 @@ await prisma.$transaction(async tx => { </tags> </entry> <entry> + <title>实时搜索中的防抖函数</title> + <url>/2025/02/10/%E5%AE%9E%E6%97%B6%E6%90%9C%E7%B4%A2%E4%B8%AD%E7%9A%84%E9%98%B2%E6%8A%96%E5%87%BD%E6%95%B0/</url> + <content><![CDATA[<p>在实现实时搜索功能时,通常会使用输入框的事件监听器来捕获用户的输入变化,并在输入变化时发送搜索请求。为了避免过多的请求导致服务器负担过重,通常会使用“防抖”(debounce)技术来控制请求的频率。</p> +<h3 id="实现步骤"><a href="#实现步骤" class="headerlink" title="实现步骤"></a>实现步骤</h3><ol> +<li>监听输入框的变化:使用<code>input</code>事件监听器来捕获用户的输入变化。</li> +<li>防抖处理:使用防抖函数来限制请求的频率。防抖函数会在用户停止输入一段时间后才发送请求。</li> +<li>发送请求:在防抖函数中调用搜索请求。</li> +</ol> +<h3 id="防抖函数示例"><a href="#防抖函数示例" class="headerlink" title="防抖函数示例"></a>防抖函数示例</h3><p>以下是一个简单的防抖函数示例:</p> +<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">debounce</span>(<span class="params">func, wait</span>) {</span><br><span class="line"> <span class="keyword">let</span> timeout;</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">function</span>(<span class="params">...args</span>) {</span><br><span class="line"> <span class="keyword">const</span> context = <span class="variable language_">this</span>;</span><br><span class="line"> <span class="built_in">clearTimeout</span>(timeout);</span><br><span class="line"> timeout = <span class="built_in">setTimeout</span>(<span class="function">() =></span> func.<span class="title function_">apply</span>(context, args), wait);</span><br><span class="line"> };</span><br><span class="line">}</span><br></pre></td></tr></table></figure> + +<h3 id="实现实时搜索"><a href="#实现实时搜索" class="headerlink" title="实现实时搜索"></a>实现实时搜索</h3><p>假设你有一个输入框用于搜索患者:</p> +<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line"><script></span><br><span class="line"> import { onMount } from 'svelte';</span><br><span class="line"> import { patientsStore } from '$lib/stores/patients.svelte';</span><br><span class="line"></span><br><span class="line"> let searchTerm = '';</span><br><span class="line"></span><br><span class="line"> // 防抖函数</span><br><span class="line"> function debounce(func, wait) {</span><br><span class="line"> let timeout;</span><br><span class="line"> return function(...args) {</span><br><span class="line"> const context = this;</span><br><span class="line"> clearTimeout(timeout);</span><br><span class="line"> timeout = setTimeout(() => func.apply(context, args), wait);</span><br><span class="line"> };</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> // 搜索函数</span><br><span class="line"> const searchPatients = debounce(async (term) => {</span><br><span class="line"> if (term) {</span><br><span class="line"> // 发送搜索请求</span><br><span class="line"> const response = await fetch(`/api/search-patients?query=${term}`);</span><br><span class="line"> const data = await response.json();</span><br><span class="line"> patientsStore.mbglPatients = data;</span><br><span class="line"> } else {</span><br><span class="line"> // 清空搜索结果或恢复默认数据</span><br><span class="line"> patientsStore.mbglPatients = [];</span><br><span class="line"> }</span><br><span class="line"> }, 300); // 300ms 的防抖时间</span><br><span class="line"></span><br><span class="line"> // 监听输入框变化</span><br><span class="line"> function handleInput(event) {</span><br><span class="line"> searchTerm = event.target.value;</span><br><span class="line"> searchPatients(searchTerm);</span><br><span class="line"> }</span><br><span class="line"></script></span><br><span class="line"></span><br><span class="line"><input type="text" placeholder="搜索患者..." on:input={handleInput} bind:value={searchTerm} /></span><br></pre></td></tr></table></figure> + +<h3 id="请求发送间隔"><a href="#请求发送间隔" class="headerlink" title="请求发送间隔"></a>请求发送间隔</h3><ul> +<li>防抖时间:通常设置为 300ms 到 500ms 之间。这个时间足够让用户完成输入并减少不必要的请求。</li> +<li>考虑用户体验:防抖时间过短可能导致过多请求,过长则可能让用户感到延迟。300ms 是一个常用的折中值。</li> +</ul> +<p>通过这种方式,你可以实现一个高效的实时搜索功能,既能保证用户体验,又能减少服务器的负担。</p> +]]></content> + <tags> + <tag>Technique</tag> + </tags> + </entry> + <entry> <title>急诊与灾难医学--烧伤</title> <url>/2024/01/25/%E6%80%A5%E8%AF%8A%E4%B8%8E%E7%81%BE%E9%9A%BE%E5%8C%BB%E5%AD%A6-%E7%83%A7%E4%BC%A4/</url> <content><![CDATA[<p>烧伤,烫伤是一个很常见的急诊意外损伤,这里科普一下相关的知识。</p> @@ -4117,31 +4160,6 @@ await prisma.$transaction(async tx => { </tags> </entry> <entry> - <title>实时搜索中的防抖函数</title> - <url>/2025/02/10/%E5%AE%9E%E6%97%B6%E6%90%9C%E7%B4%A2%E4%B8%AD%E7%9A%84%E9%98%B2%E6%8A%96%E5%87%BD%E6%95%B0/</url> - <content><![CDATA[<p>在实现实时搜索功能时,通常会使用输入框的事件监听器来捕获用户的输入变化,并在输入变化时发送搜索请求。为了避免过多的请求导致服务器负担过重,通常会使用“防抖”(debounce)技术来控制请求的频率。</p> -<h3 id="实现步骤"><a href="#实现步骤" class="headerlink" title="实现步骤"></a>实现步骤</h3><ol> -<li>监听输入框的变化:使用<code>input</code>事件监听器来捕获用户的输入变化。</li> -<li>防抖处理:使用防抖函数来限制请求的频率。防抖函数会在用户停止输入一段时间后才发送请求。</li> -<li>发送请求:在防抖函数中调用搜索请求。</li> -</ol> -<h3 id="防抖函数示例"><a href="#防抖函数示例" class="headerlink" title="防抖函数示例"></a>防抖函数示例</h3><p>以下是一个简单的防抖函数示例:</p> -<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">debounce</span>(<span class="params">func, wait</span>) {</span><br><span class="line"> <span class="keyword">let</span> timeout;</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">function</span>(<span class="params">...args</span>) {</span><br><span class="line"> <span class="keyword">const</span> context = <span class="variable language_">this</span>;</span><br><span class="line"> <span class="built_in">clearTimeout</span>(timeout);</span><br><span class="line"> timeout = <span class="built_in">setTimeout</span>(<span class="function">() =></span> func.<span class="title function_">apply</span>(context, args), wait);</span><br><span class="line"> };</span><br><span class="line">}</span><br></pre></td></tr></table></figure> - -<h3 id="实现实时搜索"><a href="#实现实时搜索" class="headerlink" title="实现实时搜索"></a>实现实时搜索</h3><p>假设你有一个输入框用于搜索患者:</p> -<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line"><script></span><br><span class="line"> import { onMount } from 'svelte';</span><br><span class="line"> import { patientsStore } from '$lib/stores/patients.svelte';</span><br><span class="line"></span><br><span class="line"> let searchTerm = '';</span><br><span class="line"></span><br><span class="line"> // 防抖函数</span><br><span class="line"> function debounce(func, wait) {</span><br><span class="line"> let timeout;</span><br><span class="line"> return function(...args) {</span><br><span class="line"> const context = this;</span><br><span class="line"> clearTimeout(timeout);</span><br><span class="line"> timeout = setTimeout(() => func.apply(context, args), wait);</span><br><span class="line"> };</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> // 搜索函数</span><br><span class="line"> const searchPatients = debounce(async (term) => {</span><br><span class="line"> if (term) {</span><br><span class="line"> // 发送搜索请求</span><br><span class="line"> const response = await fetch(`/api/search-patients?query=${term}`);</span><br><span class="line"> const data = await response.json();</span><br><span class="line"> patientsStore.mbglPatients = data;</span><br><span class="line"> } else {</span><br><span class="line"> // 清空搜索结果或恢复默认数据</span><br><span class="line"> patientsStore.mbglPatients = [];</span><br><span class="line"> }</span><br><span class="line"> }, 300); // 300ms 的防抖时间</span><br><span class="line"></span><br><span class="line"> // 监听输入框变化</span><br><span class="line"> function handleInput(event) {</span><br><span class="line"> searchTerm = event.target.value;</span><br><span class="line"> searchPatients(searchTerm);</span><br><span class="line"> }</span><br><span class="line"></script></span><br><span class="line"></span><br><span class="line"><input type="text" placeholder="搜索患者..." on:input={handleInput} bind:value={searchTerm} /></span><br></pre></td></tr></table></figure> - -<h3 id="请求发送间隔"><a href="#请求发送间隔" class="headerlink" title="请求发送间隔"></a>请求发送间隔</h3><ul> -<li>防抖时间:通常设置为 300ms 到 500ms 之间。这个时间足够让用户完成输入并减少不必要的请求。</li> -<li>考虑用户体验:防抖时间过短可能导致过多请求,过长则可能让用户感到延迟。300ms 是一个常用的折中值。</li> -</ul> -<p>通过这种方式,你可以实现一个高效的实时搜索功能,既能保证用户体验,又能减少服务器的负担。</p> -]]></content> - <tags> - <tag>Technique</tag> - </tags> - </entry> - <entry> <title>慢性肺源性心脏病</title> <url>/2024/01/23/%E6%85%A2%E6%80%A7%E8%82%BA%E6%BA%90%E6%80%A7%E5%BF%83%E8%84%8F%E7%97%85/</url> <content><![CDATA[<p>肺源性心脏病(cor pulmonale)简称肺心病, 指由于支气管-肺组织, 胸廓或肺血管病变引起肺血管阻力增加, 产生肺动脉高压,继而右心室结构和/或功能改变的疾病.<br>根据起病缓急和病程长短, 可分为急性肺心病和慢性肺心病两类, 急性肺心病常见于急性大面积肺栓塞,这里主要讲慢性肺心病.</p> @@ -4825,6 +4843,17 @@ await prisma.$transaction(async tx => { </tags> </entry> <entry> + <title>藿香正气水和藿香正气口服液的区别</title> + <url>/2024/09/01/%E8%97%BF%E9%A6%99%E6%AD%A3%E6%B0%94%E6%B0%B4%E5%92%8C%E8%97%BF%E9%A6%99%E6%AD%A3%E6%B0%94%E5%8F%A3%E6%9C%8D%E6%B6%B2%E7%9A%84%E5%8C%BA%E5%88%AB/</url> + <content><![CDATA[<p>虽然都是口服液体制剂,且看起来单支容量都一样,但是藿香正气水里含有 40%-50% 的乙醇,而藿香正气口服液不含有乙醇。同时藿香正气水不能和头孢一起服用(因为含有酒精),而藿香正气口服液可以和头孢一起服用。在选用之前,还希望大家能仔细看药品名称。</p> +<p>正气水是酊剂,用的是生半夏,口服液用的是法半夏,比正气水多了炒的白术,生姜和大枣,两者的功效都是解表化湿,理气和中。藿香正气水由水煮及酒浸制而成,疗效最明显,但口感较差。由于霍香正气水药效比较峻猛,小儿和年老体虚者服用时应有医生指导。藿香正气口服液是藿香正气的换代产品。</p> +]]></content> + <tags> + <tag>Medicine</tag> + <tag>Life</tag> + </tags> + </entry> + <entry> <title>螺内酯片</title> <url>/2023/03/14/%E8%9E%BA%E5%86%85%E9%85%AF%E7%89%87/</url> <content><![CDATA[<h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p>螺内酯是保钾利尿药,用于治疗心衰、低钾血症和高血压等。但是,它也会阻断雄激素受体,从而具有抗雄激素特性(我想你应该联想到了什么);不过其效力较弱,需服用较大剂量方可充分起效(尿频等副作用也更明显)。</p> @@ -4886,17 +4915,6 @@ await prisma.$transaction(async tx => { </tags> </entry> <entry> - <title>藿香正气水和藿香正气口服液的区别</title> - <url>/2024/09/01/%E8%97%BF%E9%A6%99%E6%AD%A3%E6%B0%94%E6%B0%B4%E5%92%8C%E8%97%BF%E9%A6%99%E6%AD%A3%E6%B0%94%E5%8F%A3%E6%9C%8D%E6%B6%B2%E7%9A%84%E5%8C%BA%E5%88%AB/</url> - <content><![CDATA[<p>虽然都是口服液体制剂,且看起来单支容量都一样,但是藿香正气水里含有 40%-50% 的乙醇,而藿香正气口服液不含有乙醇。同时藿香正气水不能和头孢一起服用(因为含有酒精),而藿香正气口服液可以和头孢一起服用。在选用之前,还希望大家能仔细看药品名称。</p> -<p>正气水是酊剂,用的是生半夏,口服液用的是法半夏,比正气水多了炒的白术,生姜和大枣,两者的功效都是解表化湿,理气和中。藿香正气水由水煮及酒浸制而成,疗效最明显,但口感较差。由于霍香正气水药效比较峻猛,小儿和年老体虚者服用时应有医生指导。藿香正气口服液是藿香正气的换代产品。</p> -]]></content> - <tags> - <tag>Medicine</tag> - <tag>Life</tag> - </tags> - </entry> - <entry> <title>血常规化验结果阅读指南</title> <url>/2023/10/12/%E8%A1%80%E5%B8%B8%E8%A7%84%E5%8C%96%E9%AA%8C%E7%BB%93%E6%9E%9C%E9%98%85%E8%AF%BB%E6%8C%87%E5%8D%97/</url> <content><