diff --git a/src-tauri/src/config/profiles.rs b/src-tauri/src/config/profiles.rs
index fac996070e34178f207d723f83f58b32ca771c53..ad50f632ab3017599af2e6d767606b74c4be73c8 100644
--- a/src-tauri/src/config/profiles.rs
+++ b/src-tauri/src/config/profiles.rs
@@ -27,41 +27,35 @@ impl ProfilesN {
 
     /// 更新单个配置
     pub async fn update_item(&self, uid: String, option: Option<PrfOption>) -> Result<()> {
-        let (url, opt) = {
+        let url_opt = {
             let profiles = self.config.lock();
             let item = profiles.get_item(&uid)?;
+            let is_remote = item.itype.as_ref().map_or(false, |s| s == "remote");
 
-            if let Some(typ) = item.itype.as_ref() {
-                // maybe only valid for `local` profile
-                if *typ != "remote" {
-                    // reactivate the config
-                    if Some(uid) == profiles.get_current() {
-                        drop(profiles);
-                        tauri::async_runtime::block_on(async {
-                            CoreManager::global().activate_config().await
-                        })?;
-                    }
-                    return Ok(());
-                }
-            }
-            if item.url.is_none() {
+            if !is_remote {
+                None // 直接更新
+            } else if item.url.is_none() {
                 bail!("failed to get the profile item url");
+            } else {
+                Some((item.url.clone().unwrap(), item.option.clone()))
             }
-            (item.url.clone().unwrap(), item.option.clone())
         };
 
-        let merged_opt = PrfOption::merge(opt, option);
-        let item = PrfItem::from_url(&url, None, None, merged_opt).await?;
+        let should_update = match url_opt {
+            Some((url, opt)) => {
+                let merged_opt = PrfOption::merge(opt, option);
+                let item = PrfItem::from_url(&url, None, None, merged_opt).await?;
 
-        let mut profiles = self.config.lock();
-        profiles.update_item(uid.clone(), item)?;
+                let mut profiles = self.config.lock();
+                profiles.update_item(uid.clone(), item)?;
+
+                Some(uid) == profiles.get_current()
+            }
+            None => true,
+        };
 
-        // reactivate the profile
-        if Some(uid) == profiles.get_current() {
-            drop(profiles);
-            tauri::async_runtime::block_on(async {
-                CoreManager::global().activate_config().await
-            })?;
+        if should_update {
+            CoreManager::global().activate_config().await?;
         }
 
         Ok(())