{"id":127,"date":"2026-01-19T21:52:14","date_gmt":"2026-01-19T18:52:14","guid":{"rendered":"https:\/\/blog.giturn.com\/?p=127"},"modified":"2026-01-23T23:01:47","modified_gmt":"2026-01-23T20:01:47","slug":"how-we-sped-up-restaurant-menus","status":"publish","type":"post","link":"https:\/\/giturn.com\/blog\/how-we-sped-up-restaurant-menus\/","title":{"rendered":"\u062a\u062d\u062f\u064a &#8220;\u0633\u0627\u0639\u0629 \u0627\u0644\u063a\u062f\u0627\u0621&#8221;: \u0643\u064a\u0641 \u0642\u0645\u0646\u0627 \u0628\u062a\u0633\u0631\u064a\u0639 \u0645\u0646\u064a\u0648 \u0645\u0637\u0627\u0639\u0645 \u062c\u0627\u0645\u0639\u0629 \u0643\u0631\u0643\u0648\u0643 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062a\u0642\u0646\u064a\u0629 Caching"},"content":{"rendered":"<p data-path-to-node=\"10\">\u0641\u064a \u0645\u0634\u0627\u0631\u064a\u0639 \u0645\u062b\u0644 <b data-path-to-node=\"10\" data-index-in-node=\"14\">&#8220;\u0627\u0644\u0645\u0646\u064a\u0648 \u0627\u0644\u0631\u0642\u0645\u064a&#8221;<\/b> \u0644\u062c\u0627\u0645\u0639\u0629 \u0643\u0631\u0643\u0648\u0643\u060c \u0627\u0644\u062a\u062d\u062f\u064a \u0627\u0644\u062d\u0642\u064a\u0642\u064a \u0644\u064a\u0633 \u0641\u064a \u0639\u0631\u0636 \u0635\u0648\u0631 \u0627\u0644\u0637\u0639\u0627\u0645\u060c \u0628\u0644 \u0641\u064a <b data-path-to-node=\"10\" data-index-in-node=\"88\">\u0627\u0644\u062a\u0632\u0627\u0645\u0646 (Concurrency)<\/b>. \u0641\u064a \u0648\u0642\u062a \u0627\u0644\u0627\u0633\u062a\u0631\u0627\u062d\u0629\u060c \u064a\u0642\u0648\u0645 \u0622\u0644\u0627\u0641 \u0627\u0644\u0637\u0644\u0627\u0628 \u0628\u0645\u0633\u062d \u0643\u0648\u062f QR \u0641\u064a \u0646\u0641\u0633 \u0627\u0644\u062f\u0642\u064a\u0642\u0629. \u0644\u0648 \u0627\u0639\u062a\u0645\u062f\u0646\u0627 \u0639\u0644\u0649 \u062c\u0644\u0628 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0645\u0646 &#8220;\u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a&#8221; (Database) \u0641\u064a \u0643\u0644 \u0645\u0631\u0629\u060c \u0633\u064a\u0646\u0647\u0627\u0631 \u0627\u0644\u0633\u0631\u0641\u0631 \u062a\u062d\u062a \u0647\u0630\u0627 \u0627\u0644\u0636\u063a\u0637 \u0627\u0644\u0647\u0627\u0626\u0644 (\u0645\u0627 \u064a\u0634\u0628\u0647 \u0647\u062c\u0648\u0645 DDoS \u063a\u064a\u0631 \u0645\u0642\u0635\u0648\u062f).<\/p>\n<p data-path-to-node=\"11\">\u0627\u0644\u062d\u0644 \u0627\u0644\u0630\u064a \u0637\u0628\u0642\u0646\u0627\u0647 \u0641\u064a <b data-path-to-node=\"11\" data-index-in-node=\"20\">Giturn<\/b> \u0644\u0636\u0645\u0627\u0646 \u0633\u0631\u0639\u0629 \u0627\u0633\u062a\u062c\u0627\u0628\u0629 \u0644\u0627 \u062a\u062a\u062c\u0627\u0648\u0632 100 \u0645\u064a\u0644\u064a \u062b\u0627\u0646\u064a\u0629 \u0647\u0648 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062a\u0642\u0646\u064a\u0629 <b data-path-to-node=\"11\" data-index-in-node=\"88\">Redis Caching<\/b>.<\/p>\n<p data-path-to-node=\"12\">\u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u0645\u062e\u0637\u0637\u060c \u0646\u0648\u0636\u062d \u0627\u0644\u0641\u0631\u0642 \u0628\u064a\u0646 \u0627\u0644\u0637\u0644\u0628 \u0627\u0644\u0645\u0628\u0627\u0634\u0631 \u0648\u0627\u0644\u0637\u0644\u0628 \u0639\u0628\u0631 \u0627\u0644\u0643\u0627\u0634:<\/p>\n<hr data-path-to-node=\"13\" \/>\n<h3 data-path-to-node=\"14\">\u0627\u0644\u062c\u0632\u0621 \u0627\u0644\u0623\u0648\u0644: \u0627\u0644\u0645\u0634\u0643\u0644\u0629 \u0641\u064a \u0627\u0644\u0643\u0648\u062f \u0627\u0644\u062a\u0642\u0644\u064a\u062f\u064a<\/h3>\n<p data-path-to-node=\"15\"><i data-path-to-node=\"15\" data-index-in-node=\"0\">(\u0627\u0643\u062a\u0628 \u0647\u0630\u0627 \u0642\u0628\u0644 \u0627\u0644\u0643\u0648\u062f \u0627\u0644\u0623\u0648\u0644)<\/i> \u0641\u064a \u0627\u0644\u0643\u0648\u062f \u0627\u0644\u0639\u0627\u062f\u064a\u060c \u064a\u0642\u0648\u0645 \u0627\u0644\u062a\u0637\u0628\u064a\u0642 \u0628\u0627\u0644\u0630\u0647\u0627\u0628 \u0644\u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0641\u064a \u0643\u0644 \u0645\u0631\u0629 \u064a\u0641\u062a\u062d \u0641\u064a\u0647\u0627 \u0637\u0627\u0644\u0628 \u0627\u0644\u0645\u0646\u064a\u0648\u060c \u0644\u0644\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u0623\u0635\u0646\u0627\u0641 \u0648\u0627\u0644\u0623\u0633\u0639\u0627\u0631. \u0647\u0630\u0627 \u0645\u0643\u0644\u0641 \u062c\u062f\u0627\u064b \u0644\u0645\u0648\u0627\u0631\u062f \u0627\u0644\u0633\u0631\u0641\u0631.<\/p>\n<p data-path-to-node=\"16\"><b data-path-to-node=\"16\" data-index-in-node=\"0\">(\u0627\u0646\u0633\u062e \u0647\u0630\u0627 \u0627\u0644\u0643\u0648\u062f \u0641\u064a \u0628\u0644\u0648\u0643 PHP &#8211; \u0648\u0627\u0643\u062a\u0628 \u0641\u0648\u0642\u0647: &#8220;\u0627\u0644\u0643\u0648\u062f \u0627\u0644\u062a\u0642\u0644\u064a\u062f\u064a (\u0627\u0644\u0628\u0637\u064a\u0621)&#8221;):<\/b><\/p>\n<div class=\"code-block ng-tns-c372103520-367 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjipuvt4peSAxUAAAAAHQAAAAAQ0gU\">\n<div class=\"code-block-decoration header-formatted gds-title-s ng-tns-c372103520-367 ng-star-inserted\">\n<p><span class=\"ng-tns-c372103520-367\">PHP<\/span><\/p>\n<div class=\"buttons ng-tns-c372103520-367 ng-star-inserted\"><\/div>\n<\/div>\n<div class=\"formatted-code-block-internal-container ng-tns-c372103520-367\">\n<div class=\"animated-opacity ng-tns-c372103520-367\">\n<pre class=\"ng-tns-c372103520-367\"><code class=\"code-container formatted ng-tns-c372103520-367\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-comment\">\/\/ \u062a\u062e\u064a\u0644 \u0623\u0646 5000 \u0637\u0627\u0644\u0628 \u064a\u0637\u0644\u0628\u0648\u0646 \u0647\u0630\u0627 \u0627\u0644\u0643\u0648\u062f \u0641\u064a \u0646\u0641\u0633 \u0627\u0644\u0644\u062d\u0638\u0629!<\/span>\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">getMenu<\/span>(<span class=\"hljs-params\"><span class=\"hljs-variable\">$restaurantId<\/span><\/span>) <\/span>{\r\n    \r\n    <span class=\"hljs-comment\">\/\/ 1. \u0627\u0633\u062a\u0639\u0644\u0627\u0645 \u0645\u0639\u0642\u062f \u0645\u0646 \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a<\/span>\r\n    <span class=\"hljs-variable\">$categories<\/span> = Category::where(<span class=\"hljs-string\">'restaurant_id'<\/span>, <span class=\"hljs-variable\">$restaurantId<\/span>)\r\n                          -&gt;with(<span class=\"hljs-string\">'products'<\/span>) <span class=\"hljs-comment\">\/\/ \u062c\u0644\u0628 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a<\/span>\r\n                          -&gt;get();\r\n                          \r\n    <span class=\"hljs-keyword\">return<\/span> response()-&gt;json(<span class=\"hljs-variable\">$categories<\/span>);\r\n}\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<hr data-path-to-node=\"18\" \/>\n<h3 data-path-to-node=\"19\">\u0627\u0644\u062c\u0632\u0621 \u0627\u0644\u062b\u0627\u0646\u064a: \u0627\u0644\u062d\u0644 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 Caching<\/h3>\n<p data-path-to-node=\"20\"><i data-path-to-node=\"20\" data-index-in-node=\"0\">(\u0627\u0643\u062a\u0628 \u0647\u0630\u0627 \u0627\u0644\u0634\u0631\u062d \u0642\u0628\u0644 \u0627\u0644\u0643\u0648\u062f \u0627\u0644\u062b\u0627\u0646\u064a)<\/i> \u0644\u062d\u0644 \u0627\u0644\u0645\u0634\u0643\u0644\u0629\u060c \u0642\u0645\u0646\u0627 \u0628\u0628\u0631\u0645\u062c\u0629 \u0637\u0628\u0642\u0629 \u0648\u0633\u064a\u0637\u0629 (Caching Layer). \u0627\u0644\u0646\u0638\u0627\u0645 \u064a\u062a\u062d\u0642\u0642 \u0623\u0648\u0644\u0627\u064b: &#8220;\u0647\u0644 \u0627\u0644\u0645\u0646\u064a\u0648 \u0645\u062d\u0641\u0648\u0638 \u0641\u064a \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \u0627\u0644\u0633\u0631\u064a\u0639\u0629 (Cache)\u061f&#8221;. \u0625\u0630\u0627 \u0646\u0639\u0645\u060c \u064a\u062a\u0645 \u0625\u0631\u0633\u0627\u0644\u0647 \u0641\u0648\u0631\u0627\u064b \u062f\u0648\u0646 \u0625\u0632\u0639\u0627\u062c \u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a. \u0625\u0630\u0627 \u0644\u0627\u060c \u064a\u062a\u0645 \u062c\u0644\u0628\u0647 \u0648\u062d\u0641\u0638\u0647 \u0644\u0645\u062f\u0629 \u0645\u0639\u064a\u0646\u0629 (\u0645\u062b\u0644\u0627\u064b 60 \u062f\u0642\u064a\u0642\u0629).<\/p>\n<p data-path-to-node=\"21\"><b data-path-to-node=\"21\" data-index-in-node=\"0\">(\u0627\u0646\u0633\u062e \u0647\u0630\u0627 \u0627\u0644\u0643\u0648\u062f \u0641\u064a \u0628\u0644\u0648\u0643 PHP &#8211; \u0648\u0627\u0643\u062a\u0628 \u0641\u0648\u0642\u0647: &#8220;\u0643\u0648\u062f Giturn \u0627\u0644\u0645\u062d\u0633\u0646 (\u0627\u0644\u0633\u0631\u064a\u0639)&#8221;):<\/b><\/p>\n<div class=\"code-block ng-tns-c372103520-368 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjipuvt4peSAxUAAAAAHQAAAAAQ0wU\">\n<div class=\"code-block-decoration header-formatted gds-title-s ng-tns-c372103520-368 ng-star-inserted\">\n<p><span class=\"ng-tns-c372103520-368\">PHP<\/span><\/p>\n<div class=\"buttons ng-tns-c372103520-368 ng-star-inserted\"><\/div>\n<\/div>\n<div class=\"formatted-code-block-internal-container ng-tns-c372103520-368\">\n<div class=\"animated-opacity ng-tns-c372103520-368\">\n<pre class=\"ng-tns-c372103520-368\"><code class=\"code-container formatted ng-tns-c372103520-368\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Support<\/span>\\<span class=\"hljs-title\">Facades<\/span>\\<span class=\"hljs-title\">Cache<\/span>;\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">getMenu<\/span>(<span class=\"hljs-params\"><span class=\"hljs-variable\">$restaurantId<\/span><\/span>) <\/span>{\r\n    \r\n    <span class=\"hljs-comment\">\/\/ \u0645\u0641\u062a\u0627\u062d \u0641\u0631\u064a\u062f \u0644\u0643\u0644 \u0645\u0637\u0639\u0645<\/span>\r\n    <span class=\"hljs-variable\">$cacheKey<\/span> = <span class=\"hljs-string\">\"menu_restaurant_<span class=\"hljs-subst\">{$restaurantId}<\/span>\"<\/span>;\r\n\r\n    <span class=\"hljs-comment\">\/\/ 1. \u0627\u0633\u062a\u062e\u062f\u0627\u0645 Cache::remember<\/span>\r\n    <span class=\"hljs-comment\">\/\/ \u064a\u0642\u0648\u0645 \u0627\u0644\u0646\u0638\u0627\u0645 \u0628\u062d\u0641\u0638 \u0627\u0644\u0645\u0646\u064a\u0648 \u0644\u0645\u062f\u0629 60 \u062f\u0642\u064a\u0642\u0629 (3600 \u062b\u0627\u0646\u064a\u0629)<\/span>\r\n    <span class=\"hljs-variable\">$menu<\/span> = Cache::remember(<span class=\"hljs-variable\">$cacheKey<\/span>, <span class=\"hljs-number\">3600<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> () <span class=\"hljs-title\">use<\/span> (<span class=\"hljs-params\"><span class=\"hljs-variable\">$restaurantId<\/span><\/span>) <\/span>{\r\n        \r\n        <span class=\"hljs-comment\">\/\/ \u0647\u0630\u0627 \u0627\u0644\u0643\u0648\u062f \u064a\u0646\u0641\u0630 \u0645\u0631\u0629 \u0648\u0627\u062d\u062f\u0629 \u0641\u0642\u0637 \u0643\u0644 \u0633\u0627\u0639\u0629!<\/span>\r\n        <span class=\"hljs-keyword\">return<\/span> Category::where(<span class=\"hljs-string\">'restaurant_id'<\/span>, <span class=\"hljs-variable\">$restaurantId<\/span>)\r\n                       -&gt;with([<span class=\"hljs-string\">'products'<\/span> =&gt; <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span>(<span class=\"hljs-params\"><span class=\"hljs-variable\">$query<\/span><\/span>) <\/span>{\r\n                           <span class=\"hljs-variable\">$query<\/span>-&gt;where(<span class=\"hljs-string\">'is_available'<\/span>, <span class=\"hljs-literal\">true<\/span>); <span class=\"hljs-comment\">\/\/ \u0641\u0642\u0637 \u0627\u0644\u0645\u0646\u062a\u062c\u0627\u062a \u0627\u0644\u0645\u062a\u0627\u062d\u0629<\/span>\r\n                       }])\r\n                       -&gt;get();\r\n    });\r\n\r\n    <span class=\"hljs-keyword\">return<\/span> response()-&gt;json(<span class=\"hljs-variable\">$menu<\/span>);\r\n}\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<hr data-path-to-node=\"23\" \/>\n<h3 data-path-to-node=\"24\">\u0627\u0644\u062c\u0632\u0621 \u0627\u0644\u062b\u0627\u0644\u062b: \u0627\u0644\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0630\u0643\u064a (Cache Invalidation)<\/h3>\n<p data-path-to-node=\"25\"><i data-path-to-node=\"25\" data-index-in-node=\"0\">(\u0646\u0642\u0637\u0629 \u062a\u0642\u0646\u064a\u0629 \u0645\u0647\u0645\u0629 \u062c\u062f\u0627\u064b)<\/i> \u0642\u062f \u064a\u0633\u0623\u0644 \u0633\u0627\u0626\u0644: &#8220;\u0645\u0627\u0630\u0627 \u0644\u0648 \u063a\u064a\u0631 \u0627\u0644\u0645\u0637\u0639\u0645 \u0633\u0639\u0631 \u0648\u062c\u0628\u0629\u061f \u0647\u0644 \u0646\u0646\u062a\u0638\u0631 \u0633\u0627\u0639\u0629 \u0644\u064a\u062a\u063a\u064a\u0631\u061f&#8221;. \u0627\u0644\u062c\u0648\u0627\u0628 \u0647\u0648 <b data-path-to-node=\"25\" data-index-in-node=\"101\">\u0644\u0627<\/b>. \u0642\u0645\u0646\u0627 \u0628\u0628\u0631\u0645\u062c\u0629 &#8220;Observer&#8221; \u064a\u0642\u0648\u0645 \u0628\u062d\u0630\u0641 \u0627\u0644\u0643\u0627\u0634 \u0627\u0644\u0642\u062f\u064a\u0645 \u062a\u0644\u0642\u0627\u0626\u064a\u0627\u064b \u0628\u0645\u062c\u0631\u062f \u0623\u0646 \u064a\u0636\u063a\u0637 \u0645\u062f\u064a\u0631 \u0627\u0644\u0645\u0637\u0639\u0645 \u0639\u0644\u0649 \u0632\u0631 &#8220;\u062a\u0639\u062f\u064a\u0644&#8221;.<\/p>\n<p data-path-to-node=\"26\"><b data-path-to-node=\"26\" data-index-in-node=\"0\">(\u0627\u0646\u0633\u062e \u0647\u0630\u0627 \u0627\u0644\u0643\u0648\u062f \u0641\u064a \u0628\u0644\u0648\u0643 PHP):<\/b><\/p>\n<div class=\"code-block ng-tns-c372103520-369 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjipuvt4peSAxUAAAAAHQAAAAAQ1AU\">\n<div class=\"code-block-decoration header-formatted gds-title-s ng-tns-c372103520-369 ng-star-inserted\">\n<p><span class=\"ng-tns-c372103520-369\">PHP<\/span><\/p>\n<div class=\"buttons ng-tns-c372103520-369 ng-star-inserted\"><\/div>\n<\/div>\n<div class=\"formatted-code-block-internal-container ng-tns-c372103520-369\">\n<div class=\"animated-opacity ng-tns-c372103520-369\">\n<pre class=\"ng-tns-c372103520-369\"><code class=\"code-container formatted ng-tns-c372103520-369\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-comment\">\/\/ \u0639\u0646\u062f \u062a\u062d\u062f\u064a\u062b \u0623\u064a \u0645\u0646\u062a\u062c\u060c \u0646\u0642\u0648\u0645 \u0628\u0645\u0633\u062d \u0627\u0644\u0643\u0627\u0634 \u0627\u0644\u0642\u062f\u064a\u0645 \u0641\u0648\u0631\u0627\u064b<\/span>\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">updated<\/span>(<span class=\"hljs-params\">Product <span class=\"hljs-variable\">$product<\/span><\/span>) <\/span>{\r\n    <span class=\"hljs-variable\">$restaurantId<\/span> = <span class=\"hljs-variable\">$product<\/span>-&gt;restaurant_id;\r\n    Cache::forget(<span class=\"hljs-string\">\"menu_restaurant_<span class=\"hljs-subst\">{$restaurantId}<\/span>\"<\/span>);\r\n}\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<hr data-path-to-node=\"28\" \/>\n<h3 data-path-to-node=\"29\">(\u0627\u0644\u062e\u0627\u062a\u0645\u0629)<\/h3>\n<p data-path-to-node=\"30\">\u0628\u0641\u0636\u0644 \u0647\u0630\u0647 \u0627\u0644\u0647\u0646\u062f\u0633\u0629 \u0627\u0644\u0628\u0631\u0645\u062c\u064a\u0629\u060c \u0623\u0635\u0628\u062d \u0645\u0646\u064a\u0648 \u0645\u0637\u0639\u0645 <b data-path-to-node=\"30\" data-index-in-node=\"42\">\u0627\u0644\u062f\u0645\u0634\u0642\u064a<\/b> \u0648 <b data-path-to-node=\"30\" data-index-in-node=\"52\">Friends Cafe<\/b> \u064a\u0641\u062a\u062d \u0628\u0633\u0631\u0639\u0629 \u0627\u0644\u0628\u0631\u0642 \u062d\u062a\u0649 \u0641\u064a \u0623\u0648\u0642\u0627\u062a \u0627\u0644\u0630\u0631\u0648\u0629 \u0627\u0644\u0645\u0632\u062f\u062d\u0645\u0629 \u0628\u0627\u0644\u062c\u0627\u0645\u0639\u0629. \u0627\u0644\u0633\u0631\u0639\u0629 \u062a\u0639\u0646\u064a \u062a\u062c\u0631\u0628\u0629 \u0645\u0633\u062a\u062e\u062f\u0645 \u0623\u0641\u0636\u0644\u060c \u0648\u0628\u0627\u0644\u062a\u0627\u0644\u064a \u0645\u0628\u064a\u0639\u0627\u062a \u0623\u0643\u062b\u0631 \u0644\u0639\u0645\u0644\u0627\u0626\u0646\u0627.<\/p>\n<p data-path-to-node=\"31\">\u0647\u0644 \u0644\u062f\u064a\u0643 \u0645\u0634\u0631\u0648\u0639 \u064a\u062a\u0648\u0642\u0639 \u0632\u064a\u0627\u0631\u0627\u062a \u0639\u0627\u0644\u064a\u0629 \u0648\u062a\u062e\u0627\u0641 \u0645\u0646 \u0628\u0637\u0621 \u0627\u0644\u0633\u0631\u0641\u0631\u061f<br \/>\n<b data-path-to-node=\"31\" data-index-in-node=\"54\">[\u0627\u0633\u062a\u0634\u0631 \u0641\u0631\u064a\u0642 Giturn \u0644\u062a\u0647\u064a\u0626\u0629 \u0627\u0644\u0628\u0646\u064a\u0629 \u0627\u0644\u062a\u062d\u062a\u064a\u0629 \u0644\u0645\u0634\u0631\u0648\u0639\u0643]<\/b>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0641\u064a \u0645\u0634\u0627\u0631\u064a\u0639 \u0645\u062b\u0644 &#8220;\u0627\u0644\u0645\u0646\u064a\u0648 \u0627\u0644\u0631\u0642\u0645\u064a&#8221; \u0644\u062c\u0627\u0645\u0639\u0629 \u0643\u0631\u0643\u0648\u0643\u060c \u0627\u0644\u062a\u062d\u062f\u064a \u0627\u0644\u062d\u0642\u064a\u0642\u064a \u0644\u064a\u0633 \u0641\u064a \u0639\u0631\u0636 \u0635\u0648\u0631 \u0627\u0644\u0637\u0639\u0627\u0645\u060c \u0628\u0644 \u0641\u064a \u0627\u0644\u062a\u0632\u0627\u0645\u0646 (Concurrency). \u0641\u064a \u0648\u0642\u062a \u0627\u0644\u0627\u0633\u062a\u0631\u0627\u062d\u0629\u060c \u064a\u0642\u0648\u0645 \u0622\u0644\u0627\u0641 \u0627\u0644\u0637\u0644\u0627\u0628 \u0628\u0645\u0633\u062d \u0643\u0648\u062f QR \u0641\u064a \u0646\u0641\u0633 \u0627\u0644\u062f\u0642\u064a\u0642\u0629. \u0644\u0648 \u0627\u0639\u062a\u0645\u062f\u0646\u0627 \u0639\u0644\u0649 \u062c\u0644\u0628 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0645\u0646 &#8220;\u0642\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a&#8221; (Database) \u0641\u064a \u0643\u0644 \u0645\u0631\u0629\u060c \u0633\u064a\u0646\u0647\u0627\u0631 \u0627\u0644\u0633\u0631\u0641\u0631 \u062a\u062d\u062a \u0647\u0630\u0627 \u0627\u0644\u0636\u063a\u0637 \u0627\u0644\u0647\u0627\u0626\u0644 (\u0645\u0627 \u064a\u0634\u0628\u0647 \u0647\u062c\u0648\u0645 DDoS \u063a\u064a\u0631 \u0645\u0642\u0635\u0648\u062f). \u0627\u0644\u062d\u0644 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[14],"tags":[],"class_list":["post-127","post","type-post","status-publish","format-standard","hentry","category-14"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/posts\/127","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/comments?post=127"}],"version-history":[{"count":2,"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/posts\/127\/revisions"}],"predecessor-version":[{"id":144,"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/posts\/127\/revisions\/144"}],"wp:attachment":[{"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/media?parent=127"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/categories?post=127"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/giturn.com\/blog\/wp-json\/wp\/v2\/tags?post=127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}