Skip to content

Commit 353c35a

Browse files
author
Joan He
committed
Merge remote-tracking branch 'origin/MAGETWO-34216-performance' into develop
2 parents a307ea0 + 21c7465 commit 353c35a

File tree

40 files changed

+1643
-644
lines changed

40 files changed

+1643
-644
lines changed

app/code/Magento/Backend/Model/Url.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class Url extends \Magento\Framework\Url implements \Magento\Backend\Model\UrlIn
8383
* @param \Magento\Framework\Url\ScopeResolverInterface $scopeResolver
8484
* @param \Magento\Framework\Session\Generic $session
8585
* @param \Magento\Framework\Session\SidResolverInterface $sidResolver
86-
* @param \Magento\Framework\Url\RouteParamsResolverFactory $routeParamsResolver
86+
* @param \Magento\Framework\Url\RouteParamsResolverFactory $routeParamsResolverFactory
8787
* @param \Magento\Framework\Url\QueryParamsResolverInterface $queryParamsResolver
8888
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
8989
* @param string $scopeType
@@ -105,7 +105,7 @@ public function __construct(
105105
\Magento\Framework\Url\ScopeResolverInterface $scopeResolver,
106106
\Magento\Framework\Session\Generic $session,
107107
\Magento\Framework\Session\SidResolverInterface $sidResolver,
108-
\Magento\Framework\Url\RouteParamsResolverFactory $routeParamsResolver,
108+
\Magento\Framework\Url\RouteParamsResolverFactory $routeParamsResolverFactory,
109109
\Magento\Framework\Url\QueryParamsResolverInterface $queryParamsResolver,
110110
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
111111
$scopeType,
@@ -126,7 +126,7 @@ public function __construct(
126126
$scopeResolver,
127127
$session,
128128
$sidResolver,
129-
$routeParamsResolver,
129+
$routeParamsResolverFactory,
130130
$queryParamsResolver,
131131
$scopeConfig,
132132
$scopeType,

app/code/Magento/Backend/Test/Unit/Model/UrlTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ protected function setUp()
165165
'menuConfig' => $this->_menuConfigMock,
166166
'authSession' => $this->_authSessionMock,
167167
'encryptor' => $this->_encryptor,
168-
'routeParamsResolver' => $this->_paramsResolverMock
168+
'routeParamsResolverFactory' => $this->_paramsResolverMock
169169
]
170170
);
171171
$this->_paramsResolverMock->expects(
@@ -186,7 +186,7 @@ protected function setUp()
186186
'menuConfig' => $this->_menuConfigMock,
187187
'authSession' => $this->_authSessionMock,
188188
'encryptor' => $this->_encryptor,
189-
'routeParamsResolver' => $this->_paramsResolverMock
189+
'routeParamsResolverFactory' => $this->_paramsResolverMock
190190
]
191191
);
192192

@@ -259,7 +259,7 @@ public function testGetAreaFrontName()
259259
[
260260
'backendHelper' => $helperMock,
261261
'authSession' => $this->_authSessionMock,
262-
'routeParamsResolver' => $this->_paramsResolverMock
262+
'routeParamsResolverFactory' => $this->_paramsResolverMock
263263
]
264264
);
265265
$urlModel->getAreaFrontName();

app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
2929
*
3030
* @var array
3131
*/
32-
protected $_availableOrder = [];
32+
protected $_availableOrder = null;
3333

