import{s as le,o as se,n as ee}from"../chunks/scheduler.5eb9d175.js";import{S as ne,i as ae,g as M,s as n,r as y,A as pe,h as i,f as l,c as a,j as Dt,u,x as r,k as Ot,y as Me,a as s,v as c,d as w,t as T,w as m}from"../chunks/index.fcdcb606.js";import{T as te}from"../chunks/Tip.9272e506.js";import{C as xt}from"../chunks/CodeBlock.a7036e06.js";import{H as K,E as ie}from"../chunks/EditOnGithub.98bf070f.js";function re(Y){let p,J="يُعدّ إنشاء محرك استدلال أمرًا معقدًا، ويعتمد الحل “الأفضل” على مساحة مشكلتك. هل تستخدم وحدة المعالجة المركزية أم وحدة معالجة الرسومات؟ هل تريد أقل زمن وصول، أم أعلى معدل نقل، أم دعمًا للعديد من النماذج، أم مجرد تحقيق أقصى تحسين نموذج محدد؟\nتوجد طرق عديدة لمعالجة هذا الموضوع، لذلك ما سنقدمه هو إعداد افتراضي جيد للبدء به قد لا يكون بالضرورة هو الحل الأمثل لك.```";return{c(){p=M("p"),p.textContent=J},l(o){p=i(o,"P",{"data-svelte-h":!0}),r(p)!=="svelte-195rjgx"&&(p.textContent=J)},m(o,j){s(o,p,j)},p:ee,d(o){o&&l(p)}}}function oe(Y){let p,J="تم كتابة نموذج الكود البرمجى أدناه بشكل مقصود مثل كود وهمي للقراءة. لا تقم بتشغيله دون التحقق مما إذا كان منطقيًا لموارد النظام الخاص بك!";return{c(){p=M("p"),p.textContent=J},l(o){p=i(o,"P",{"data-svelte-h":!0}),r(p)!=="svelte-h6vki3"&&(p.textContent=J)},m(o,j){s(o,p,j)},p:ee,d(o){o&&l(p)}}}function ye(Y){let p,J,o,j,$,O,f,tt,C,At='الشيء الرئيسي الذي يجب فهمه هو أننا يمكن أن نستخدم مؤشرًا، تمامًا كما تفعل <a href="pipeline_tutorial#using-pipelines-on-a-dataset">على مجموعة بيانات</a>، نظرًا لأن خادم الويب هو أساسًا نظام ينتظر الطلبات ويعالجها عند استلامها.',et,U,_t="عادةً ما تكون خوادم الويب متعددة الإرسال (متعددة مؤشرات الترابط، وغير متزامنة، إلخ) للتعامل مع الطلبات المختلفة بشكل متزامن. من ناحية أخرى، فإن قنوات المعالجة (وبشكل رئيسي النماذج الأساسية) ليست رائعة للتوازي؛ حيث تستهلك الكثير من ذاكرة الوصول العشوائي، لذا من الأفضل منحها جميع الموارد المتاحة عند تشغيلها أو إذا كانت مهمة تطلب حسابات مكثفة.",lt,h,Xt="سنحل ذلك من خلال جعل خادم الويب يتعامل مع الحمل الخفيف لاستقبال الطلبات وإرسالها،وجعل مؤشر ترابط واحد يتعامل مع العمل الفعلي. سيستخدم هذا المثال <code>starlette</code>. ولكن قد تضطر إلى ضبط الكود أو تغييره إذا كنت تستخدم كودًا آخر لتحقيق التأثير نفسه.",st,B,Zt="أنشئ <code>server.py</code>:",nt,I,at,v,Nt="الآن يمكنك تشغيله باستخدام:",pt,k,Mt,E,gt="ويمكنك الاستعلام عنه:",it,b,rt,x,qt="وهكذا، لديك الآن فكرة جيدة عن كيفية إنشاء خادم ويب!",ot,A,Vt="المهم حقًا هو أننا نقوم بتحميل النموذج <strong>مرة واحدة</strong> فقط، لذلك لا توجد نسخ من النموذج على خادم الويب. بهذه الطريقة، لا يتم استخدام ذاكرة الوصول العشوائي غير الضرورية. تسمح آلية وضع قائمة الانتظار بالقيام بأشياء متقدمة مثل تجميع بعض العناصر قبل الاستدلال لاستخدام معالجة الدفعات الديناميكية:",yt,d,ut,_,ct,X,Gt="مرة أخرى، تم تحسين الرمز المقترح لسهولة القراءة، وليس ليكون أفضل كود. بادئ ذي بدء، لا يوجد حد لحجم الدفعة، والذي عادةً ما لا يكون فكرة عظيمة. بعد ذلك، يتم إعادة ضبط الفترة في كل عملية جلب لقائمة الانتظار، مما يعني أنه قد يتعين عليك الانتظار لفترة أطول بكثير من 1 مللي ثانية قبل تشغيل الاستدلال (تأخير الطلب الأول بهذا القدر).",wt,Z,Ht="سيكون من الأفضل تحديد مهلة واحدة مدتها 1 مللي ثانية.",Tt,N,Qt="سيظل هذا ينتظر دائمًا لمدة 1 مللي ثانية حتى إذا كانت قائمة الانتظار فارغًا، والذي قد لا يكون الأفضل نظرًا لأنك تريد على الأرجح البدء في إجراء الاستدلال إذا لم يكن هناك شيء في قائمة الانتظا. ولكن ربما يكون منطقيًا إذا كانت المعالجة الديناميكية للدفعات مهمة حقًا لحالة الاستخدام لديك. مرة أخرى، لا يوجد حل واحد هو الأفضل.",mt,g,Jt,q,jt,V,Wt="هناك الكثير مما قد يحدث بشكل خاطئ في عند اتاحة النموذج للجمهور: نفاد الذاكرة، أو نفاد المساحة، أو فشل تحميل النموذج، أو قد يكون الاستعلام خاطئًا، أو قد يكون الاستعلام صحيحًا ولكن لا يزال يفشل في التشغيل بسبب خطأ في إعداد النموذج، وما إلى ذلك.",ft,G,St=`بشكل عام، من الجيد أن يُخرِج الخادم الأخطاء للمستخدم، لذلك يُعدّ إضافة الكثير من عبارات <code>try..except</code> لعرض هذه الأخطاء فكرة
جيدة. لكن ضع في اعتبارك أنه قد يمثل أيضًا مخاطرة أمنية الكشف عن جميع تلك الأخطاء اعتمادًا على سياق الأمان لديك.`,dt,H,$t,Q,Rt="عادةً ما تبدو خوادم الويب أفضل عندما تقوم بقطع الدائرة. وهذا يعني أنها ترجع أخطاء صحيحة عندما تكون مثقلة بشكل زائد بدلاً من الانتظار إلى أجل غير مسمى. قم بإرجاع خطأ 503 بدلاً من الانتظار لفترة طويلة جدًا أو 504 بعد فترة طويلة.",Ct,W,zt="من السهل نسبيًا تنفيذ ذلك في الكود المقترح نظرًا لوجود قائمة انتظار واحد. إن النظر في حجم قائمة الانتظار هو طريقة أساسية لبدء إرجاع الأخطاء قبل فشل خادم الويب بسبب الحمل الزائد.",Ut,S,ht,R,Pt="حاليًا، لا تدعم PyTorch  العمليات غير المتزامنة، وسيؤدي الحساب إلى حجب عمل الخيط الرئيسي أثناء تشغيله. وهذا يعني أنه سيكون من الأفضل إذا تم إجبار PyTorch على أن تعمل على الخيط/العملية الخاصة به. لم يتم ذلك هنا لأن الكود أكثر تعقيدًا (في الغالب لأن خيوط التنفيذ والعمليات غير المتزامنة  وقوائم الانتظار  لا تتوافق معًا). ولكن في النهاية، فإنه سيؤدي نفس الوظيفة.",Bt,z,Ft="سيكون هذا مهمًا إذا كان الاستدلال للعناصر الفردية طويلاً (> 1 ثانية) لأنه في هذه الحالة، فهذا يعني أنه سيتعين أثناء الاستدلال على كل استعلام الانتظار لمدة ثانية واحدة قبل حتى يلقي خطأ.",It,P,vt,F,Lt='بشكل عام، لا تُعدّ المعالجة بالضرورة تحسينًا مقارنةً بتمرير عنصر واحد في كل مرة (راجع <a href="./main_classes/pipelines#pipeline-batching">تفاصيل المعالجة بالدفعات</a> لمزيد من المعلومات).  ولكن يمكن أن تكون فعالة للغاية عند استخدامها  بالإعداد الصحيح. في واجهة برمجة التطبيقات، لا توجد معالجة ديناميكية بشكل افتراضي (فرصة كبيرة جدًا للتباطؤ).  ولكن بالنسبة لاستدلال BLOOM - وهو نموذج كبير جدًا - تُعدّ المعالجة الديناميكية <strong>ضرورية</strong> لتوفير تجربة جيدة للجميع.',kt,L,Et,D,bt;return $=new K({props:{title:"استخدام قنوات المعالجة لخادم ويب",local:"استخدام-قنوات-المعالجة-لخادم-ويب",headingTag:"h1"}}),f=new te({props:{$$slots:{default:[re]},$$scope:{ctx:Y}}}),I=new xt({props:{code:"ZnJvbSUyMHN0YXJsZXR0ZS5hcHBsaWNhdGlvbnMlMjBpbXBvcnQlMjBTdGFybGV0dGUlMEFmcm9tJTIwc3RhcmxldHRlLnJlc3BvbnNlcyUyMGltcG9ydCUyMEpTT05SZXNwb25zZSUwQWZyb20lMjBzdGFybGV0dGUucm91dGluZyUyMGltcG9ydCUyMFJvdXRlJTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBaW1wb3J0JTIwYXN5bmNpbyUwQSUwQSUwQWFzeW5jJTIwZGVmJTIwaG9tZXBhZ2UocmVxdWVzdCklM0ElMEElMjAlMjAlMjAlMjBwYXlsb2FkJTIwJTNEJTIwYXdhaXQlMjByZXF1ZXN0LmJvZHkoKSUwQSUyMCUyMCUyMCUyMHN0cmluZyUyMCUzRCUyMHBheWxvYWQuZGVjb2RlKCUyMnV0Zi04JTIyKSUwQSUyMCUyMCUyMCUyMHJlc3BvbnNlX3ElMjAlM0QlMjBhc3luY2lvLlF1ZXVlKCklMEElMjAlMjAlMjAlMjBhd2FpdCUyMHJlcXVlc3QuYXBwLm1vZGVsX3F1ZXVlLnB1dCgoc3RyaW5nJTJDJTIwcmVzcG9uc2VfcSkpJTBBJTIwJTIwJTIwJTIwb3V0cHV0JTIwJTNEJTIwYXdhaXQlMjByZXNwb25zZV9xLmdldCgpJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwSlNPTlJlc3BvbnNlKG91dHB1dCklMEElMEElMEFhc3luYyUyMGRlZiUyMHNlcnZlcl9sb29wKHEpJTNBJTBBJTIwJTIwJTIwJTIwcGlwZSUyMCUzRCUyMHBpcGVsaW5lKG1vZGVsJTNEJTIyZ29vZ2xlLWJlcnQlMkZiZXJ0LWJhc2UtdW5jYXNlZCUyMiklMEElMjAlMjAlMjAlMjB3aGlsZSUyMFRydWUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAoc3RyaW5nJTJDJTIwcmVzcG9uc2VfcSklMjAlM0QlMjBhd2FpdCUyMHEuZ2V0KCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXQlMjAlM0QlMjBwaXBlKHN0cmluZyklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhd2FpdCUyMHJlc3BvbnNlX3EucHV0KG91dCklMEElMEElMEFhcHAlMjAlM0QlMjBTdGFybGV0dGUoJTBBJTIwJTIwJTIwJTIwcm91dGVzJTNEJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwUm91dGUoJTIyJTJGJTIyJTJDJTIwaG9tZXBhZ2UlMkMlMjBtZXRob2RzJTNEJTVCJTIyUE9TVCUyMiU1RCklMkMlMEElMjAlMjAlMjAlMjAlNUQlMkMlMEEpJTBBJTBBJTBBJTQwYXBwLm9uX2V2ZW50KCUyMnN0YXJ0dXAlMjIpJTBBYXN5bmMlMjBkZWYlMjBzdGFydHVwX2V2ZW50KCklM0ElMEElMjAlMjAlMjAlMjBxJTIwJTNEJTIwYXN5bmNpby5RdWV1ZSgpJTBBJTIwJTIwJTIwJTIwYXBwLm1vZGVsX3F1ZXVlJTIwJTNEJTIwcSUwQSUyMCUyMCUyMCUyMGFzeW5jaW8uY3JlYXRlX3Rhc2soc2VydmVyX2xvb3AocSkp",highlighted:`<span class="hljs-keyword">from</span> starlette.applications <span class="hljs-keyword">import</span> Starlette
<span class="hljs-keyword">from</span> starlette.responses <span class="hljs-keyword">import</span> JSONResponse
<span class="hljs-keyword">from</span> starlette.routing <span class="hljs-keyword">import</span> Route
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline
<span class="hljs-keyword">import</span> asyncio


<span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">homepage</span>(<span class="hljs-params">request</span>):
    payload = <span class="hljs-keyword">await</span> request.body()
    string = payload.decode(<span class="hljs-string">&quot;utf-8&quot;</span>)
    response_q = asyncio.Queue()
    <span class="hljs-keyword">await</span> request.app.model_queue.put((string, response_q))
    output = <span class="hljs-keyword">await</span> response_q.get()
    <span class="hljs-keyword">return</span> JSONResponse(output)


<span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">server_loop</span>(<span class="hljs-params">q</span>):
    pipe = pipeline(model=<span class="hljs-string">&quot;google-bert/bert-base-uncased&quot;</span>)
    <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
        (string, response_q) = <span class="hljs-keyword">await</span> q.get()
        out = pipe(string)
        <span class="hljs-keyword">await</span> response_q.put(out)


app = Starlette(
    routes=[
        Route(<span class="hljs-string">&quot;/&quot;</span>, homepage, methods=[<span class="hljs-string">&quot;POST&quot;</span>]),
    ],
)


<span class="hljs-meta">@app.on_event(<span class="hljs-params"><span class="hljs-string">&quot;startup&quot;</span></span>)</span>
<span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">startup_event</span>():
    q = asyncio.Queue()
    app.model_queue = q
    asyncio.create_task(server_loop(q))`,wrap:!1}}),k=new xt({props:{code:"dXZpY29ybiUyMHNlcnZlciUzQWFwcA==",highlighted:"uvicorn server:app",wrap:!1}}),b=new xt({props:{code:"Y3VybCUyMC1YJTIwUE9TVCUyMC1kJTIwJTIydGVzdCUyMCU1Qk1BU0slNUQlMjIlMjBodHRwJTNBJTJGJTJGbG9jYWxob3N0JTNBODAwMCUyRiUwQSUyMyU1QiU3QiUyMnNjb3JlJTIyJTNBMC43NzQyOTM2MDE1MTI5MDg5JTJDJTIydG9rZW4lMjIlM0ExMDEyJTJDJTIydG9rZW5fc3RyJTIyJTNBJTIyLiUyMiUyQyUyMnNlcXVlbmNlJTIyJTNBJTIydGVzdC4lMjIlN0QlMkMuLi4lNUQ=",highlighted:`curl -X POST -d <span class="hljs-string">&quot;test [MASK]&quot;</span> http://localhost:8000/
<span class="hljs-comment">#[{&quot;score&quot;:0.7742936015129089,&quot;token&quot;:1012,&quot;token_str&quot;:&quot;.&quot;,&quot;sequence&quot;:&quot;test.&quot;},...]</span>`,wrap:!1}}),d=new te({props:{warning:!0,$$slots:{default:[oe]},$$scope:{ctx:Y}}}),_=new xt({props:{code:"KHN0cmluZyUyQyUyMHJxKSUyMCUzRCUyMGF3YWl0JTIwcS5nZXQoKSUwQXN0cmluZ3MlMjAlM0QlMjAlNUIlNUQlMEFxdWV1ZXMlMjAlM0QlMjAlNUIlNUQlMEF3aGlsZSUyMFRydWUlM0ElMEElMjAlMjAlMjAlMjB0cnklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAoc3RyaW5nJTJDJTIwcnEpJTIwJTNEJTIwYXdhaXQlMjBhc3luY2lvLndhaXRfZm9yKHEuZ2V0KCklMkMlMjB0aW1lb3V0JTNEMC4wMDEpJTIwJTIzJTIwMW1zJTBBJTIwJTIwJTIwJTIwZXhjZXB0JTIwYXN5bmNpby5leGNlcHRpb25zLlRpbWVvdXRFcnJvciUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJyZWFrJTBBJTIwJTIwJTIwJTIwc3RyaW5ncy5hcHBlbmQoc3RyaW5nKSUwQSUyMCUyMCUyMCUyMHF1ZXVlcy5hcHBlbmQocnEpJTBBc3RyaW5ncyUwQW91dHMlMjAlM0QlMjBwaXBlKHN0cmluZ3MlMkMlMjBiYXRjaF9zaXplJTNEbGVuKHN0cmluZ3MpKSUwQWZvciUyMHJxJTJDJTIwb3V0JTIwaW4lMjB6aXAocXVldWVzJTJDJTIwb3V0cyklM0ElMEElMjAlMjAlMjAlMjBhd2FpdCUyMHJxLnB1dChvdXQp",highlighted:`(string, rq) = <span class="hljs-keyword">await</span> q.get()
strings = []
queues = []
<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
    <span class="hljs-keyword">try</span>:
        (string, rq) = <span class="hljs-keyword">await</span> asyncio.wait_for(q.get(), timeout=<span class="hljs-number">0.001</span>) <span class="hljs-comment"># 1ms</span>
    <span class="hljs-keyword">except</span> asyncio.exceptions.TimeoutError:
        <span class="hljs-keyword">break</span>
    strings.append(string)
    queues.append(rq)
strings
outs = pipe(strings, batch_size=<span class="hljs-built_in">len</span>(strings))
<span class="hljs-keyword">for</span> rq, out <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(queues, outs):
    <span class="hljs-keyword">await</span> rq.put(out)`,wrap:!1}}),g=new K({props:{title:"بعض الأشياء التي قد ترغب في مراعاتها",local:"بعض-الأشياء-التي-قد-ترغب-في-مراعاتها",headingTag:"h2"}}),q=new K({props:{title:"التحقق من الأخطاء",local:"التحقق-من-الأخطاء",headingTag:"h3"}}),H=new K({props:{title:"قطع الدائرة (Circuit breaking)",local:"قطع-الدائرة-circuit-breaking",headingTag:"h3"}}),S=new K({props:{title:"حجب عمل خيط التنفيذ الرئيسي (Main thread)",local:"حجب-عمل-خيط-التنفيذ-الرئيسي-main-thread",headingTag:"h3"}}),P=new K({props:{title:"المعالجة الديناميكية",local:"المعالجة-الديناميكية",headingTag:"h3"}}),L=new ie({props:{source:"https://github.com/huggingface/transformers/blob/main/docs/source/ar/pipeline_webserver.md"}}),{c(){p=M("meta"),J=n(),o=M("p"),j=n(),y($.$$.fragment),O=n(),y(f.$$.fragment),tt=n(),C=M("p"),C.innerHTML=At,et=n(),U=M("p"),U.textContent=_t,lt=n(),h=M("p"),h.innerHTML=Xt,st=n(),B=M("p"),B.innerHTML=Zt,nt=n(),y(I.$$.fragment),at=n(),v=M("p"),v.textContent=Nt,pt=n(),y(k.$$.fragment),Mt=n(),E=M("p"),E.textContent=gt,it=n(),y(b.$$.fragment),rt=n(),x=M("p"),x.textContent=qt,ot=n(),A=M("p"),A.innerHTML=Vt,yt=n(),y(d.$$.fragment),ut=n(),y(_.$$.fragment),ct=n(),X=M("p"),X.textContent=Gt,wt=n(),Z=M("p"),Z.textContent=Ht,Tt=n(),N=M("p"),N.textContent=Qt,mt=n(),y(g.$$.fragment),Jt=n(),y(q.$$.fragment),jt=n(),V=M("p"),V.textContent=Wt,ft=n(),G=M("p"),G.innerHTML=St,dt=n(),y(H.$$.fragment),$t=n(),Q=M("p"),Q.textContent=Rt,Ct=n(),W=M("p"),W.textContent=zt,Ut=n(),y(S.$$.fragment),ht=n(),R=M("p"),R.textContent=Pt,Bt=n(),z=M("p"),z.textContent=Ft,It=n(),y(P.$$.fragment),vt=n(),F=M("p"),F.innerHTML=Lt,kt=n(),y(L.$$.fragment),Et=n(),D=M("p"),this.h()},l(t){const e=pe("svelte-u9bgzb",document.head);p=i(e,"META",{name:!0,content:!0}),e.forEach(l),J=a(t),o=i(t,"P",{}),Dt(o).forEach(l),j=a(t),u($.$$.fragment,t),O=a(t),u(f.$$.fragment,t),tt=a(t),C=i(t,"P",{"data-svelte-h":!0}),r(C)!=="svelte-nsez5q"&&(C.innerHTML=At),et=a(t),U=i(t,"P",{"data-svelte-h":!0}),r(U)!=="svelte-1czunvj"&&(U.textContent=_t),lt=a(t),h=i(t,"P",{"data-svelte-h":!0}),r(h)!=="svelte-klwom"&&(h.innerHTML=Xt),st=a(t),B=i(t,"P",{"data-svelte-h":!0}),r(B)!=="svelte-c839zc"&&(B.innerHTML=Zt),nt=a(t),u(I.$$.fragment,t),at=a(t),v=i(t,"P",{"data-svelte-h":!0}),r(v)!=="svelte-tuutma"&&(v.textContent=Nt),pt=a(t),u(k.$$.fragment,t),Mt=a(t),E=i(t,"P",{"data-svelte-h":!0}),r(E)!=="svelte-cux5il"&&(E.textContent=gt),it=a(t),u(b.$$.fragment,t),rt=a(t),x=i(t,"P",{"data-svelte-h":!0}),r(x)!=="svelte-1f4nnvj"&&(x.textContent=qt),ot=a(t),A=i(t,"P",{"data-svelte-h":!0}),r(A)!=="svelte-zwuayg"&&(A.innerHTML=Vt),yt=a(t),u(d.$$.fragment,t),ut=a(t),u(_.$$.fragment,t),ct=a(t),X=i(t,"P",{"data-svelte-h":!0}),r(X)!=="svelte-1w2wqu7"&&(X.textContent=Gt),wt=a(t),Z=i(t,"P",{"data-svelte-h":!0}),r(Z)!=="svelte-191qjdp"&&(Z.textContent=Ht),Tt=a(t),N=i(t,"P",{"data-svelte-h":!0}),r(N)!=="svelte-1so9h5x"&&(N.textContent=Qt),mt=a(t),u(g.$$.fragment,t),Jt=a(t),u(q.$$.fragment,t),jt=a(t),V=i(t,"P",{"data-svelte-h":!0}),r(V)!=="svelte-1c0c9xm"&&(V.textContent=Wt),ft=a(t),G=i(t,"P",{"data-svelte-h":!0}),r(G)!=="svelte-3weble"&&(G.innerHTML=St),dt=a(t),u(H.$$.fragment,t),$t=a(t),Q=i(t,"P",{"data-svelte-h":!0}),r(Q)!=="svelte-1qhl84t"&&(Q.textContent=Rt),Ct=a(t),W=i(t,"P",{"data-svelte-h":!0}),r(W)!=="svelte-1o5dqkv"&&(W.textContent=zt),Ut=a(t),u(S.$$.fragment,t),ht=a(t),R=i(t,"P",{"data-svelte-h":!0}),r(R)!=="svelte-scy2ob"&&(R.textContent=Pt),Bt=a(t),z=i(t,"P",{"data-svelte-h":!0}),r(z)!=="svelte-cxb1fd"&&(z.textContent=Ft),It=a(t),u(P.$$.fragment,t),vt=a(t),F=i(t,"P",{"data-svelte-h":!0}),r(F)!=="svelte-i8t6iq"&&(F.innerHTML=Lt),kt=a(t),u(L.$$.fragment,t),Et=a(t),D=i(t,"P",{}),Dt(D).forEach(l),this.h()},h(){Ot(p,"name","hf:doc:metadata"),Ot(p,"content",ue)},m(t,e){Me(document.head,p),s(t,J,e),s(t,o,e),s(t,j,e),c($,t,e),s(t,O,e),c(f,t,e),s(t,tt,e),s(t,C,e),s(t,et,e),s(t,U,e),s(t,lt,e),s(t,h,e),s(t,st,e),s(t,B,e),s(t,nt,e),c(I,t,e),s(t,at,e),s(t,v,e),s(t,pt,e),c(k,t,e),s(t,Mt,e),s(t,E,e),s(t,it,e),c(b,t,e),s(t,rt,e),s(t,x,e),s(t,ot,e),s(t,A,e),s(t,yt,e),c(d,t,e),s(t,ut,e),c(_,t,e),s(t,ct,e),s(t,X,e),s(t,wt,e),s(t,Z,e),s(t,Tt,e),s(t,N,e),s(t,mt,e),c(g,t,e),s(t,Jt,e),c(q,t,e),s(t,jt,e),s(t,V,e),s(t,ft,e),s(t,G,e),s(t,dt,e),c(H,t,e),s(t,$t,e),s(t,Q,e),s(t,Ct,e),s(t,W,e),s(t,Ut,e),c(S,t,e),s(t,ht,e),s(t,R,e),s(t,Bt,e),s(t,z,e),s(t,It,e),c(P,t,e),s(t,vt,e),s(t,F,e),s(t,kt,e),c(L,t,e),s(t,Et,e),s(t,D,e),bt=!0},p(t,[e]){const Yt={};e&2&&(Yt.$$scope={dirty:e,ctx:t}),f.$set(Yt);const Kt={};e&2&&(Kt.$$scope={dirty:e,ctx:t}),d.$set(Kt)},i(t){bt||(w($.$$.fragment,t),w(f.$$.fragment,t),w(I.$$.fragment,t),w(k.$$.fragment,t),w(b.$$.fragment,t),w(d.$$.fragment,t),w(_.$$.fragment,t),w(g.$$.fragment,t),w(q.$$.fragment,t),w(H.$$.fragment,t),w(S.$$.fragment,t),w(P.$$.fragment,t),w(L.$$.fragment,t),bt=!0)},o(t){T($.$$.fragment,t),T(f.$$.fragment,t),T(I.$$.fragment,t),T(k.$$.fragment,t),T(b.$$.fragment,t),T(d.$$.fragment,t),T(_.$$.fragment,t),T(g.$$.fragment,t),T(q.$$.fragment,t),T(H.$$.fragment,t),T(S.$$.fragment,t),T(P.$$.fragment,t),T(L.$$.fragment,t),bt=!1},d(t){t&&(l(J),l(o),l(j),l(O),l(tt),l(C),l(et),l(U),l(lt),l(h),l(st),l(B),l(nt),l(at),l(v),l(pt),l(Mt),l(E),l(it),l(rt),l(x),l(ot),l(A),l(yt),l(ut),l(ct),l(X),l(wt),l(Z),l(Tt),l(N),l(mt),l(Jt),l(jt),l(V),l(ft),l(G),l(dt),l($t),l(Q),l(Ct),l(W),l(Ut),l(ht),l(R),l(Bt),l(z),l(It),l(vt),l(F),l(kt),l(Et),l(D)),l(p),m($,t),m(f,t),m(I,t),m(k,t),m(b,t),m(d,t),m(_,t),m(g,t),m(q,t),m(H,t),m(S,t),m(P,t),m(L,t)}}}const ue='{"title":"استخدام قنوات المعالجة لخادم ويب","local":"استخدام-قنوات-المعالجة-لخادم-ويب","sections":[{"title":"بعض الأشياء التي قد ترغب في مراعاتها","local":"بعض-الأشياء-التي-قد-ترغب-في-مراعاتها","sections":[{"title":"التحقق من الأخطاء","local":"التحقق-من-الأخطاء","sections":[],"depth":3},{"title":"قطع الدائرة (Circuit breaking)","local":"قطع-الدائرة-circuit-breaking","sections":[],"depth":3},{"title":"حجب عمل خيط التنفيذ الرئيسي (Main thread)","local":"حجب-عمل-خيط-التنفيذ-الرئيسي-main-thread","sections":[],"depth":3},{"title":"المعالجة الديناميكية","local":"المعالجة-الديناميكية","sections":[],"depth":3}],"depth":2}],"depth":1}';function ce(Y){return se(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class fe extends ne{constructor(p){super(),ae(this,p,ce,ye,le,{})}}export{fe as component};
