ホームページ php教程 php手册 高性能电商平台 外贸电商系统 高负载高并发,高效,高速,分布,

高性能电商平台 外贸电商系统 高负载高并发,高效,高速,分布,

Jun 06, 2016 pm 07:31 PM
プラットホーム 同時 電子商取引 システム 負荷 高い同時実行性 ハイパフォーマンス 高負荷

高性能电商平台外贸电商系统高负载高并发,高效,高速,分布,高性能电商系统 有了以下各种技术与优化,再也不为丢单而烦恼;用了此系统老板您赚钱就可高枕无忧啦! 核心特点如下: 数据库读写分离加速,memcached缓冲加速,HTML静态页面加速 图片加水印,图片

高性能电商平台 外贸电商系统 高负载高并发,高效,高速,分布,高性能 电商系统
有了以下各种技术与优化,再也不为丢单而烦恼;用了此系统老板您赚钱就可高枕无忧啦!

核心特点如下:
数据库读写分离加速,memcached 缓冲加速,HTML静态页面加速

图片加水印,图片服务器分离,图片支持CDN,镜像服务器DNS轮循

多语言支持,多货币支持

订单报表统计分析,产品价格优惠处理

可灵活配置页面布局,多服务器负载均衡布局

订单批量打印,订单导出,数据分析导出,安全性高可靠性强,各种细节的优化处理

演示前台:http://demo.hecart.com/
演示后台账号:demo
演示后台密码:demo
演示后台:http://dadm.hecart.com/

网站结构采用:LINUX + NGINX + PHP + MYSQL + MEMCACHE

download hecart: http://www.hecart.com/category/3.html

High-performance electronic cart platform foreign electricity suppliers system high load high concurrency, high efficiency, high-speed, distributed, high-performance electronic cart systems

With these various techniques and optimization, then do not worry for the lost one; using this system you can sit back and relax boss Monetize your friends!

Core features are as follows:
Database separate read and write speed

memcached buffering speed

HTML static pages acceleration

Images watermarked

image server separation

image support CDN

DNS round robin mirror server

Multi-language support

multi-currency support

Orders report statistical analysis, product price concessions deal

Page layout can be flexibly configured, multi-server load balanced layout

Safety reliability, all the details of the optimization process

Demo Reception: http://demo.hecart.com/
Demo backstage account: demo
Demo backstage Password: demo
Demo Background: http://dadm.hecart.com/

Contact QQ: 309479600
Contact E-mail: sale@hecart.com

Site structure using: LINUX + NGINX + PHP + MYSQL + MEMCACHE

download hecart: http://www.hecart.com/category/3.html OpenCart CKEditor MySQL CentOS

源码与演示:源码出处 演示出处

<?php
//Version
define('VERSION', '1.0.0');

//Configuration
define('DIR_SITE', empty($_SERVER['DOCUMENT_ROOT']) ? dirname(__FILE__) : $_SERVER['DOCUMENT_ROOT']);
define('DIR_ROOT', empty($_SERVER['DOCUMENT_ROOT']) ? dirname(dirname(__FILE__)) : dirname($_SERVER['DOCUMENT_ROOT']));
require(DIR_ROOT . '/config/start.php'); //loading start for here

//Cache OR static HTML file
if (true)
{
	//此处加速适合于多语言多货币
	$_GET['language'] = wcore_utils::get_var('language', '', 'c');
	$_GET['currency'] = wcore_utils::get_var('currency', '', 'c');
	$speed            = new wcore_speed('mem');
	unset($_GET['language'], $_GET['currency']);
}
else
{
	//此处加速仅适应于单语言单货币
	$puid  = ($_SERVER["REQUEST_URI"] == '/' || $_SERVER["REQUEST_URI"] == $_SERVER["SCRIPT_NAME"]) ? 'index.html' : $_SERVER["REQUEST_URI"];
	$speed = new wcore_speed(((strpos($puid, '?') === false) ? 'file' : 'mem'), 0, $puid);
}

$html = $speed->get_data();
if (!empty($html))
{
	exit($html);
}