3434
/**
3535
* List of available view types
@@ -146,19 +146,6 @@ public function __construct(
146146
parent::__construct($context, $data);
147147
}
148148

149-
/**
150-
* Init Toolbar
151-
*
152-
* @return null
153-
*/
154-
protected function _construct()
155-
{
156-
parent::_construct();
157-
$this->_orderField = $this->_productListHelper->getDefaultSortField();
158-
$this->_availableOrder = $this->_catalogConfig->getAttributeUsedForSortByArray();
159-
$this->_availableMode = $this->_productListHelper->getAvailableViewMode();
160-
}
161-
162149
/**
163150
* Disable list state params memorizing
164151
*
@@ -241,7 +228,7 @@ public function getCurrentOrder()
241228
}
242229

243230
$orders = $this->getAvailableOrders();
244-
$defaultOrder = $this->_orderField;
231+
$defaultOrder = $this->getOrderField();
245232

246233
if (!isset($orders[$defaultOrder])) {
247234
$keys = array_keys($orders);
@@ -295,6 +282,7 @@ public function getCurrentDirection()
295282
*/
296283
public function setDefaultOrder($field)
297284
{
285+
$this->loadAvailableOrders();
298286
if (isset($this->_availableOrder[$field])) {
299287
$this->_orderField = $field;
300288
}
@@ -322,6 +310,7 @@ public function setDefaultDirection($dir)
322310
*/
323311
public function getAvailableOrders()
324312
{
313+
$this->loadAvailableOrders();
325314
return $this->_availableOrder;
326315
}
327316

@@ -346,6 +335,7 @@ public function setAvailableOrders($orders)
346335
*/
347336
public function addOrderToAvailableOrders($order, $value)
348337
{
338+
$this->loadAvailableOrders();
349339
$this->_availableOrder[$order] = $value;
350340
return $this;
351341
}
@@ -358,6 +348,7 @@ public function addOrderToAvailableOrders($order, $value)
358348
*/
359349
public function removeOrderFromAvailableOrders($order)
360350
{
351+
$this->loadAvailableOrders();
361352
if (isset($this->_availableOrder[$order])) {
362353
unset($this->_availableOrder[$order]);
363354
}
@@ -411,7 +402,7 @@ public function getCurrentMode()
411402
if ($mode) {
412403
return $mode;
413404
}
414-
$defaultMode = $this->_productListHelper->getDefaultViewMode($this->_availableMode);
405+
$defaultMode = $this->_productListHelper->getDefaultViewMode($this->getModes());
415406
$mode = $this->_toolbarModel->getMode();
416407
if (!$mode || !isset($this->_availableMode[$mode])) {
417408
$mode = $defaultMode;
@@ -439,6 +430,9 @@ public function isModeActive($mode)
439430
*/
440431
public function getModes()
441432
{
433+
if ($this->_availableMode === []) {
434+
$this->_availableMode = $this->_productListHelper->getAvailableViewMode();
435+
}
442436
return $this->_availableMode;
443437
}
444438

@@ -450,6 +444,7 @@ public function getModes()
450444
*/
451445
public function setModes($modes)
452446
{
447+
$this->getModes();
453448
if (!isset($this->_availableMode)) {
454449
$this->_availableMode = $modes;
455450
}
@@ -691,4 +686,30 @@ public function getWidgetOptionsJson(array $customOptions = [])
691686
$options = array_replace_recursive($options, $customOptions);
692687
return json_encode(['productListToolbarForm' => $options]);
693688
}
689+
690+
/**
691+
* Get order field
692+
*
693+
* @return null|string
694+
*/
695+
protected function getOrderField()
696+
{
697+
if ($this->_orderField === null) {
698+
$this->_orderField = $this->_productListHelper->getDefaultSortField();
699+
}
700+
return $this->_orderField;
701+
}
702+
703+
/**
704+
* Load Available Orders
705+
*
706+
* @return $this
707+
*/
708+
private function loadAvailableOrders()
709+
{
710+
if ($this->_availableOrder === null) {
711+
$this->_availableOrder = $this->_catalogConfig->getAttributeUsedForSortByArray();
712+
}
713+
return $this;
714+
}
694715
}

app/code/Magento/Catalog/Model/Observer.php

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,14 @@ class Observer
3434
*
3535
* @var \Magento\Catalog\Model\Layer
3636
*/
37-
protected $_catalogLayer;
37+
private $_catalogLayer = null;
38+
39+
/**
40+
* Catalog layer resolver
41+
*
42+
* @var \Magento\Catalog\Model\Layer\Resolver
43+
*/
44+
protected $layerResolver;
3845

3946
/**
4047
* Store manager
@@ -95,7 +102,7 @@ public function __construct(
95102
$this->_categoryResource = $categoryResource;
96103
$this->_catalogProduct = $catalogProduct;
97104
$this->_storeManager = $storeManager;
98-
$this->_catalogLayer = $layerResolver->get();
105+
$this->layerResolver = $layerResolver;
99106
$this->_catalogCategory = $catalogCategory;
100107
$this->_catalogData = $catalogData;
101108
$this->categoryFlatConfig = $categoryFlatState;
@@ -184,16 +191,29 @@ protected function _addCategoriesToMenu($categories, $parentCategoryNode, $block
184191
*/
185192
protected function hasActive($category)
186193
{
187-
if (!$this->_catalogLayer) {
194+
$catalogLayer = $this->getCatalogLayer();
195+
if (!$catalogLayer) {
188196
return false;
189197
}
190198

191-
$currentCategory = $this->_catalogLayer->getCurrentCategory();
199+
$currentCategory = $catalogLayer->getCurrentCategory();
192200
if (!$currentCategory) {
193201
return false;
194202
}
195203

196204
$categoryPathIds = explode(',', $currentCategory->getPathInStore());
197205
return in_array($category->getId(), $categoryPathIds);
198206
}
207+
208+
/**
209+
* Get catalog layer
210+
* @return \Magento\Catalog\Model\Layer
211+
*/
212+
private function getCatalogLayer()
213+
{
214+
if ($this->_catalogLayer === null) {
215+
$this->_catalogLayer = $this->layerResolver->get();
216+
}
217+
return $this->_catalogLayer;
218+
}
199219
}

app/code/Magento/Catalog/Model/Resource/Category.php

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,36 @@ public function __construct(
9292
$this->_categoryTreeFactory = $categoryTreeFactory;
9393
$this->_categoryCollectionFactory = $categoryCollectionFactory;
9494
$this->_eventManager = $eventManager;
95-
$this->setType(
96-
\Magento\Catalog\Model\Category::ENTITY
97-
)->setConnection(
98-
$this->_resource->getConnection('catalog_read'),
99-
$this->_resource->getConnection('catalog_write')
100-
);
101-
$this->_categoryProductTable = $this->getTable('catalog_category_product');
95+
96+
$this->_read = 'catalog_read';
97+
$this->_write = 'catalog_write';
98+
}
99+
100+
/**
101+
* Entity type getter and lazy loader
102+
*
103+
* @return \Magento\Eav\Model\Entity\Type
104+
* @throws \Magento\Framework\Exception\LocalizedException
105+
*/
106+
public function getEntityType()
107+
{
108+
if (empty($this->_type)) {
109+
$this->setType(\Magento\Catalog\Model\Category::ENTITY);
110+
}
111+
return parent::getEntityType();
112+
}
113+
114+
/**
115+
* Category product table name getter
116+
*
117+
* @return string
118+
*/
119+
public function getCategoryProductTable()
120+
{
121+
if (!$this->_categoryProductTable) {
122+
$this->_categoryProductTable = $this->getTable('catalog_category_product');
123+
}
124+
return $this->_categoryProductTable;
102125
}
103126

104127
/**
@@ -359,7 +382,7 @@ protected function _saveCategoryProducts($category)
359382
*/
360383
if (!empty($delete)) {
361384
$cond = ['product_id IN(?)' => array_keys($delete), 'category_id=?' => $id];
362-
$adapter->delete($this->_categoryProductTable, $cond);
385+
$adapter->delete($this->getCategoryProductTable(), $cond);
363386
}
364387

365388
/**
@@ -374,7 +397,7 @@ protected function _saveCategoryProducts($category)
374397
'position' => (int)$position,
375398
];
376399
}
377-
$adapter->insertMultiple($this->_categoryProductTable, $data);
400+
$adapter->insertMultiple($this->getCategoryProductTable(), $data);
378401
}
379402

380403
/**
@@ -384,7 +407,7 @@ protected function _saveCategoryProducts($category)
384407
foreach ($update as $productId => $position) {
385408
$where = ['category_id = ?' => (int)$id, 'product_id = ?' => (int)$productId];
386409
$bind = ['position' => (int)$position];
387-
$adapter->update($this->_categoryProductTable, $bind, $where);
410+
$adapter->update($this->getCategoryProductTable(), $bind, $where);
388411
}
389412
}
390413

@@ -417,7 +440,7 @@ protected function _saveCategoryProducts($category)
417440
public function getProductsPosition($category)
418441
{
419442
$select = $this->_getWriteAdapter()->select()->from(
420-
$this->_categoryProductTable,
443+
$this->getCategoryProductTable(),
421444
['product_id', 'position']
422445
)->where(
423446
'category_id = :category_id'

0 commit comments

Comments
 (0)