//Startup
require(DIR_ROOT . '/system/startup.php');

//Application Classes
require(DIR_ROOT . '/system/library/customer.php');
require(DIR_ROOT . '/system/library/affiliate.php');
require(DIR_ROOT . '/system/library/currency.php');
require(DIR_ROOT . '/system/library/tax.php');
require(DIR_ROOT . '/system/library/weight.php');
require(DIR_ROOT . '/system/library/length.php');
require(DIR_ROOT . '/system/library/cart.php');

//Registry
$registry = new Registry();

//Loader
$loader = new Loader($registry);
$registry->set('load', $loader);

//Config
$config  = new Config();
$mem_cls = new modules_mem();
$registry->set('config', $config);

$store_info = get_store_info($mem_cls);
if (empty($store_info))
{
	$config->set('config_store_id', 0);
	$config->set('config_url', 'http://' . DOMAIN_NAME . '/');
	$config->set('config_ssl', 'https://' . DOMAIN_NAME . '/');
}
else
{
	$config->set('config_store_id', $store_info['store_id']);
}

//Settings
$res = $mem_cls->mem_sql("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = " . intval($config->get('config_store_id')), DB_GET_ALL);
foreach ($res as $setting)
{
	$config->set($setting['key'], ($setting['serialized']) ? unserialize($setting['value']) : $setting['value']);
}

//Url
$url = new Url($config->get('config_url'), $config->get('config_use_ssl') ? $config->get('config_ssl') : $config->get('config_url'));
$registry->set('url', $url);

//Log
$log = new Log($config->get('config_error_filename'));
$registry->set('log', $log);

//Error Handler
function error_handler($errno, $errstr, $errfile, $errline)
{
	global $log, $config;
	switch ($errno)
	{
		case E_NOTICE:
		case E_USER_NOTICE:
			$error = 'Notice';
			break;
		case E_WARNING:
		case E_USER_WARNING:
			$error = 'Warning';
			break;
		case E_ERROR:
		case E_USER_ERROR:
			$error = 'Fatal Error';
			break;
		default:
			$error = 'Unknown';
			break;
	}

	if ($config->get('config_error_display'))
	{
		echo '<b>' . $error . '</b>: ' . $errstr . ' in <b>' . $errfile . '</b> on line <b>' . $errline . '</b>';
	}

	if ($config->get('config_error_log'))
	{
		$log->write('PHP ' . $error . ':  ' . $errstr . ' in ' . $errfile . ' on line ' . $errline);
	}

	return true;
}

set_error_handler('error_handler');

//Request
$request = new Request();
$registry->set('request', $request);

//Response
$response = new Response();
$response->addHeader('Content-Type: text/html; charset=utf-8');
$response->setCompression($config->get('config_compression'));
$registry->set('response', $response);

//Session
$session = new wcore_session(SESSION_SAVE_TYPE);
$registry->set('session', $session);

//Language Detection
$languages = get_languages($mem_cls);
$code      = $config->get('config_language');
if (isset($request->cookie['language']) && isset($languages[$request->cookie['language']]) && $languages[$request->cookie['language']]['status'])
{
	$code = $request->cookie['language'];
}
else //自动检测语言
{
	if (isset($request->server['HTTP_ACCEPT_LANGUAGE']) && ($request->server['HTTP_ACCEPT_LANGUAGE']))
	{
		$browser_languages = explode(',', $request->server['HTTP_ACCEPT_LANGUAGE']);
		foreach ($browser_languages as $browser_language)
		{
			foreach ($languages as $key => $value)
			{
				if ($value['status'])
				{
					$locale = explode(',', $value['locale']);
					if (in_array($browser_language, $locale))
					{
						$code = $key;
					}
				}
			}
		}
	}
	$request->cookie['language'] = $code;
	wcore_utils::set_cookie('language', $code, 365);
}
$config->set('config_language_id', $languages[$code]['language_id']);
$config->set('config_language', $languages[$code]['code']);

//Language
$language = new Language($languages[$code]['directory']);
$language->load($languages[$code]['filename']);
$registry->set('language', $language);

//Document
$registry->set('document', new Document());

//Customer
$registry->set('customer', new Customer($registry));

//Affiliate
$registry->set('affiliate', new Affiliate($registry));
if (isset($request->get['tracking']) && !isset($request->cookie['tracking']))
{
	wcore_utils::set_cookie('tracking', $request->get['tracking'], 365);
}

//Currency
$registry->set('currency', new Currency($registry));

//Tax
$registry->set('tax', new Tax($registry));

//Weight
$registry->set('weight', new Weight($registry));

//Length
$registry->set('length', new Length($registry));

//Cart
$registry->set('cart', new Cart($registry));

//Encryption
$registry->set('encryption', new Encryption($config->get('config_encryption')));

//Front Controller
$controller = new Front($registry);

//Router
$action = new Action(isset($request->get['route']) ? $request->get['route'] : 'common/home');

//Dispatch
$controller->dispatch($action, new Action('error/not_found'));

//Output
if (defined('WCORE_SPEED'))
{
	$html = $response->render();
	$speed->set_data($html);
	unset($speed);
	echo($html);
}
else
{
	$response->output();
}
?>
ログイン後にコピー
<?php
/**
 * 慧佳工作室 -> hoojar studio
 *
 * 模块: $Id: config.php 1 2012-11-20 05:55:12Z Administrator $
 * 简述: 网站各大参数设置 (注此文件需COPY一份到此目录下并改名为setting.php)
 * 作者: woods·zhang  ->  hoojar@163.com
 *
 * 版权 2006-2013, 慧佳工作室拥有此系统所有版权等知识产权
 * Copyright 2006-2013, Hoojar Studio All Rights Reserved.
 *
 * 设置出错等级
 */
mb_internal_encoding('UTF-8');								//系统使用默认字符集为UTF-8
ini_set('error_reporting',	E_ALL | E_STRICT);				//出错等级
ini_set('display_errors',	isset($_GET['error']) ? 1 : 1);	//是否显示出错信息0关1开
ini_set('date.timezone',	'Asia/Shanghai');				//设置时区

/**
 * 执行文件的文件名与文件路径
 */
$pinfo = pathinfo($_SERVER['SCRIPT_FILENAME']);
define('EXEC_PATH',	$pinfo['dirname']);						//执行文件所在的全路径
define('EXEC_FILE',	$pinfo['basename']);					//执行文件的名称含扩展名
define('EXEC_EXT',	$pinfo['extension']);					//执行文件的扩展名
define('EXEC_NAME',	strtok(EXEC_FILE, '.'));				//执行文件名不含扩展名
unset($pinfo);

/**
 * 图片与JS本要加载或CDN加载开关
 */
define('USE_ISLOCAL_IMG',		0);		//是否使用本机静态文件(图片)
define('USE_ISLOCAL_JS2CSS',	1);		//是否使用本机静态文件(JS,CSS)

/**
 * 提升浏览者速度
 */
define('COMPRESS_HTML',		true);		//是否压缩HTML,为真且不出错展示关闭则对HTML进行压缩(注:如果代码写得较乱者,压缩可能会无法展示)
define('COMPRESS_JS2CSS',	true);		//是否压缩JS与CSS代码,为真且不出错展示关闭则对HTML进行压缩(注:如果代码写得较乱者,压缩可能会导致无法正常执行)

/**
 * 系统常规设置
 */
define('PRICE_ROUND',		-1);		//价格四舍五入,小于0则不4舍5入,大于等于0则4舍5入到几位小数
define('SESSION_SAVE_TYPE',	'db');		//SESSION采取哪种类型与存储长度:db(max:65535) mdb(max:255) mem(max:unlimit) file(max:unlimit) dir(max:unlimit)

define('SPEED_DATA',		true);		//是否启用加速数据服务将HTML缓冲起来或生成静态文件
define('SPEED_DATA_EXPIRE',	30);		//加速数据有效期(单位分钟)

define('MEM_CACHED',		true);		//定义MEMCACHED是否有效
define('MEM_ASYN_SQL_NUM',	100);		//当异步存储了SQL条数达到此数就执行SQL

define('SQL_DEBUG',			false);		//测试SQL调试开关(true or false)
define('SQL_ERROR_FOR_TIP',	false);		//SQL语句执行出错用wcore_tip来展示

define('LOGIN_ERR_NUM',		3);			//登录出错最多可多少次后就锁帐号
define('LOGIN_PASS_HOUR',	6);			//登录出错间隔多少小时内不能登录

define('SITE_MD5_KEY',		'*#6@9');	//网站MD5密匙
define('IMAGES_PATH',		'/img/');	//产品图片相对于www目录而言的相对文件路径
define('DOMAIN_NAME',		isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'hecart.com');//当前域名

/**
 * HTTP URL
 */
define('HTTP_STORE',	'http://w.hecart.com/');		//商城HTTP主页地址
define('HTTPS_STORE',	'https://w.hecart.com/');		//商城HTTPS主页地址
define('DIR_IMAGE',		DIR_ROOT . '/www' . IMAGES_PATH);	//商品图片存储路径

/**
 * 数据库读取类型
 */
define('DB_PREFIX',		'he_');					//数据库表前缀
define('DB_GET_ONE',	'fetch_one');			//获取一个数据
define('DB_GET_ROW',	'fetch_row');			//获取一条数据
define('DB_GET_ALL',	'fetch_all');			//获取多条数据
define('DB_GET_PAIRS',	'fetch_pairs');			//获取一对数据

/**
 * 数据库主库,一般用于写入数据
 */
$db_server						= array();		//数据库服务器连接名称
$db_server['master']['dbtype']	= 'mysqli';		//数据库连接类型
$db_server['master']['host']	= 'localhost';	//数据库服务器主机
$db_server['master']['port']	= 3306;			//数据库服务器主机端口
$db_server['master']['user']	= 'root';		//数据库用户名
$db_server['master']['pwd']		= '123456';		//数据库密码
$db_server['master']['dbname']	= 'hecart';		//数据库名
$db_server['master']['charset']	= 'utf8';		//数据库字符集
$db_server['master']['pconnect']= false;		//是否持续链接数据库

/**
 * 数据库从库,一般用于只读取数据
 */
$db_server['slave']['dbtype']	= 'mysqli';		//数据库连接类型
$db_server['slave']['host']		= 'localhost';	//数据库服务器主机
$db_server['slave']['port']		= 3306;			//数据库服务器主机端口
$db_server['slave']['user']		= 'root';		//数据库用户名
$db_server['slave']['pwd']		= '123456';		//数据库密码
$db_server['slave']['dbname']	= 'hecart';		//数据库名
$db_server['slave']['charset']	= 'utf8';		//数据库字符集
$db_server['slave']['pconnect']	= false;		//是否持续链接数据库
define('DB_SERVERS', json_encode($db_server));
unset($db_server);

/**
 * 缓冲MEMCACHED服务器
 */
define('MEM_USE',		false);			//是否开启使用MEMCACHED服务器
define('MEM_PORT',		11211);			//MEMCACHED单机服务器端口号
define('MEM_EXPIRE',	30);			//MEMCACHED服务器存储数据的有效期,以分钟为单位
define('MEM_PREFIX',	DOMAIN_NAME);	//存储MEMCACHED数据时KEY的前缀
$mem_servers	= array();
$mem_servers[]	= '127.0.0.1:11211';	//MEMCACHED服务器主机1:端口
$mem_servers[]	= '127.0.0.1:11211';	//MEMCACHED服务器主机2:端口
$mem_servers[]	= '127.0.0.1:11211';	//MEMCACHED服务器主机3:端口
define('MEM_SERVERS', json_encode($mem_servers));
unset($mem_servers);

/**
 * 网站图片主机域名(转换图片地址为网站实际对应的地址或CDN地址)
 */
$img_urls	= array();
$img_urls[]	= 'http://img1.hecart.com';	//图片主机域名1
$img_urls[]	= 'http://img2.hecart.com';	//图片主机域名2
$img_urls[]	= 'http://img3.hecart.com';	//图片主机域名3
define('IMG_URLS', json_encode($img_urls));
unset($img_urls);

/**
 * SMTP服务器
 */
$smtp_server		= array();
$smtp_server['host']= 'mail.hecart.com';	//SMTP服务器主机
$smtp_server['port']= 25;					//SMTP服务器端口
$smtp_server['user']= 'getpwd@hecart.com';	//SMTP登录用户账号
$smtp_server['upwd']= 'pwd!(*#489';			//SMTP登录用户密码
$smtp_server['cset']= 'utf-8';				//SMTP邮件内容编码
define('SMTP_SERVER', json_encode($smtp_server));
unset($smtp_server);
?>
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ファーウェイのQiankun ADS3.0インテリジェント運転システムは8月に発売され、初めてXiangjie S9に搭載される ファーウェイのQiankun ADS3.0インテリジェント運転システムは8月に発売され、初めてXiangjie S9に搭載される Jul 30, 2024 pm 02:17 PM

7月29日、AITO Wenjieの40万台目の新車のロールオフ式典に、ファーウェイの常務取締役、ターミナルBG会長、スマートカーソリューションBU会長のYu Chengdong氏が出席し、スピーチを行い、Wenjieシリーズモデルの発売を発表した。 8月にHuawei Qiankun ADS 3.0バージョンが発売され、8月から9月にかけて順次アップグレードが行われる予定です。 8月6日に発売されるXiangjie S9には、ファーウェイのADS3.0インテリジェント運転システムが初搭載される。 LiDARの支援により、Huawei Qiankun ADS3.0バージョンはインテリジェント運転機能を大幅に向上させ、エンドツーエンドの統合機能を備え、GOD(一般障害物識別)/PDP(予測)の新しいエンドツーエンドアーキテクチャを採用します。意思決定と制御)、駐車スペースから駐車スペースまでのスマート運転のNCA機能の提供、CAS3.0のアップグレード

常に新しい! Huawei Mate60シリーズがHarmonyOS 4.2にアップグレード:AIクラウドの強化、Xiaoyi方言はとても使いやすい 常に新しい! Huawei Mate60シリーズがHarmonyOS 4.2にアップグレード:AIクラウドの強化、Xiaoyi方言はとても使いやすい Jun 02, 2024 pm 02:58 PM

4月11日、ファーウェイはHarmonyOS 4.2 100台のアップグレード計画を初めて正式に発表し、今回は携帯電話、タブレット、時計、ヘッドフォン、スマートスクリーンなどのデバイスを含む180台以上のデバイスがアップグレードに参加する予定だ。先月、HarmonyOS4.2 100台アップグレード計画の着実な進捗に伴い、Huawei Pocket2、Huawei MateX5シリーズ、nova12シリーズ、Huawei Puraシリーズなどの多くの人気モデルもアップグレードと適応を開始しました。 HarmonyOS によってもたらされる共通の、そして多くの場合新しい体験を楽しむことができる Huawei モデルのユーザーが増えることになります。ユーザーのフィードバックから判断すると、HarmonyOS4.2にアップグレードした後、Huawei Mate60シリーズモデルのエクスペリエンスがあらゆる面で向上しました。特にファーウェイM

Java 関数の同時実行性とマルチスレッド化によってパフォーマンスはどのように向上するのでしょうか? Java 関数の同時実行性とマルチスレッド化によってパフォーマンスはどのように向上するのでしょうか? Apr 26, 2024 pm 04:15 PM

Java 関数を使用した同時実行およびマルチスレッド技術により、次の手順を含むアプリケーションのパフォーマンスを向上させることができます。 同時実行およびマルチスレッドの概念を理解する。 Java の同時実行性と、ExecutorService や Callable などのマルチスレッド ライブラリを活用します。マルチスレッドの行列乗算などのケースを練習して、実行時間を大幅に短縮します。同時実行性とマルチスレッドによってもたらされる、アプリケーションの応答速度の向上と最適化された処理効率の利点をお楽しみください。

Golang API 設計における同時実行性とコルーチンの適用 Golang API 設計における同時実行性とコルーチンの適用 May 07, 2024 pm 06:51 PM

同時実行性とコルーチンは、GoAPI 設計で次の目的で使用されます。 高パフォーマンス処理: 複数のリクエストを同時に処理してパフォーマンスを向上させます。非同期処理: コルーチンを使用してタスク (電子メールの送信など) を非同期に処理し、メインスレッドを解放します。ストリーム処理: コルーチンを使用して、データ ストリーム (データベース読み取りなど) を効率的に処理します。

ファーウェイは、心拍数に基づいてユーザーの感情状態を評価できるスマートウェアラブル分野でXuanjiセンシングシステムを発売する ファーウェイは、心拍数に基づいてユーザーの感情状態を評価できるスマートウェアラブル分野でXuanjiセンシングシステムを発売する Aug 29, 2024 pm 03:30 PM

最近、ファーウェイは、Xuanjiセンシングシステムを搭載した新しいスマートウェアラブル製品を9月に発売すると発表しました。これはファーウェイの最新スマートウォッチとなる予定です。この新製品は、高度な感情的健康モニタリング機能を統合し、正確性、包括性、スピード、柔軟性、オープン性、拡張性という 6 つの特徴を備えた包括的な健康評価をユーザーに提供します。このシステムはスーパーセンシングモジュールを使用し、マルチチャンネル光路アーキテクチャ技術を最適化することで、心拍数、血中酸素、呼吸数などの基本的な指標の監視精度を大幅に向上させます。さらに、Xuanji センシング システムは、心拍数データに基づく感情状態の研究も拡張しており、生理学的指標に限定されず、ユーザーの感情状態やストレス レベルを評価することもでき、60 以上のスポーツのモニタリングをサポートしています。健康指標、心臓血管、呼吸器、神経、内分泌、

高同時実行システムにおける Golang フレームワークのアーキテクチャ 高同時実行システムにおける Golang フレームワークのアーキテクチャ Jun 03, 2024 pm 05:14 PM

同時実行性の高いシステムの場合、Go フレームワークはパイプライン モード、Goroutine プール モード、メッセージ キュー モードなどのアーキテクチャ モードを提供します。実際の場合、同時実行性の高い Web サイトでは、Nginx プロキシ、Golang ゲートウェイ、Goroutine プール、およびデータベースを使用して、多数の同時リクエストを処理します。このコード例は、受信リクエストを処理するための Goroutine プールの実装を示しています。適切なアーキテクチャ パターンと実装を選択することで、Go フレームワークはスケーラブルで同時実行性の高いシステムを構築できます。

同時実行性の高いシナリオにおける PHP フレームワークのパフォーマンス 同時実行性の高いシナリオにおける PHP フレームワークのパフォーマンス Jun 06, 2024 am 10:25 AM

ベンチマーク テストによると、同時実行性の高いシナリオにおける PHP フレームワークのパフォーマンスは、Phalcon (RPS2200)、Laravel (RPS1800)、CodeIgniter (RPS2000)、および Symfony (RPS1500) です。実際の事例では、電子商取引 Web サイトのダブル イレブン イベント中に、Phalcon フレームワークが 1 秒あたり 3,000 件の注文を達成したことが示されています。

オブジェクト指向プログラミングにおける同時実行性の高いシナリオでの golang 関数の適用 オブジェクト指向プログラミングにおける同時実行性の高いシナリオでの golang 関数の適用 Apr 30, 2024 pm 01:33 PM

オブジェクト指向プログラミングの同時実行性の高いシナリオでは、Go 言語で関数が広く使用されています。 メソッドとしての関数: 関数を構造体にアタッチしてオブジェクト指向プログラミングを実装し、構造体データを便利に操作して特定の関数を提供できます。同時実行本体としての関数: 関数を goroutine 実行本体として使用して、タスクの同時実行を実装し、プログラムの効率を向上させることができます。コールバックとしての関数: 関数をパラメーターとして他の関数に渡し、特定のイベントまたは操作が発生したときに呼び出すことができるため、柔軟なコールバック メカニズムが提供されます。

See all articles